iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、陀螺仪、CAN总线、RS485总线、500万摄像头等模块,稳定运行Android 4.0.3/Android 4.4操作,系统通用Linux-3.0.15+Qt操作系统(QT支持5.7版本),Ubuntu版本:12.04,接口智能分配 方便好用。
第八章 Android 4.0系统编译(201702前购买)
请注意:Android4.0.3 的编译仅针对开发板 v3.5(2017 年 02 月前购买)。
本章节中将为您详细介绍 uboot、Linux3.0.15 和Android4.0.3 编译环境的搭建以及编译过程。
迅为电子给用户提供两种搭建编译环境的方式,一种方法是用户安装虚拟机,然后安装基础的 Ubuntu16.04 系统,利用我们提供工具和详细的使用步骤,搭建编译环境;另外一种方法是用户安装虚拟机,然后直接加载我们"搭建好的 Ubuntu 镜像",用户只需要修改一下编译器的环境变量,就可以直接用来编译源码。
目前我们在 PC 机上搭建的开发环境是 Ubuntu16.04,嵌入式开发对宿主机(也就是建立开发环境的 PC 机)的版本很敏感,不同的宿主机上的 Ubuntu 版本在使用的时候也会遇到不同的情况和问题。所以建议大家在初次学习的时候一定注意版本问题,尽量和手册保持一致。
本手册基于 Ubuntu16.04 平台做交叉编译开发(Ubuntu 需要安装到 PC 机),所有的配置和编译脚本也是基于此平台。如果你对 Linux 和 Android 开发很熟悉,相信你会根据错误提示逐步找到原因并解决,错误提示一般是选用的平台缺少了某些库文件或者工具等原因造成的;我们强烈建议初学者使用和我们一致的平台,即 Ubuntu16.04,等将来使用熟练以后就可以自己来研究开发更新的版本了,理论上都是可行的。
请在迅为提供的网盘来下载 Ubuntu16.04 的镜像,安装的时候务必参考我们手册提供的步骤,这些步骤是经过严格测试的,请认真执行以免遗漏一些开发时所需要的组件。
Linux 的发行版本众多,我们无法为此一一编写文档,敬请原谅。
Uboot、Kernel(即 Linux 内核,下面等同)以及 Android 的编译环境看似复杂,用户只要抓住以下几个要点就可以了:
第一:Uboot、Kernel 编译器。编译器在光盘中都有提供,在需要使用的步骤中,会说明编译器在光盘中的位置。
第二:设置环境变量。Uboot、Kernel 编译器的环境变量设置后,编译的时候,系统才能找到编译器。
第三:Android 文件系统的编译器。编译器需要使用 Ubuntu 系统自带的 gcc 编译器, 但是版本不对,所以需要降低版本。迅为将这个过程编写了成几个简单的命令,用户只需要挨个执行命令就可以了。
第四:库文件。搭建过程中会给通过执行简单的脚本命令来安装库文件,复杂的步骤变的简单有效。
另外,如果用户想了解编译环境具体是怎么搭建起来的,可以利用我们提供的脚本文件来学习。
无论什么文件系统都需要和 linux 内核以及 uboot 对应,所以在本章节先介绍Android4.0.3 文件系统对应的 uboot 以及 kernel 编译,再介绍 Android4.0.3 文件系统的编译。
无论什么文件系统都需要和 linux 内核以及 uboot 对应,所以在本章节先介绍Android4.0.3 文件系统对应的 uboot 以及 kernel 编译,再介绍 Android4.0.3 文件系统的编译。
8.1 使用搭建好的环境
使用已经搭建编译环境的镜像,用户只需要安装虚拟机"Vmware_Workstaion_wm", 然后用虚拟机加载搭建好环境的 Ubuntu16.04 镜像。"搭建好的镜像"提供网址供大家下载,加载方法参考"3.1安装VMware-workstation"和"3.2 加载搭建好的Ubuntu16.04虚拟机"。加载完成后参考7.2章节检查环境是否正确 。
8.2 搭建环境
本章所需要的环境同第七章的环境相同,都为Ubuntu16.04 系统,可以参考"7.2搭建环境"部分章节。这里需要注意的是,搭建过程中用到的各类软件,都需要和手册提到的版本保持一致,如果使用的是"搭建好的镜像",则可以跳过这一节,但是编译的时候要针对性的设置一下环境变量。
8.3 编译U-boot
U-boot源码在光盘资料"iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\06_源码_uboot和kernel"目录下,如下图所示,
编译器是使用的光盘目录下,"iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\02_编译器以及烧写工具\arm 交叉编译器"下的"arm-2009q3.tar.bz2"。如果使用的是搭建好的环境,确保编译器环境变量, 如下图所示。
编译 uboot 的脚本是源码文件夹中的"build_uboot.sh",在编译的时候需要向脚本传参数,根据核心板的不同,脚本执行参数如下表所示。
|---------------|-----------|
| 硬件分类 | 脚本执行参数 |
| 核心板 SCP 1G 内存 | SCP_1GDDR |
| 核心板 SCP 2G 内存 | SCP_2GDDR |
| 核心板POP 1G 内存 | POP_1GDDR |
| 核心板POP 2G 内存 | POP_2GDDR |
编译生成 uboot 镜像举例
这里以 SCP 2G 核心板为例编译 uboot 镜像。
将光盘"iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\06_源码_uboot 和 kernel"目录下"CodeSign4SecureBoot_POP"、"CodeSign4SecureBoot_SCP"以及"iTop4412_uboot_xxx.tar.gz"拷贝到 Ubuntu 系统下, 然后将"iTop4412_uboot_xxx.tar.gz"解压,得到"iTop4412_uboot"文件夹,如下图所示。
进入"iTop4412_uboot"文件夹,使用编译脚本"buid_uboot.sh"编译 uboot,这里需要编译的是"SCP 1G 核心板"的 uboot 镜像,那么编译命令是
./build_uboot.sh SCP_1GDDR
输入编译命令,如下图所示。这里一定先确定核心板是哪种类型,然后将对应的参数传到脚本。
编译完成如下图所示:
如下图所示,脚本执行完成,在"iTop4412_uboot"文件夹下生成了"u-boot-iTOP-4412.bin"文件。生成的文件"u-boot-iTOP-4412.bin"文件就是 SCP 1G 内存核心板对应的 uboot 镜像文件。
8.4 编译Linux内核
源码目录
Linux 内核源码在光盘"iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\06_源码_uboot 和 kernel"目录下,如下图所示。
编译器
编译内核的编译器和 uboot 的编译器一样。
参数配置
如果使用5寸屏,参考8.5章节打补丁。
内核的编译是组合式配置文件,基本的配置文件名是"config_for_android_YY_super", YY 表示用下表所示的红色参数替代。如果使用5寸屏需要参考8.5章节打补丁。
|---------------------|--------------------------------|
| 硬件分类 | 配置文件 |
| 核心板 SCP 1G 或者 2G 内存 | config_for_android_scp_super |
| 核心板 POP 1G 内存 | config_for_android_pop_super |
| 核心板 POP 2G 内存 | config_for_android_pop2G_super |
编译生成 linux 内核镜像举例
这里以 SCP 1G 核心板为例编译 zImage 内核镜像,那么配置文件为"config_for_android_scp_super"。
将光盘"06_源码_uboot 和 kernel"目录下的压缩包"iTop4412_Kernel_3.0_xxx.tar.gz" 拷贝到 Ubuntu,然后解压,得到文件夹"iTop4412_Kernel_3.0 ",如下图所示。
进入文件夹"iTop4412_Kernel_3.0 ",使用命令"cp config_for_android_scp_super .config"覆盖自带的配置文件,如下图所示。
然后使用编译命令"make zImage",如下图所示。
编译中,如下图所示。
编译完成,如下图所示。
文件夹"iTop4412_Kernel_3.0 "下的"arch\arm\boot"会生成镜像文件"zImage",这个 zImage 镜像可以给 SCP 1G 和 SCP 2G 的核心板使用,如下图所示。
由于 Android 代码中需要内核中 wifi 驱动,在编译好内核之后,还需要在内核目录中,执行编译模块的命令"make modules",再执行编译后面 Android4.0.3 文件系统的脚本, Android4.0.3 源码才能通过。
8.5 编译Android4.0.3文件系统
源码目录
Android4.0.3 文件系统的源码在光盘"iTOP-4412全功能版\20200624\iTOP-4412全功能版V4.0光盘资料\07_源码_Android4.0.3 文件系统"目录下,如下图所示。
编译器
Android4.0.3 的编译器是 4.4.7 版本(包括其他所有版本的 Android 编译器都是相同的), 如下图所示,在控制台使用命令"gcc -v",可以查看到 gcc 的版本。
参数配置
无参数配置。所有种类核心板对应的 Android4.0.3 都使用同一套源码,同一种编译方法。编译脚本是"build_android.sh"。
编译生成 Android4.0.3 镜像
将光盘"iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412开发板系统源码及镜像(其他)\支持以太网的4.0代码"目录下压缩包"iTop4412_ICS_git_xxx.tar.gz" 拷贝到 Ubuntu 系统中,解压压缩包,得到文件夹"iTop4412_ICS_git"。这里需要注意的是, Android 源码文件夹"iTop4412_ICS_git "和内核源码文件夹"iTop4412_Kernel_3.0"需要放到同一目录下,如下图所示。
进入"iTop4412_ICS_git"目录,使用命令"./build_android.sh"运行编译脚本,编译Android4.0.3,如下图所示。注意:编译 Android4.0.3 必须保证给 Ubuntu 系统提供 2G 以上
内存。这里"提供 2G 以上内存"的意思,不仅仅是指在 VMware Workstations 虚拟机中设置分配 2G 内存。例如,用户在编译的时候,PC 机的内存一共是 4G,在虚拟机中设置分配 3G 内存,但是在Windows 系统下,开着QQ,杀毒软件,音乐播放器,浏览器等等,这样在Windows下占用的内存就快 2G 了,那么虚拟机会自动调整到只占用 2G,甚至不到 2G 的内存,这样就有可能没法编译通过。
正确的分配内存方法是,首先给虚拟机分配 2G 以上内存,然后在 Windows 下关掉尽量多的不必要的应用,关掉尽量多应用的后台程序。
当然,如果用户的 PC 是 8G 或者 16G 内存,随意就成。
在编译之前还需要修改一下安卓源码目录下dalvik/vm/native/dalvik_system_Zygote.cpp的头文件,使用命令
vim dalvik/vm/native/dalvik_system_Zygote.cpp
进入dalvik_system_Zygote.cpp文件下,添加头文件#include <sys/resource.h> ,如下图所示:
保存退出,使用命令./build_android.sh,开始编译,如下图所示。
编译比较耗费时间,第一次编译会花费 60 分钟以上。
编译完成后在文件夹"iTop4412_ICS_git\out\target\product\smdk4x12"中生成 Android4.0.3 镜像文件"ranmdisk-uboot.img"和"system.img", 如下图所示。
如果编译报错,请注意:在编译好内核之后,还需要在内核目录中执行编译模块的命令"make modules",再执行编译Android4.0.3 文件系统的脚本才不会报错,因为Android4.0.3源码中会用到内核中的 wifi 驱动,wifi 模块的驱动必须要使用命令编译一下才行。