一、 Android 开发环境要求
- 操作系统:AndroidO 需要 64 位04(不支持 16.04)
- 硬盘空间:如果是校验代码,至少需要 100GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译或使用 ccache,则需要更多空间
- Python 版本:4~2.7
- 4 需要 JDK 版本 1.6,Android5.1 需要 JDK 版本为 1.7,Android7.0 需要 JDK 版本为 1.8,Android8.0 需要 JDK 版本为 1.8
- 交叉编译工具链:arm-hisiv610-linux-,aarch64-hisiv610-linux
- make 版本:GNU Make 3.81
二、开发环境搭建
1. 更换源
① 备份源列表
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
② 打开 sources.list 文件
$ sudo vim /etc/apt/sources.list
③ 修改 sources.list 文件
# 阿里镜像源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
或者使用网易的源
# 网易镜像源
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
④ 更新并升级
$ sudo apt-get update && sudo apt-get upgrade
2. 安装工具包
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc python uboot-mkimage lzma
注:ia32-libs lib32readline5-dev uboot-mkimage 提示安装失败,根据提示安装替代包
3. 安装 JDK
编译 Android4.X 版本请安装 JDK1.6,Android5.X 请安装 JDK1.7,Android7.X 请安装 JDK1.8。
JDK1.6
$ sudo apt-get install sun-java6-jdk
JDK1.7
$ sudo apt-get install openjdk-7-jdk
JDK1.8
$ sudo apt-get install openjdk-8-jdk
我这里安装的是 JDK1.8,安装失败可以使用如下方法:
$ sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk
4. 安装交叉编译工具链
将 tools.tar.gzaa 和 tools.tar.gzab 合并成一个文件:
$ cat tools.tar.gzaa tools.tar.gzab > tools.tar.gz
解压:
$ tar -xzvf tools.tar.gz -C ~/Desktop/hisilicon/tools/
进入到生成目录:
$ cd ~/Desktop/hisilicon/tools/device/hisilicon/bigfish/sdk/tools/linux/toolchains/
解压文件:
$ tar -xvf aarch64-hisiv610-linux.tar
$ tar -xvf arm-hisiv610-linux.tar
进入对应目录执行:
64 位
$ cd aarch64-hisiv610-linux/
$ chmod u+x aarch64-hisiv610-linux.install
$ sudo ./aarch64-hisiv610-linux.install
32 位
$ cd arm-hisiv610-linux/
$ chmod u+x arm-hisiv610-linux.install
$ sudo ./arm-hisiv610-linux.install
安装完成后执行 source 更新
$ source /etc/profile
输入“arm-hisiv610-linux-”后按 tab 键,如果能自动将命令补齐,则说明安装成功。
注:
如果无法自动补齐,通过下面命令确认环境变量是否正确:
$ echo $PATH
如果不正确请用 root 用户编辑 /etc/profile 文件:
$ sudo vi /etc/profile
编译 32bit 添加如下语句:
export PATH="/home/root/bin/x86-arm/arm-hisiv200-linux/target/bin:$PATH"
编译 64bit 添加如下语句:
export PATH=/opt/hisi-linux/arm64/aarch64-linux-gnu/bin/:/opt/hisi-linux/:$PATH
5. 设置最大打开文件数
当编译过程中遇到如下错误时:
Exception in thread "main" java.lang.RuntimeException: error while reading to file: java.io.FileNotFoundException, msg:cts/tools/vm-tests/src/dot/junit/opcodes/aget_wide/Test_aget_wide.java (Too many openfiles) atutil.build.BuildDalvikSuite.parseTestMethod(BuildDalvikSuite.java:743) atutil.build.BuildDalvikSuite.handleTests(BuildDalvikSuite.java:359) atutil.build.BuildDalvikSuite.compose(BuildDalvikSuite.java:170) Atutil.build.BuildDalvikSuite.main(BuildDalvikSuite.java:136)
需要设置打开最大文件数限制,方法如下:
$ sudo vi /etc/security/limits.conf
在最后一行添加如下内容:
* - nofile 8192
重新登录后,执行 ulimit -n:检查是否设置正确,如果配置正确,命令执行结果应为:8192
6. 确认服务器 umask 的值
在编译服务器 shell 中输入 umask 命令,查看返回值是否为 0022
$ umask
如果不是,则需要编辑 /etc/profile 文件
$ sudo vi /etc/profile
添加如下语句:
umask 022
重新登录后,确认 umask 值是否正确即可
$ source /etc/profile
7. 确认服务器 make 版本
在编译服务器 shell 中输入 make –v命令,查看 make 版本是否为 3.81 或 3.82
$ make -v
如果不是,则需要使用 sudo apt-get install 命令安装对应的版本
$ sudo apt-get install make=3.81
8. 在服务器根目录建立 /run/shm 目录
执行命令:
$ sudo mkdir -p /run/shm/
$ sudo chmod 777 -R /run/shm/
三、开发编译
1. 解压源码包
源码在发布包目录下的 Software 目录下,我这里使用的版本是:HiDPTAndroidV500R002C00SPC060,执行命令合并压缩包后解压:
$ cat HiDPTAndroidV500R002C00SPC060.tar* > HiDPTAndroidV500R002C00SPC060.tar.gz
$ tar -zvxf HiDPTAndroidV500R002C00SPC060.tar.gz -C ~/Desktop/hisilicon
2. 下载内核源码包
下载链接:https://android.googlesource.com/kernel/common/+archive/34803e7c1c92f53603f6aa11235915afc2589290.tar.gz
下载的内核源码包的名字: common-34803e7c1c92f53603f6aa11235915afc2589290.tar.gz
将下载的包拷贝到 device/hisilicon/bigfish/sdk 目录进行编译
3. 更新 patch 包
解压 patch 包
$ tar -zxvf HiDPTAndroidV500R002C00SPC060_patch
拷贝 delete.sh 文件到 Android 源码目录
$ cd ~/hisilicon/sdk
$ cp ~/hisilicon/HiDPTAndroidV500R002C00SPC060_patch/file_patch/delete.sh ./
执行 delete.sh 脚本
$ chmod 777 delete.sh
$ ./delete.sh
拷贝新 patch 包的 file_patch/new/ 目录下的文件,到完整开发代码包的根目录
$ cp -r ~/hisilicon/HiDPTAndroidV500R002C00SPC060_patch/file_patch/new/* ./
4. 开启串口
由于版本串口已禁用,需要在编译前执行如下命令打开串口:
cd device/hisilicon/bigfish/sdk/configs/hi3751v810
sed -i "s/CFG_HI_CLOSE_BOOT_PRINT_AND_UART0=y/# CFG_HI_CLOSE_BOOT_PRINT_AND_UART0 is not set/g" `grep "CFG_HI_CLOSE_BOOT_PRINT_AND_UART0=y" -rl ./`
5. 环境配置
进入代码根目录下,执行:
$ source build/envsetup.sh
$ lunch Hi3751V811_DMO-eng
6. 完整编译
进入代码根目录下,执行:
$ make bigfish -j32 2>&1 | tee bigfish.log
此命令会编译出下面的镜像:
非安版本 out\target\product\ Hi3751V811\Emmc 目录下:
atf镜像: atf.bin
atv分区镜像: atv.ext4
deviceinfo分区镜像: deviceinfo.img
dtb分区镜像: Hi3751VXXX.dtb
panel分区镜像: panel.img
tcon分区镜像: tcon.bin
Android系统内核镜像: kernel.img
Android system分区镜像: system.ext4
Android userdata分区镜像: userdata.ext4
Android cache分区镜像: cache.ext4
Android sdcard分区镜像: sdcard.ext4
bootargs分区镜像: bootargs_Hi3751V811-emmc.bin
分区表: Hi3751V811-emmc.xml
recovery小系统内核镜像: recovery.img
recovery用update包: update.zip
fastboot 升级用 usb_update.bin: usb_update.bin
fastboot镜像: fastboot-burn-emmc.bin
bootmusic镜像: bootmusic.img
bootmusicsec镜像: bootmusicsec.img
默认预编译的baseparam分区镜像: baseparam.img
默认预编译的logo分区镜像: logo.img
vendor分区镜像(Android8.0) vendor.ext4
安全版本 out\target\product\Hi3751V811\Security_L2\MAINTAIN 目录下,除非安版本镜像外,新增:
trustedcore分区镜像: trustedcore.img
securestore分区镜像: securestore.ext4
device\hisilicon\bigfish\sdk\tools\windows 目录下:
烧写工具: HiTool-[version](DPT).zip
其中,[version] 为 HiTool 工具的某一个发布版本号,具体版本请以发布包中的为准。
7. 编译 Android 内核分区镜像
进入代码根目录下,执行:
$ make kernel –j32 2>&1 | tee kernel.log
此命令会编译出镜像:kernel.img
此镜像会拷贝至 out\target\product\Hi3751V811\ Emmc 目录下。
编译过程文件存放在:out/target/product/Hi3751V811/obj/KERNEL_OBJ/
8. 修改 Android 内核配置
进入代码根目录下,执行:
$ make kernel_menuconfig
注:
- 默认 Android 内核配置文件记录在 device/hisilicon/Hi3751VXXX/Hi3751V811_XXX.mk 文件的 ANDROID_KERNEL_CONFIG 变量中。
- 此命令修改的内核配置文件存放在临时目录:out/target/product/Hi3751VXXX/obj/KERNEL_OBJ/.config,请注意将修改后的文件保存至:device/hisilicon/bigfish/sdk/source/kernel/ linux-4.9.y/arch/arm64/configs/ 目录下对应文件。
- 如需要修改 Android 系统编译内核时所使用的内核配置文件名称,请修改 device/hisilicon/Hi3751VXXX/Hi3751V811_XXX.mk 中 ANDROID_KERNEL_CONFIG 变量的值为新的文件名,并同步修改 device/hisilicon/bigfish/sdk/configs/hi3751v811 目录下的对应的 sdk 配置文件中 CFG_HI_KERNEL_CFG 变量的值。对应的 sdk 的配置文件的名称由 device/hisilicon/Hi3751V811/Hi3751V811_TEST.mk 中的 HISI_SDK_ANDROID_CFG 变量定义。新的内核配置文件请保存到 device/hisilicon/bigfish/sdk/source/kernel/ linux-4.9.y/arch/arm64/configs/ 目录下。
- 内核配置文件要求均以 _defconfig 结尾。
- 建议执行此命令前,删除内核临时文件存放目录:out/target/product/Hi3751V811/obj/KERNEL_OBJ/
9. 编译 Emmc 器件上的 Android 系统分区镜像
进入代码根目录下,执行:
$ make ext4fs -j32 2>&1 | tee ext4fs.log
此命令会编译出下面的镜像:
out\target\product\Hi3751V811\Emmc 目录下:
system.ext4 userdata.ext4 cache.ext4
sdcard.ext4 kernel.img
10. 编译 Android recovery 小系统内核分区镜像
进入代码根目录下,执行:
$ make recoveryimg -j32 2>&1 | tee recovery.log
此命令会编译出镜像:recovery.img
此镜像会拷贝至 out\target\product\Hi3751V811\Emmc 目录下。
编译过程文件存放在:out/target/product/Hi3751V811/obj/RECOVERY_OBJ/
11. 修改 Android recovery 小系统内核配置
进入代码根目录下,执行:
$ make recovery_menuconfig
注:
- 默认 Android recovery 小系统内核配置文件记录在 device/hisilicon/Hi3751V811/BoardConfig.mk 文件的 RECOVERY_KERNEL_CONFIG 变量中。
- 此命令修改的内核配置文件存放在临时目录:out/target/product/Hi3751V811/obj/RECOVERY_OBJ/.config,请注意将修改后的文件保存至:device/hisilicon/bigfish/sdk/source/kernel/ linux-4.9.y/arch/arm64/configs/ 目录下对应文件。
- 如需要修改默认 Android recovery 小系统内核配置文件名称,请修改 device/hisilicon/Hi3751V811/ Hi3751V811_XXX.mk 中 RECOVERY_KERNEL_CONFIG 变量的值为新的文件名。新的内核配置文件请保存到 device/hisilicon/bigfish/sdk/source/kernel/ linux-4.9.y/arch/arm64/configs/ 目录下。
- 内核配置文件要求均以 _defconfig 结尾。
- 建议执行此命令前,删除内核临时文件存放目录:out/target/product/Hi3751V811/obj/RECOVERY_OBJ/
12. 编译 Android recovery 升级包 update.zip
进入代码根目录下,执行:
$ make updatezip -j32 2>&1 | tee updatezip.log
此命令会编译出镜像: update.zip
非安版本在 out\target\product\Hi3751V811\Emmc 目录下:
安全版本在 out/target/product/Hi3751V811/Security_L2/MAINTAIN 目录下:
如不需要 recovery update 包,此命令可以不执行。
13. 修改海思 SDK 配置文件
SDK 配置文件存放目录:device/hisilicon/bigfish/sdk/configs/hi3751v810
此命令需要到 SDK 目录下执行:cd device/hisilicon/bigfish/sdk
执行命令:
$ make menuconfig SDK_CFGFILE=configs/hi3751v810/需要修改的配置文件名
可以修改对应的配置文件,如:
$ make menuconfig SDK_CFGFILE=configs/hi3751v810/hi3751demo2b_hi3751v810_android_64bit_3072M_4layer_cfg.mak
保存退出后,修改将保存在 device/hisilicon/bigfish/sdk/configs/hi3751v810 目录下对应的配置文件。
注:
- 产品使用的 SDK 配置文件的名称在各产品 Hi3751V811_XXX 的HISI_SDK_ANDROID_CFG 变量中定义,如:
device/hisilicon/Hi3751V811/ Hi3751V811_DMO.mk
HISI_SDK_ANDROID_CFG :=hi3751demo2b_hi3751v811_android_64bit_3072M_4layer_cfg.mak
- 执行此命令会通过弹出的图形界面修改 SDK 配置文件,修改后保存退出,修改后的配置文件保存在 SDK 配置文件存放目录,原配置文件保存为:"配置文件名.old",存放在 SDK 配置文件存放目录。
- 用户也可以进入 SDK 配置文件存放目录,直接手动修改对应的配置文件。
- 修改前,请确定所使用的 SDK 配置文件的文件名。
14.编译 fastboot 分区镜像
进入代码根目录下,执行:
$ make hiboot -j32 2>&1 | tee hiboot.log
此命令会编译出下面的镜像:
out\target\product\Hi3751V811\Emmc 目录下:fastboot-burn-emmc.bin
编译过程文件存放在:out/target/product/Hi3751V811obj/EMMC_HIBOOT_OBJ/
四、镜像烧录
1. 烧录工具 HiTool
烧录工具路径:device/hisilicon/bigfish/sdk/tools/windows/HiTool/HiTool-DPT-[version].zip
打开 HiTool 工具,界面如下,
① 将开发板上的串口及以太网口连接到电脑上后上电,工具里面选择对应的 COM 口及本机服务器 IP,我这里是 COM4 及 168.38.10。
② 修改板端配置:
IP 地址:192.168.38.0
网关:192.168.38.1
子网掩码:255.255.255.0
③ 传输方式选择:网口(下载速度更快)
④ 修改 PC 端以太网配置:
打开 控制面板 \ 网络和 Internet \ 网络连接,选择以太网属性,如下图所示
选择 Internet 协议版本 4(TCP/IPV4)属性,选择手动填入 IP 地址,添加对应的 IP 地址、子网掩码及网关,如下图所示,
2. 镜像准备
将编译编译生成的 out/target/product/Hi3751V811/Emmc 目录下的镜像文件拷贝到对应的 Windows 目录下,对应的镜像文件如下图所示,
3. 开始烧录
① 选择 HiTool 工具下的 Burn Emmc or UFS 选项,点击浏览,选择编译生成的分区表:Hi3751V811-emmc.xml,如下图所示,② 点击烧写按钮,如果通信正常,左下角控制台会提示给开发板重新上电,这时候重新上电后就可以开始烧录,如下图所示,
③ 烧录完成后,会有提示烧写成功,如下图所示,
4. 调试指引
在调试阶段,可通过命令获取某个目录的读写权限。
以获取 system 目录读写权限为例,在串口输入以下命令:
$ su
$ busybox mount -o remount,rw /system
五、参考资料
《Android 解决方案 开发指南》
《HiDPTAndroidV500R002C00SPC060版本描述文件》
评论