注意事项:
1、 本部分内所有编译命令都需要在代码根目录下执行
2、 每一次重新登录编译机器,切换shell后,都需要执行上述操作配置环境变量
3、 版本支持eng
和userdebug/user
模式编译
4、 以下操作以Hi3798CV200
芯片为例
版本支持eng
和userdebug/user
模式编译,环境变量配置需要执行如下操作:
source build/envsetup.sh
lunch Hi3798CV200-eng 或 lunch Hi3798CV200-userdebug 或 lunch Hi3798CV200-user
Hi3798CV200
:产品名称,out
目录的目录结构根据此名称生成
eng
:编译默认为eng
模式,同步支持userdebug/user
模式
LOCAL_MODULE_TAGS
的默认值都为optional
,此种配置在编译时不会自动拷贝至生成目录。
如果需要编译时默认拷贝至生成目录,编译生成文件为动态库、jar包、可执行文件和预编译文件
device/hisilicon/bigfish/build/product_package.mk中增加对应模块的$(LOCAL_MODULE)名称。
编译生成文件为apk时,则需要在上述文件中中增加$(LOCAL_PACKAGE_NAME)的名称
vim ~/.jack-server/config.properties
#Fri Apr 18 11:10:09 CST 2016
jack.server.max-jars-size=104857600
jack.server.max-service=4
jack.server.service.port=9076
jack.server.admin.port=9077
jack.server.config.version=1
jack.server.time-out=7200
#chmod 600 config.properties
vim ~/.jack-settings
# Server settings
SERVER_HOST=127.0.0.1
SERVER_PORT_SERVICE=9076
SERVER_PORT_ADMIN=9077
注意事项:
1.编译前需要按照<一>中配置环境变量,配置完成后才可以执行下面命令
2.本章内除第10节《修改sdk配置文件》以外,所有编译命令都需要在代码根目录下执行
3.本章命令无相互依赖关系,均可以单独执行
4.本章所有编译烧写镜像的命令,编译完成后,都会拷贝镜像到out/target/product/Hi3798CV200/目录
5.编译命令中的tee命令为记录编译log,log文件存放在代码根目录下,以tee命令后面所带参数命名文件中
注意:
如果有新增对外接口及变量,需要运行下面命令更新frameworks/base/api/current.txt文件,否则Android系统无法编译通过。
在代码根目录下执行:
make update-api
在代码根目录下执行:
make bigfish -j32 2>&1 | tee bigfish.log
编译结果:
在out目录会有Nand,Emmc两个目录,Nand目录下镜像适合烧写到Nand单板,Emmc目录下镜像适合烧写到eMMC单板
Emmc目录包含:
kernel.img // Adnroid 系统内核镜像
recovery.img //recovery 系统镜像
system.ext4,userdata.ext4,cache.ext4,private.ext4 // 文件系统镜像
bootargs.bin //bootargs分区镜像
Hi3798CV200-emmc.xml //分区表
update.zip // 升级包
fastboot.bin //fastboot镜像
baseparam.img //base镜像
logo.img //logo镜像
fastplay.img //fastplay镜像
pq_param.bin //pq_param镜像
注意:
1.此命令可以直接执行,不需要完整编译以后再执行
2.此命令生成的临时文件在out/target/product/Hi3798CV200/obj/KERNEL_OBJ/目录中
在代码根目录下执行:
make kernel -j32 2>&1 | tee kernel.log
在out目录中Nand,Emmc都会生成 kernel.img,两份kernel.img是一样,只是分别拷贝到了Nand,Emmc目录
清除编译结果:
rm -rf out/target/product/Hi3798CV200/obj/KERNEL_OBJ/
① 默认Android系统内核配置文件由device/hisilicon/Hi3798CV200/BoardConfig.mk
中
ANDROID_KERNEL_CONFIG
变量配置。
device/hisilicon/bigfish/sdk/source/kernel/linux-3.x.y/arch/arm/configs/目录
② 此命令可以直接执行,不需要完整编译以后再执行。执行后会弹出配置界面,通过此界面修改内核配置文件。
③ 修改完毕后请保存退出,修改后的文件保存为临时文件
out/target/product/Hi3798CV200/obj/KERNEL_OBJ/.config
请修改完毕后,将内核配置文件保存在
device/hisilicon/bigfish/sdk/source/kernel/linux-3.x.y/arch/arm/configs/目录
④ 如需要修改默认Android系统内核配置文件名称
修改device/hisilicon/Hi3798CV200/BoardConfig.mk
中ANDROID_KERNEL_CONFIG
变量的值为新的文件名,并同步修改device/hisilicon/bigfish/sdk/configs/
目录下的对应的sdk配置文件中CFG_HI_KERNEL_CFG变量的值。对应的sdk的配置文件的名称由device/hisilicon/Hi3798CV200/BoardConfig.mk中的HISI_SDK_ANDROID_CFG
变量定义。新的内核配置文件请保存到device/hisilicon/bigfish/sdk/source/kernel/linux-3.x.y/arch/arm/configs/
目录下
⑤ 内核配置文件要求均以_defconfig
结尾
⑥ 修改完成后,可以执行第3小节所述的命令编译出Android
系统内核镜像
⑦ 建议执行此命令前,删除内核临时文件存放目录:out/target/product/Hi3798CV200/obj/KERNEL_OBJ/
kernel_menuconfig
在代码根目录下执行:
./device/hisilicon/Hi3798CV200/kernel_module.sh
脚本执行完成后,会在out的system/lib/modules目录下生成驱动模块文件以及load加载脚本,并会修改以下目录及文件:
device/hisilicon/Hi3798CV200/build/kernel.mk
device/hisilicon/Hi3798CV200/etc/init.Hi3798CV200.sh
device/hisilicon/bigfish/sdk
注意:
1.本脚本命令可以直接执行,不需要完整编译以后再执行
2.本脚本命令会对原源码进行修改,并且会在SDK_DIR目录下产生大量的过程文件
3.本脚本命令只用于驱动模块调试
4.本脚本命令执行后,需要重新打包镜像文件(如update.zip)
注意:此命令可以直接执行,不需要完整编译以后再执行
在代码根目录下执行:
make ubifs -j32 2>&1 | tee ubifs.log
编译完成后,会在out的Nand目录生成:
system_4K_1M.ubi
data_4K_1M.ubi
cache_4K_1M.ubi
其中,.ubi扩展名的镜像,如:
4K: PageSize:页大小
1M: BlockSize:块大小
在代码根目录下执行:
make ext4fs -j32 2>&1 | tee ext4fs.log
编译完成后,会在out的Emmc目录生成:
system.ext4
userdata.ext4
cache.ext4
在代码根目录下执行:
make recoveryimg -j32 2>&1 | tee recovery.log
在out目录中Nand,Emmc都会生成 recovery.img,两份recovery.img是一样,只是分别拷贝到了Nand,Emmc目录
清除编译结果:
rm -rf out/target/product/Hi3798CV200/obj/RECOVERY_OBJ/
注意:
1.此命令可以直接执行,不需要完整编译以后再执行
2.此命令生成的临时文件在out/target/product/Hi3798CV200/obj/RECOVERY_OBJ/目录中/
在代码根目录下执行:
make recovery_menuconfig
注意事项:
1.默认Android recovery小系统内核配置文件由device/hisilicon/Hi3798CV200/BoardConfig.mk中
RECOVERY_KERNEL_CONFIG变量配置。
内核配置文件存放在:
`device/hisilicon/bigfish/sdk/source/kernel/linux-3.x.y/arch/arm/configs/目录`
2.此命令可以直接执行,不需要完整编译以后再执行。执行后会弹出配置界面,通过此界面修改内核配置文件
3.修改完毕后请保存退出,修改后的文件保存为临时文件out/target/product/Hi3798CV200/obj/RECOVERY_OBJ/.config
请修改完毕后,将内核配置文件保存在device/hisilicon/bigfish/sdk/source/kernel/linux-3.x.y/arch/arm/configs/目录下
的对应文件
4.如需要修改默认Android recovery小系统内核配置文件名称,请修改device/hisilicon/Hi3798CV200/BoardConfig.mk中
RECOVERY_KERNEL_CONFIG变量的值为新的文件名
新的内核配置文件请保存到device/hisilicon/bigfish/sdk/source/kernel/linux-3.x.y/arch/arm/configs/目录下
5.内核配置文件要求均以_defconfig结尾
6.修改完成后,可以执行第6小节所述的命令编译出Android recovery小系统内核镜像
7.建议执行此命令前,删除内核临时文件存放目录:out/target/product/Hi3798CV200/obj/RECOVERY_OBJ/
注意:
1.此命令可以直接执行,不需要完整编译以后再执行
2.如不需要recovery update包,此命令可以不执行
在代码根目录下执行:
make updatezip -j32 2>&1 | tee updatezip.log
注意:
1.所有的编译过程文件均在out目录下,执行此命令将清除所有编译结果
2.如需单独清除Android系统内核临时文件、Android recovery小系统内核临时文件和fastboot临时文件
请参考对应小节中的的方法,直接删除临时文件存放目录即可
在代码根目录下执行:
make clean
注意:
1、此命令需要在SDK目录device/hisilicon/bigfish/sdk
执行
2、SDK配置文件存放位置:device/hisilicon/bigfish/sdk/configs/
3、产品使用的SDK配置文件的名称在各产品BoardConfig.mk
的HISI_SDK_ANDROID_CFG
变量中定义,如:
device/hisilicon/Hi3798CV200/BoardConfig.mk
HISI_SDK_ANDROID_CFG := hi3798cv2dmo_hi3798cv200_android_cfg.mak
4、执行此命令会通过弹出的图形界面修改SDK配置文件,修改后保存退出,修改后的配置文件保存在SDK配置文件存放目录,原配置文件保存为:“配置文件名.old”,存放在SDK配置文件存放目录
5、用户也可以进入SDK配置文件存放目录,直接手动修改对应的配置文件
6、修改前,请确定所使用的SDK配置文件的文件名
进入SDK目录:
cd device/hisilicon/bigfish/sdk
执行命令"make menuconfig SDK_CFGFILE=configs/要修改的配置文件名"弹出修改界面,如:
make menuconfig SDK_CFGFILE=configs/hi3798cv200/hi3798cv2dmo_hi3798cv200_android_cfg.mak
在代码根目录下执行:
make kernel -j32 2>&1 | tee kernel.log
注意:
1.wifi驱动在编译内核时一并编译。编译完成后,会更新out目录中system/lib/modules目录下对应的wifi驱动
2.临时文件生成在out/target/product/Hi3798CV200/obj/KERNEL_OBJ/drivers/wifi
3、PCIE接口wifi请参考readme_for_pcie_wifi.txt,在.\device\hisilicon\bigfish\sdk\source\component\wifi\drv路径下
注意:
1.产品对应的默认fastboot.bin存放在device/hisilicon/Hi3798CV200/prebuilts/目录下
2.完整编译时,会直接拷贝此目录下的fastboot.bin至out目录,不会编译fastboot
3.编译fastboot依赖于device/hisilicon/Hi3798CV200/BoardConfig.mk中定义的sdk配置文件中对fastboot的配置:
HISI_SDK_ANDROID_CFG : hi3798cv2dmo_hi3798cv200_android_cfg.mak修改好对应的配置文件后,再执行此命令
4.此命令生成的临时文件在out/target/product/Hi3798CV200/obj/NAND_HIBOOT_OBJ/或
out/target/product/Hi3798CV200/obj/EMMC_HIBOOT_OBJ/目录中
6.fastboot镜像除fastboot本身功能外,还与分区表,bootargs分区镜像相关,如其中一个更新,则需要对应更新其他的镜像
7.如不需要更新fastboot镜像,此命令可以不执行
在代码根目录下执行:
make hiboot -j32 2>&1 | tee hiboot.log
会在out目录下的 Nand,Emmc中分别生成fastboot.bin
make hiboot-nand -j32 单独编译生成Nand目录中 fastboot.bin
make hiboot-emmc -j32 单独编译生成Emmc目录中 fastboot.bin
如果要修改 fastboot 所使用的reg文件,bootargs存放位置,请直接在
device/hisilicon/Hi3798CV200/BoardConfig.mk 中修改
for emmc fastboot // 适合 eMMc 的单板 fastboot.bin
BOOT_REG_NAME := hi3798cv2dmb_hi3798cv200_DDR3-1866_2GB_8bitx4_4layers.reg
EMMC_BOOT_ENV_STARTADDR :=0x100000
EMMC_BOOT_ENV_SIZE=0x10000
EMMC_BOOT_ENV_RANGE=0x10000
nand fastboot configure // 适合 Nand 的单板 fastboot.bin
BOOT_REG_NAME := hi3798cv2dmb_hi3798cv200_DDR3-1866_2GB_8bitx4_4layers.reg
NAND_BOOT_ENV_STARTADDR :=0x800000
NAND_BOOT_ENV_SIZE=0x10000
NAND_BOOT_ENV_RANGE=0x10000
如果需要支持多个单板,则需要根据不同单板的电压配置,选择匹配的表格名填写(BOOT_REG1_NAME/BOOT_REG2_NAME/BOOT_REG3_NAME/...)
清除编译结果:
直接删除out/target/product/Hi3798CV200/obj/NAND_HIBOOT_OBJ/或
out/target/product/Hi3798CV200/obj/NAND_HIBOOT_OBJ/目录即可,即:
rm -rf out/target/product/Hi3798CV200/obj/NAND_HIBOOT_OBJ/
rm -rf out/target/product/Hi3798CV200/obj/EMMC_HIBOOT_OBJ/
编译64位版本,需要修改产品目录下的customer.mk
,则执行以下步骤(编译其他版本步骤类似):
步骤1:
打开device/hisilicon/Hi3798CV200/customer.mk文件,找到HISI_TARGET_ARCH_SUPPORT所在行,配置HISI_TARGET_ARCH_SUPPORT := 32prefer。
步骤2:
进入代码根目录下,执行:
source build/envsetup.sh
lunch Hi3798CV200-eng
make bigfish -j32 2>&1 | tee bigfish.logsh.log
注意:
1.32位编译和64位编译相互切换时必须先执行make clean操作,然后执行source build/envsetup.sh和lunch Hi3798CV200-eng。
2.各个版本含义:
64kernel:64位内核,应用是32位
32prefer:64位内核,Native进程和系统Android进程是32位优先,应用是32位优先。
64prefer:64位内核,Native进程和系统Android进程是64位优先,应用是64位优先。
3.编译过程文件存放在:
out/target/product/Hi379XXVXXX/obj(存放64位编译过程文件)
和out/target/product/Hi379XXVXXX/obj_arm(存放32位编译过程文件)
在执行全编译的命令后,在 out 目录下会生成 Nand, Emmc 两个目录,Nand目录中镜像适合烧写到 Nand 的单板,Emmc目录中镜像适合烧写到 eMMc 单板
烧写工具 : HiTool
device/hisilicon/bigfish/sdk/tools/windows/HiTool/
注意事项:
1.第二章中的所有编译烧写镜像相关的命令,编译完成后都会拷贝镜像至out/target/product/Hi3798CV200/目录
2.所有烧写镜像及工具均可以在out/target/product/Hi3798CV200/目录找到
3.除需要烧写system分区和data分区以外,cache分区和sdcard分区也需要烧写。
Nand单板对应的bootargs:
device/hisilicon/Hi3798CV200/etc/bootargs_Hi3798CV200-nand.txt
eMMc 单板对应的bootargs:
device/hisilicon/Hi3798CV200/etc/bootargs_Hi3798CV200-emmc.txt
客户修改好对应bootargs的txt文件,make bigfish 编译系统后,会在 out/target/product/Hi3798CV200/ 下的Nand,Emmc目录对
应生成 bootargs.bin
修改 bootargs
setenv bootargs 'console=ttyAMA0,115200 blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),10M(recovery),2M(deviceinfo),8M(baseparam),8M(pqparam),20M(logo),20M(logobak),40M(fastplay),40M(fastplaybak),40M(kernel),20M(misc),8M(userapi),8M(hibdrv),8M(qbflag),300M(qbdata),800M(system),1024M(userdata),100M(cache),-(sdcard)'
修改 bootcmd
setenv bootcmd 'mmc read 0 0x1FFBFC0 0x4B000 0x5000; bootm 0x1FFBFC0'
保存修改
saveenv
setenv
,saveenv
,printenv
,reset
,其中:
setenv 命令为设置环境变量,需要带环境变量名称及参数。
saveenv 命令为保存环境变量,无参数,简写为sa
printenv 命令为显示当前所有环境变量,无参数,简写为pri
reset 命令为重启fastboot,无参数,简写为re
MAC地址烧写工具(HiProInfo
)
device/hisilicon/bigfish/sdk/tools/windows/HiProInfo/
内存工具(MemUtil
)
device/hisilicon/bigfish/prebuilts/toolchains/memery_tools/