Linux内核打包安卓镜像,嵌入式系统设计(七):Android4.0.3 镜像的编译(包含uboot的编译和linux内核的编译)...

前言:

在接下来的时间里将更新一个专栏:嵌入式系统设计。在这个专栏里将会介绍基于iTOP-4412 Cortex A9开发板的嵌入式系统设计,从入门到实践可以无障碍的学习。欢迎大家关注收藏学习!!!!

b495c19aea5846581b37d10e7138437e.png

文章嵌入式系统设计(一):虚拟机、Ubuntu的安装以及SSH 软件的安装使用:里面详细介绍了SSH软件的安装和ssh 软件在主机和虚拟机之间传文件。

文章嵌入式系统设计(二): 虚拟机和主机之间共享文件夹:里面详细介绍了部分用户无法正常使用 ssh 软件在主机和虚拟机之间传文件,虚拟机和主机之间采用共享文件夹的方式传递文件。

文章嵌入式系统设计(三):Vim编辑器的学习:里面详解介绍了Vim编辑器的安装以及对相关使用命令的介绍。

文章嵌入式系统设计(四):iTOP-4412裸机开发环境搭建(详细介绍DNW 驱动安装):里面详细介绍了iTOP-4412裸机开发环境的搭建以及详细介绍了DNW驱动的安装。

文章嵌入式系统设计(五):详细介绍win8/win10下安装 PL2303 驱动以及android_ADB驱动:里面详细介绍win8/win10下安装 PL2303 驱动以及android_ADB驱动。

文章嵌入式系统设计(六): iTOP-4412 开发板镜像的烧写(包含OTG 接口烧写方式和TF卡烧写方式):里面详细介绍了OTG 接口烧写方式和TF卡烧写方式。

1 uboot 的编译

1.1 源码目录

2392a7d4c45f44cbd295c2c0616d6fd0.png

1.2 编译器

如下图所示,编译器是“arm 交叉编译器”下的“arm-2009q3.tar.bz2”,如果使用的是搭建好的环境,确保编译器环境变量,如下图所示。

打开环境变量配置文件命令:“vim .bashrc”,

修改完之后更新环境变量命令:“source .bashrc”。

a527f69af1986822c00c6093f507933a.png

1.3 参数配置

编译 uboot 的脚本是源码文件夹中的“build_uboot.sh”,在编译的时候需要向脚本传参数,根据核心板的不同,脚本执行参数如下表所示。

硬件分类

脚本执行参数

核心板 SCP 1G 内存

SCP_1GDDR

核心板 SCP 2G 内存

SCP_2GDDR

核心板 POP 1G 内存

POP_1GDDR

核心板 POP 2G 内存

POP_2GDDR

1.4 编译生成 uboot 镜像举例

这里以 SCP 1G 核心板为例编译 uboot 镜像。

将目录下“CodeSign4SecureBoot_POP”、“CodeSign4SecureBoot_SCP”以及“iTop4412_uboot_xxx.tar.gz”拷贝到 Ubuntu 系统下,然后将“iTop4412_uboot_xxx.tar.gz”解压,得到“iTop4412_uboot”文件夹,如下图所示。

3ffa872f7d4390bad68f8cd46d705198.png

进入“iTop4412_uboot”文件夹,使用编译脚本“build_uboot.sh”编译 uboot,这里需要编译的是“SCP 1G 核心板”的 uboot 镜像,那么编译命令是

“./build_uboot.sh SCP_1GDDR”

输入编译命令,如下图所示。这里一定先确定核心板是哪种类型,然后将对应的参数传到脚本。

307b1034f555812fdbb0aff2c2f3fab7.png

如下图所示,编译中。

5a6dbb2ef83ed23b7b628eadce3a1749.png

如下图所示,脚本执行完成,在“iTop4412_uboot”文件夹下生成了

“u-boot-iTOP-4412.bin”文件。生成的文件“u-boot-iTOP-4412.bin”文件就是 SCP 1G内存核心板对应的 uboot 镜像文件。

b2a2f5dcbe5d25a612a586c6e1ba5fe3.png

2 Linux 内核的编译

2.1 源码目录

Linux 内核源码uboot 和 kernel目录下,如下图所示。

1c147486a9533df61b00832cdb00e160.png

2.2 编译器

内核的编译器和 uboot 的编译器一样。

2.3 参数配置

内核的编译是组合式配置文件,基本的配置文件名是“config_for_android_YY_elite”,YY 表示用下表所示的参数替代。

硬件分类

配置文件

核心板 SCP 1G 或者 2G 内存

config_for_android_scp_elite

核心板 POP 1G 内存

config_for_android_pop_elite

核心板 POP 2G 内存

config_for_android_pop2G_elite

2.4 编译生成内核镜像举例

这里以 SCP 1G 核心板为例编译 zImage 内核镜像,那么配置文件为

“config_for_android_scp_elite”。

将目录下的压缩包“iTop4412_Kernel_3.0_xxx.tar.gz”拷贝到 Ubuntu,然后解压,得到文件夹“iTop4412_Kernel_3.0 ”,如下图所示。

31262bd3a517a16f79ef2c856f3fc8b5.png

进入文件夹“iTop4412_Kernel_3.0 ”,使用命令

“cp config_for_android_scp_elite .config”覆盖自带的配置文件,如下图所示。

c0d3685bc5e83ad948c42ec1149b0826.png

然后使用编译命令“make zImage”,如下图所示。

992a0d8f25325d65c0e991309572bbe1.png

编译中,如下图所示。

40e31b972740eb25a9917ea9cb9c3740.png

编译完成,如下图所示。

185005c8de2e8d4c00bcb1612ad9d94b.png

文件夹“iTop4412_Kernel_3.0 ”下的“arch”–>“arm”–>“boot”会生成镜像文件

