嵌入式学习篇丨迅为4412开发板Android4.4系统编译
Android4.4.4 的内核以及文件系统的源码在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412开发板系统源码及镜像(其他)\android_4.4.4 源码以及对应 Kernel 源码”目录下。
需要注意的是,其中“20170803”以及后续新增的目录下的源码编译方法参考本小节,在“20170803”之前的源码编译参考 7.4.2 小节。
另外,由于 eMMC 升级和屏幕升级,如果用户是 2018 年或者之后购买的开发板,或者新购买了金属框 7 寸屏/10.1 寸屏,请直接下载“2018xxx”目录下上传的内核代码和镜像测试,Android 源码和 20170803通用,编译方法参考 7.4.1 小节。
8.1 搭建编译环境
编译安卓 4.4 使用 Ubuntu12.04,配置方法和 Android4.0 相同。编译 uboot 和内核使用的编译器和 编译Android4.0.3 的内核编译器一模一样(使用 arm2009-q3)。编译 Android4.4 文件系统相关的配置方法参考9.4 章节
8.2 编译 U-boot
Android4.4.4 对应 uboot 的源码,编译器,参数配置,编译脚本以及编译参数和 Android4.0.3 的 uboot全部一模一样,可参考“8.3 编译 U-boot”章节。
8.3 编译 Linux 内核
Android4.4 对应的 Linux 内核在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源码及镜像\xxxx\Android4.4-Source”目录下,在最新日期的文件夹下的“iTop4412- android4.4-kernel_xxxx.tar.gz”压缩包,xxxx 表示日期。
内核的编译器和 Android4.0.3 的内核编译器一模一样(arm-2009q3)。
内核的编译需要对应的配置文件,基本的配置文件名是“config_for_android_XX_YY”,XX,YY 表示用下表所示的参数替代。POP 和 SCP 分别对应核心板的 POP 和 SCP;elite 和 super 分别对应精英版和全能版;no_wifi 参数仅用于精英版,表示不支持 WiFi 模块,如果没有 WiFI 模块,那么就需要配置为 no_wifi。
如上表所示,如果需要 Android4.4.4 支持 WiFi,则需要配置对应的参数,不支持 WiFi 也需要进行对应配置。
编译生成内核镜像举例
和 Android4.0.3 内核一样,如果需要编译对应核心板的内核,首先使用 cp 命令将对应的配置文件覆盖掉“.config”。
如果用户要使用 5 寸屏幕,先要参考用户手册“7.6 支持 5 寸屏的内核补丁文件”,给内核打补丁,然 后 使 用 命 令 “ vim .config ” , 在 文 件 中 搜 索 关 键 词 “ CONFIG_TOUCHSCREEN_GT9XX=y ” , 在
“CONFIG_TOUCHSCREEN_GT9XX=y”之后添加一行“CONFIG_TOPEET_LCD5X0=y”,添加完成之后,如下图所示。如果用户不使用 5 寸屏幕,则可以跳过这一步。
最后执行编译命令“make zImage”。
生成内核镜像的目录也是“arch\arm\boot”。
例如:开发板是精英版,POP 核心板,需要支持 WiFi 模块,那么缺省文件就需要配置为“config_for_android_pop_elite”。
开 发 板 是 精 英 版 , POP 核 心 板 , 不 支 持 WiFi 模 块 , 那 么 缺 省 文 件 就 需 要 配 置 为“config_for_android_pop_no_wifi”。
8.4 编译 Android4.4.4 文件系统
编译 Android4.4.4,还缺少一个“javap”命令,使用命令:
update-alternatives --install "/usr/bin/javap" "javap" "/usr/lib/jvm/jdk1.6.0_43/bin/javap" 1更新一下,如下图所示。
编 译 Android4.4 源 码 的 时 候 , 一 定 要 注 意 内 核 源 码 的 目 录 。 在 和 Android 源 码 目 录“iTop4412_KK4.4_git ”的同一级目录下,将内核源码解压。
例如,如下图所示,作者将内核源码和 Android4.4 源码压缩包放到“/home/iTOP- 4412-Android4.4”目录下,解压“iTop4412_KK4.4_git_xxx.tar.gz”和“iTop4412- android4.4-kernel_xxx.tar.gz”,Android 源码解压之后得到“iTop4412_KK4.4_git”和“kernel” 目录。“iTop4412_KK4.4_git” 目录下就是 Android 源码 ,“kernel/iTop4412_Kernel_3.0”目录下就是内核源码。
另外在编译 Android4.4 之前,必须成功编译 Android4.4 对应的内核。
然后进入 Android4.4.4 源码解压后得到文件夹“iTop4412_KK4.4_git”中,使用命令“./build_android.sh”运行一键编译脚本,开始编译 Android4.4.4。
注意:编译 Android4.4.4 必须保证给 Ubuntu 系统提供 3G 以上内存。这里“提供 3G 以上内存”的意思,不仅仅是指在 VMware Workstations 虚拟机中设置分配 3G 内存。例如,用户在编译的时候,PC 机的内存一共是 4G,在虚拟机中设置分配 3G 内存,但是在 Windows 系统下,开着 QQ,杀毒软件,音乐播放器,浏览器等等,这样在 Windows 下占用的内存就快 2G 了,那么虚拟机会自动调整到只占用 2G,甚至不到 2G 的内存,这样是没法编译通过的。
正确的分配内存方法是,首先给虚拟机分配 3G 以上内存,然后在 Windows 下关掉尽量多的不必要的应用,关掉尽量多应用的后台程序。
当然,如果用户的 PC 是 8G 或者 16G 内存,随意就成。
编译完成之后,在文件夹“iTop4412_KK4.4_git/out/target/product/smdk4x12”中,生成镜像“system.img”和“ramdisk-uboot.img”。
这里还需要注意的是,Android4.4.4 源码需要占用较大的空间,用户需要确认有足够的空间才能够成功编译。Android4.0.3 编译完成后总共大约占用 18G 的空间,Android4.4.4 编译完成后总共占用大约 36G 的空间。
用户完全按照步骤编译错误,可以使用“df -l”查看一下盘符剩余空间还剩下多少,如果是已使用 100%,则是空间不足。
8.5 编译早期 Android4.4.4 旧源码
注意:本小节,介绍的旧源码指的是“20170803”之前的早期源码。
在网盘目录中“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源码以及对应 Kernel 源码”中下载 Android4.4.4 的 文件系统,并通过 github 下载 uboot
(Android4.4 的 uboot 源码和 Android4.0.3 完全一样) 和 kernel 的源码(参考附录六)。
编译 uboot
Android4.4.4 对应 uboot 的源码,编译器,参数配置,编译脚本以及编译参数和 Android4.0.3 的 uboot全部一模一样。
编译 Linux 内核
网盘下载 Android4.4.4 对应的源码。在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源码及镜像”目录下。
Android4.4.4 对应内核的编译器和 Android4.0.3 的内核编译器一模一样。内核的编译是组合式配置文件,基本的配置文件名是“config_for_android_YY”,YY 表示用下表所示的参数替代。
如上表所示,如果需要 Android4.4.4 支持 WiFi,则需要配置对应的参数。
编译生成内核镜像举例:
和 Android4.0.3 内核一样,如果需要编译对应核心板的内核,首先使用 cp 命令将对应的配置文件覆盖掉”.config”,然后在执行编译命令“make zImage”。生成内核镜像的目录也是“arch”-->“arm”-->“boot”。
编译 Android4.4.4 (文件系统部分)
Android4.4.4 源码在网盘“iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源码以及对应
Kernel 源码”目录中下载,编译器和参数配置和 Android4.0.3 一模一样。
更新环境 javap
编译 Android4.4.4,还缺少一个“javap”命令,使用命令:“update-alternatives --install "/usr/bin/javap" "javap" "/usr/lib/jvm/jdk1.6.0_43/bin/javap" 1”更新一下,如下图所示。
源码下载
内核的源码也可以在 github 上下载,具体参考使用手册附录 6.2,附录中有迅为 Android4.4 对应内核源码 github 下载地址。
使用手册附录中有介绍 repo 下载 Android4.4.4 源码的方法,但是从 2016 开始,repo 经常性的无法下载和使用。所以最好到迅为百度网盘中下载源码(目录参考使用手册编译章节),选取日期最近的目录下载即可。
网盘中源码包一般是 gz 后缀、7z 或者 rar 后缀。gz 后缀可以直接在 Ubuntu 下解压; 7z 和 rar 后缀都是需要先在 windows 下解压出 gz 后缀压缩包,然后再在 Ubuntu 下解压。
内核以及 Android 源码路径
编 译 Android4.4.4 源 码 的 时 候 , 一 定 要 注 意 内 核 源 码 的 目 录 。 在 和 Android 源 码 目 录“iTop4412_KK4.4_git”的同一级目录下,新建一个 kernel 目录,然后将内核源码放到 kernel 目录下,要使用迅为默认的文件名“iTop4412_Kernel_3.0”。
例如:在 Android4.4 的源码目录下,使用命令“ls ../kernel/iTop4412_Kernel_3.0/”,如下图所示,内核的目录才是正确的。
另外在编译 Android4.4 之前,必须成功编译 Android4.4 对应的内核。
然后进入 Android4.4.4 源码解压后得到文件夹“iTop4412_KK4.4”中,使用命令“./build_android.sh”运行一键编译脚本,开始编译 Android4.4.4。注意:编译 Android4.4.4 必须保证给 Ubuntu 系统提供 3G 以上内存。这里“提供 3G 以上内存”的意思,不仅仅是指在 VMware Workstations 虚拟机中设置分配 3G 内存。例如,用户在编译的时候,PC 机的内存一共是 4G,在虚拟机中设置分配 3G 内存,但是在 Windows系统下,开着 QQ,杀毒软件,音乐播放器,浏览器等等,这样在 Windows 下占用的内存就快 2G 了, 那么虚拟机会自动调整到只占用 2G,甚至不到 2G 的内存,这样是没法编译通过的。正确的分配内存方法是,首先给虚拟机分配 3G 以上内存,然后在 Windows 下关掉尽量多的不必要的应用,关掉尽量多应用的后台程序。
当然,如果用户的 PC 是 8G 或者 16G 内存,随意就成。
如下图所示,编译完成。在文件夹“iTop4412_KK4.4/out/target/product/smdk4x12”中,生成镜像
“system.img”和“ramdisk-uboot.img”。
这里还需要注意的是,Android4.4.4 源码需要占用较大的空间,用户需要确认有足够的空间才能够成功编译。Android4.0.3 编译完成后总共大约占用 18G 的空间,Android4.4.4 编译完成后总共占用大约 36G 的空间,如下图。
用户完全按照步骤编译错误,可以使用“df -l”查看一下盘符剩余空间还剩下多少,如下图所示,如果是已使用 100%,则是空间不足。
内核源码包是“iTop4412-android4.4-kernel_20180724.tar.gz”,一定要是 20180724 结尾的内核压缩包才行,如果用户使用的是老版本,则需要根据补丁文件添加代码。
补丁包是网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板系统源码及镜像(其他)\android_4.4.4 源 码 以 及 对 应 Kernel 源 码 \20180724\Android4.4-Source ” 目 录 下 的 压 缩 包“patch_elite4x4_lcd5x0.tar.gz”。
拷贝到内核源码目录下(一定要拷贝到内核源码的目录下),如下图所示,使用命令“tar -vxfpatch_elite4x4_lcd5x0.tar.gz”解压得到文件夹“patch_elite4x4_lcd5x0”,文件夹中有 5 个补丁文件,1 个脚本文件。
进入解压得到的文件夹“patch_elite4x4_lcd5x0”,使用命令“ chmod 777 script_patch_elite4x4_lcd5.sh”修改脚本权限。
接着使用“./script_patch_elite4x4_lcd5.sh u”命令,到这一步就打完补丁了,如下图所示。
如果需要返回到更新补丁前的状态,则使用命令“./script_patch_elite4x4_lcd5.sh r”。
用 户 在 “ iTop4412-android4.4-kernel_20180724.tar.gz ” 原 始 内 核 的 基 础 上 , 运 行 了“./script_patch_elite4x4_lcd5.sh u”N 次,则可以使用命令“./script_patch_elite4x4_lcd5.sh r”同样也是 N 次,则可以返回到打补丁前的状态。
更多内容:哔哩哔哩→搜索北京迅为