烧录工具及文档:链接:https://pan.baidu.com/s/1jIvihSE 密码:y67p
本文主要讲解三部分:
一、编译原理流程讲解
二、打包脚本讲解
三、生成文件及烧录讲解
一、编译原理流程讲解
. build/envsetup.sh 配置命令环境(运行源码目录下的build.sh即可)
lunch选择编译项目
make installclean 清除编译
make -j4 编译(4代表多核编译)
make otapackage -j4 编译ota包
make基于源码根目录下的的Makefile运行,关于make及makefile语法及安卓mk文件原理不做讲解。
源码根目录下Makefile内容如下:
### DO NOT EDIT THIS FILE ###
include build/core/main.mk
-include device/rockchip/common/prebuild.mk
### DO NOT EDIT THIS FILE ###
此文件引用/build/core目录下mk文件,因此编译image的makefile文件为此目录下的MakeFile文件。
除了make还可以直接执行make systemimage、make bootimage等,就是在这个文件里实现的。
MakeFile中生成boot.img的方法:
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
$(call pretty,"Target boot image: $@")
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
MakeFile中生成ramdisk.img的方法:
BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
以上编译用到了安卓的编译工具。查看MakeFile中的.PHONY伪目标可以找到对应img文件编译的makefile语句。
二、打包脚本讲解
打包脚本文件为源码目录下的mkimage.sh(. mkimage.sh otapackage 是打包ota zip包)
//1.boot.img的生成过程
三、生成文件及烧录讲解
烧录工具及方法:链接:https://pan.baidu.com/s/1jIvihSE 密码:y67p
有三种烧录方法:1、各分区文件分别烧录2、update.img打包文件烧录3、ota文件烧录
这里不介绍具体的方法,方法参见上面文档即可。这里主要讲解
1、各分区文件的作用
2、update.img文件的打包方法
3、ota文件打包方法
1、各分区文件作用
Loader.bin:系统启动必须的引导文件bootloader,即rk3128MiniLoaderAll(L)_V2.31.bin
Paremeter 分区信息表:
FIRMWARE_VER:5.0.2
MACHINE_MODEL:rk312x
MACHINE_ID:007
MANUFACTURER:RK30SDK
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 312x
CHECK_MASK: 0x80
KERNEL_IMG: 0x60408000
#RECOVER_KEY: 1,1,0,20,0
CMDLINE:console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00006000@0x0000E000(kernel),0x00006000@0x00014000(boot),0x00010000@0x0001A000(recovery),0x00020000@0x0002A000(backup),0x00100000@0x0004A000(cache),0x001FE000@0x0014A000(userdata),0x00008000@0x00348000(metadata),0x00002000@0x00350000(kpanic),0x00200000@0x00352000(system),0x00020000@0x00552000(radical_update),-@0x00572000(user)
前面是关于机器固件版本,机器型号,机器制造厂商的信息,后面是一些分区信息。
uboot.img
二级loader,由rk3128MiniLoaderAll(L)_V2.31.bin启动
Misc.img
cpu加电之后,启动bootloader,(即是rk3128MiniLoaderAll(L)_V2.31.bin),然后启动二级loader,就会读取MISC分区第一块的内容, 决定进入recovery模式还是升级基带Baseband Processor(BP)或做其它事情。而更改Misc内容的操作为按下某个按键或者用户设置系统。
kernel.img
内核镜像,经过编译得出zImage,即为Kernel.img。或者SDK包直接附带。
boot.img
系统bootload启动之后,进入正常启动模式,就会读取boot.img进去系统正常模式。
boot.img包括了kernel.img镜像和一个根文件系统(rootfs 即打包的ramdisk.img)
recovery.img
系统bootload启动之后,通过读取Misc分区的内容,确认如果是进入Recovery模式的话,进去读取Recovery.img。
recovery.img包括了一个kernel.img与一个根文件系统(rootfs),kernel镜像与boot,img的完全一样。
system.img
系统库等、自己的APP也可以打包进去
2、update.img文件的打包方法
/RKTools/目录下有对应的工具,包含linux版本工具和windows版本工具。
linux工具在/RKTools/linux/Linux_Pack_Firmware/rockdev目录下。根据里面的readme.txt操作即可,说明如下:
**************Generate update.img******************
1.copy image to "rockdev/Image"
2.copy loader to "rockdev"
3.modify parameter and package-file
4.run mkupdate.sh to make update.img in "rockdev"
***************************************************
**************Unpack update.img********************
run unpack.sh
unpacking file in the "output"
***************************************************
windows工具在/RKTools/windows/AndroidTool/rockdev目录下:
使用步骤
首先,拷贝文件loader文件到工具所在目录下及backkupimage子目录下(如果没有子目录要重建),拷贝各img文件到Image子目录下,拷贝parameter.txt文件到工具所在目录下(名字可能不完全一样。mkimage.sh打包文件后面几句就是拷贝loader和parameter.txt文件的脚本,这里使用脚本里面拷贝的文件即可)。parameter.txt文件也需要拷贝到backupimage子目录下。
然后,修改工具目录下的package-file文件,主要修改对应的文件名。并将这个文件考虑一份到backupimage子目录下。
最后,运行mkupdate.bat即可生成update.img到工具目录下,生成过程会有成功提示。
3、ota文件打包方法
首先编译make otapackage -j4 编译ota包
其次打包
. mkimage.sh ota
生成的ota包在/out/target/product/rk312x目录下。
可以考虑用shell脚本实现update.img文件的打包,从而省却了拷贝文件的过程。