【北京迅为】iTOP-4412全能版使用手册-第八章 Android 4.0系统编译(201702前购买)

devtools/2024/11/28 1:57:45/

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 模块的驱动必须要使用命令编译一下才行。

 


http://www.ppmy.cn/devtools/137544.html

相关文章

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

OmniDiskSweeper :一款专为 macOS 设计的磁盘使用分析工具

OmniDiskSweeper 是一款专为 macOS 设计的磁盘使用分析工具&#xff0c;由 The Omni Group 开发。它的主要目的是帮助用户可视化磁盘上的文件和文件夹&#xff0c;并找出占用大量空间的文件&#xff0c;从而帮助用户释放磁盘空间。 OmniDiskSweeper 的特点包括&#xff1a; 简…

AI助力PPT创作:从手动到智能,打造高效演示

在今天这个信息化时代&#xff0c;演示文稿已经成为我们表达观点、传递信息的重要工具。不论是企业汇报、学术交流&#xff0c;还是个人创作&#xff0c;PPT&#xff08;PowerPoint&#xff09;都在日常生活中扮演着不可或缺的角色。创建一份高质量的PPT往往需要花费大量时间与…

前端面试笔试(五)

最近面试中手撕题以及笔试中总遇到递归回溯类题目&#xff0c;于是去牛客上找典型题目。这里浅浅列一道。 目录 题目 解决 代码 详情 变量初始化 递归函数dg 递归终止条件 递归主体 初始调用和返回结果 题目 没有重复项数字的全排列&#xff08;递归回溯&#xff0c;js…

模型压缩——如何进行知识蒸馏?

1.引言 目前的主流的大语言模型基本都是部署在云端&#xff0c;但由于安全隐私和延时问题&#xff0c;有越来越多的场景需要将AI模型部署在边缘设备上&#xff0c;例如个人电脑、智能手机、物联网设备。如何将大模型的能力迁移到小设备上&#xff0c;就成为一个重要的研究方向…

成都睿明智科技有限公司怎么样可靠不?

在这个日新月异的数字时代&#xff0c;电商行业如同一股不可阻挡的洪流&#xff0c;席卷着每一个消费者的生活。而抖音&#xff0c;作为短视频与电商完美融合的典范&#xff0c;更是为无数商家开辟了一片全新的蓝海。在这片充满机遇与挑战的海洋中&#xff0c;成都睿明智科技有…

写个添加球队和展示球队的功能--laravel与inertia

先展示下最终效果,如下是展示球队的界面 如下是添加球队的界面 界面样式没怎么调整,不要在意这些细节。先说说操作流程 首先需要登录,没注册就注册一个账号。登录界面就不展示了。然后选中”NbaBasketballTeams“这个选项,就进入了展示球队的界面。然后点击…

C++笔记之构造函数声明只需要写明需要的参数,不需要列出所有成员变量、可以使用成员初始化列表初始化所有需要的成员变量

C++笔记之构造函数声明只需要写明需要的参数,不需要列出所有成员变量、可以使用成员初始化列表初始化所有需要的成员变量 参考笔记 C++新特性探究(七):初始化列表(Initialization List) C++之关于初始化列表(Initialization List)的一个补充示例 C++笔记之构造函数声明只需要…