“zImage”,这个 zImage 镜像可以给 SCP 1G 和 SCP 2G 的核心板使用,如下图所示。

03ce30d10cfcbaea2e9ca06b7aa93354.png

3 Android4.0.3 的编译

3.1 源码目录

Android4.0.3 文件系统的源码,如下图所示。

b595bcb6939f478b6e5a98ee1e23152f.png

3.2 编译器

Android4.0.3 的编译器是 gcc 4.4.7 版本(包括其他所有版本的 Android 编译器都是相同的),如下图所示,在控制台使用命令“gcc -v”,可以查看到 gcc 的版本。

d3687603a0f55017a56951b1894a4692.png

3.3 参数配置

无参数配置。所有种类核心板对应的 Android4.0.3 都使用同一套源码,同一种编译方法。编译脚本是“build_android.sh”。

3.4 编译生成 Android4.0.3 镜像

将目录下压缩包“iTop4412_ICS_git_xxx.tar.gz”拷贝到 Ubuntu 系统中,解压压缩包,得到文件夹“iTop4412_ICS_git”。这里需要注意的是,Android 源码文件夹“iTop4412_ICS_git ”和内核源码文件夹“iTop4412_Kernel_3.0”需要放到同一目录下,如下图所示。

db18e2df96f9b22fa780d505b7a83c8c.png

进入“iTop4412_ICS_git”目录,使用命令“./build_android.sh”运行编译脚本,编译Android4.0.3,如下图所示。

f8f9e10bb10be2fd683b1d0d4c89836a.png

开始编译,如下图所示。

7ffb6cf8c5b6c0a4036770dea0049f2a.png

编译比较耗费时间,第一次编译会花费 60 分钟以上。

727c315cae108bf487cb7936d18195db.png

编译完成后在文件夹“iTop4412_ICS”–>“out”–>“target”–>“product–>

“smdk4x12”中生成 Android4.0.3 镜像文件“ranmdisk-uboot.img”和“system.img”,如下图所示。

3f120d0ad224c5c930ce8b0ad0ca34a1.png

如果想要支持 wifi,在编译好内核之后,还需要在内核目录中,执行编译模块的命令“make modules”,再执行编译 Android4.0.3 文件系统的脚本。

有用的话各位老铁来个三连击!!!

有用的话各位老铁来个三连击!!!

有用的话各位老铁来个三连击!!!

727b8a044292a3c1fd4abdd7cde8ac45.png

使用方法:http://blog.csdn.net/asmcvc/article/details/11770851 工具: unyaffs,mkyaffs2image 其中unyaffs有windows版本和linux版本,mkyaffs2image只有linux版本。 windows版本的unyaffs用法: 把system.img复制到unyaffs的相同目录下,cmd命令下cd到unyaffs的目录下,然后执行命令:unyaffs system.img unyaffs会把system.img解压到其目录下。 linux版本的unyaffs用法: 把unyaffs复制到/usr/bin目录下,并修改权限为可执行。 然后cd到system.img目录下(假定目录为system目录),执行命令:unyaffs system.img 然后对system目录下的文件进行修改。 注意:修改完后的文件要修改一下权限,尽量和其他文件的权限保持一致。例如:chmod 644 framework-res.apk mkyaffs2image用法: 复制到/usr/bin目录下,并修改权限为可执行。 这里以打包system目录为system.img为例,执行命令: mkyaffs2image system system.img 然后把新生成的system.img复制替换掉原:adt-bundle-windows-x86\sdk\system-images\android-17\armeabi-v7a\system.img 执行bat批处理命令启动模拟器: D:\adt-bundle-windows-x86\sdk\tools\emulator-arm.exe -avd AndroidVM -partition-size 128 这里以修改android系统启动画面为例: 打开解包目录下的\framework\framework-res.apk 替换图片:framework-res.apk\assets\images\android-logo-mask.png为下图: 然后对\framework\framework-res.apk文件重新签名,复制到linux下后修改文件权限和原来一致。 然后mkyaffs2image system system.img打包生成新的system.img,替换原来的system.img,并启动模拟器,效果图如下: 修改代码: 工具:odextools(参考:《一键odex批量合并工具odextools的重新整理与使用》)、dexopt-wrapper 其中odextools.bat的代码: 批处理有一处bug:每打包一次会把odex文件删除掉,导致在后面的打包过程中会出现找不到:system/framework/core.odex类似的错误,因此只需要在打包完后不删除odex文件即可,找到del /f !apkx!.odex 1>nul 2>nul改为:::del /f !apkx!.odex 1>nul 2>nul,也就是注释掉这一行代码。 具体使用方法(操作在windows下): 在odextools\romdir目录下创建文件夹:system 利用unyaffs解包system.img后,把所有文件复制到system目录下。 然后运行odextools.bat,如图: 选择一个需要整合odex的目录选项即可。odextools.bat会自动设置环境变量,使用baksmali.jar来反编译odex为smali,然后再调用smali.jar打包为classes.dex, 然后再打包到相应的apk包(framework目录下对应的是jar后缀的,实际上也是个apk包),最后再重新签名。 如果要修改代码,则需要把上面重新打包生成的apk文件,利用常规方法反编译后修改smali代码,例如插桩输入log信息。然后再回编译并重新签名。 最后一步:因为system.img中的apk是优化过的,apk主目录下是没有classes.dex文件的,而是一个被优化过的odex文件,用于优化启动速度。 因此需要将修改后的apk包再用dexopt-wrapper优化apk包后生成出odex文件,然后删除apk包里的classes.dex,并在相同目录下放置与apk包同名的odex文件。 按照原system目录的文件结构组织好后,目录复制到linux环境下使用mkyaffs2image重新打包成system.img。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值