EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 孤久厌闹 于 2020-4-23 14:54 编辑
. D) L t Q5 ^6 T" _( j8 }6 T7 n
5.3.1 Android 源码整体编译-基于迅为-IMX6开发板系列
" H5 @2 R! s& l# G* a0 P本节介绍如何将 Android 源码如何整体编译,即将 uboot,kernel,Android 镜像一次& w# m0 ], r' {" }% Q2 D4 S
性全部编译出来。
6 j* S9 e8 w' t8 W' \$ g- K注意:编译 Android 系统必须保证给 Ubuntu 系统提供 4G 以上内存。这里“提供 4G 以, q9 E, j# n1 e! k9 {
上内存”的意思,不仅仅是指在 VMware Workstations 虚拟机中设置分配 4G 内存。例如,8 a3 P: A, J) L- l: X8 J$ S8 }) y
用户在编译的时候,PC 机的内存一共是 6G,在虚拟机中设置分配 4G 内存,但是在8 z8 O( C$ N2 U9 R( M: b
Windows 系统下,开着 QQ,杀毒软件,音乐播放器,浏览器等等,这样在 Windows 下占$ J/ B$ r. E6 P- ^% w& @
用的内存就快 2G 了,那么虚拟机会自动调整到只占用 2G,甚至不到 2G 的内存,这样就有
& E- m3 ^2 t5 @可能没法编译通过。
p0 m/ d' D, g; d正确的分配内存方法是,首先给虚拟机分配 4G 以上内存,然后在 Windows 下关掉尽量
2 ]7 M1 V* c; ]9 n! `2 R/ w多的不必要的应用,关掉尽量多应用的后台程序。' u' o. Y, T0 ^
当然,如果用户的 PC 是 8G 或者 16G 内存,随意就成。$ Y! j2 X" `4 R* e) P- j f1 K
Android 源码在光盘目录“04_源码_Android4.4 文件系统”下,压缩包先在 windows
6 H5 Q) W8 p. ~) P7 W9 s下解压,解压之后的到单独的压缩包“iTOP-iMX6_android4.4.2_20160904.tar.gz”。# u$ b; M7 O; L+ ?2 p
将“iTOP-iMX6_android4.4.2_20160904.tar.gz”压缩包解压到 Ubuntu 下(作者在# E, q7 U7 h% n; a/ ^
/home 目录下新建了 imx6 目录,将源码拷贝和解压到 imx6 目录下)。注意:这里的解压命
& \+ C2 T ~/ G3 [0 T! A3 ^! Z令,包括后面的解压命令中,压缩包的日期可能有点不一样,用户要根据实际情况调整。
# U6 E1 Y& I! u5 |7 l8 L; w3 q p
使用解压命令“tar -vxf iTOP-iMX6_android4.4.2_20160904.tar.gz”解压源码,如下
% E3 W3 v! i; Z9 K/ g! J! e% i6 e图所示。
' v0 j$ ~$ y$ H+ w% B+ t/ \/ n3 x# c
解压之后得到“iTOP-iMX6_android4.4.2”文件夹,如下图所示。1 p+ o" a' Q# n& f1 [
7 C, p- ^+ v# H
使用命令“cd iTOP-iMX6_android4.4.2”,进入“iTOP-iMX6_android4.4.2”目录,5 z5 b+ D/ D. {4 @- F
如下图所示。8 U& Y! G u }" F. |/ ^5 e
. ~ J/ A% Y8 [& Y$ V" g 如下图所示,使用 ls 命令,可以看到编译脚本“create.sh”。% E% [$ h7 O+ _; m2 s" L6 Q4 C
* Z) C4 \) S- o5 f 运行脚本“./create.sh”,可以编译出适用于商业级核心板的 uboot,kernel,以及8 I# f& J0 M0 x/ o6 ?; D
Android 文件系统,如下图所示。
Z8 m7 q( i( P
7 s% K& d' P( e7 ~1 K! X
注意!如果想编译出适用于工业级核心板的 uboot,kernel,以及 Android 文件系统,
+ {0 y H7 l% k* f7 G$ o/ y需要在编译时增加参数“1GDDR”,即:“./create.sh 1GDDR”,如下图所示。(1、要支持( |+ l+ Z4 q2 c
工业级核心板,源码版本要求为 20180706 及其之后日期版本。2、下面截图与上述路径不, d4 T3 R3 \ i% p1 s/ o$ _$ r
同,大家不用考虑,只需知道编译适用于工业级核心板源码时,需要添加参数即可。其他步骤
8 p0 V0 |( {, l完全相同。), C+ j& S P) c* H- |
3 j& @! }7 c7 f+ O
如下图所示,开始编译。
1 w- o9 |9 _5 s5 @
3 D$ q) r* x7 ]* X4 U/ E; ~5 ]
编译完成,如下图所示。
* v$ W. f: u, u( r( g% q
8 B" h0 C$ h3 Q编译完成之后,使用命令“cd out/target/product/topeet_6dq”进入镜像目录,使用/ `" J t6 S: {0 ~ Z# b7 v' R
ls 命令,可以看到生成了“u-boot.bin”,“boot.img”,“system.img”,
- E: W- N$ t6 K1 H“recovery.img”等镜像文件。/ F- d) r7 ?4 g6 C) t
) D! s1 ]! C0 ~4 \9 C) d- q' {' Y# w
5.3.2 单独编译5 k) h& _9 @/ c) y5 Q
上一小节介绍了 Android 的整体编译,本节介绍单独编译 uboot 和 kernel。. Y3 Y$ S$ C+ }% _
5.3.2.1 单独编译 uboot4 h$ R- a0 C# t# t# u" w1 b2 b
进入源码解压得到的“iTOP-iMX6_android4.4.2/bootable/bootloader/uboot-imx” r" W* m; ?* Y$ x/ g m5 _
目录,如下图所示,可以看到脚本“build_uboot.sh”。
6 h0 P; a/ d" S
+ `5 O! M8 S5 v$ p& ?% Z6 W3 C4 C 如果没有执行过“5.3.1 Android 源码整体编译”小节,在运行单独编译脚本前,可以对
6 [# u9 }, f+ l5 z7 ^$ l! d编译文件进行配置。% E: d8 K; l7 f( }9 Y
①:适用于商业级核心板:
9 E' T4 i! ]( @. s/ ^( z" w; \进入到“board/freescale/mx6q_topeet/”目录下,. L p# W% f4 h7 b) L0 T( y
cp flash_header.S_2G flash_header.S# R5 D2 {! L: r b- z1 t
进入到“include/configs”目录下,
1 v( ^1 K8 I6 o: Dcp mx6q_topeet.h_2G mx6q_topeet.h
9 S- a& |& d8 O& A. K @# H②:适用于工业级核心板:
7 ~% F# X4 `& g- t9 |6 D进入到“board/freescale/mx6q_topeet/”目录下,
& R' i1 V; W D) w0 Z3 Kcp flash_header.S_1G flash_header.S
( U1 w- c6 `1 Y5 w) h3 A7 Y进入到“include/configs”目录下,, Z* C' v" X9 ?2 Z5 }8 E
cp mx6q_topeet.h_1G mx6q_topeet.h4 a0 ]3 U5 f3 E+ o# w
配置完成后,运行脚本“build_uboot.sh”开始单独编译 uboot。如下图所示。* m& G; d4 i1 I6 H, A- l$ ]
' a& \, }% L$ y如下图所示,编译完成。, |5 N9 W% T/ B* E
) d$ [ ?& C2 C2 [- U如下图所示,生成了“u-boot.bin”文件,就是 uboot 的镜像。iTOP-iMX6 开发板所有* n# ^& B1 t) E; V
的系统通用一套 uboot 源码和镜像。
9 v1 I- f2 d8 z- |& F
9 k. f2 o2 a9 _8 g! m2 J
5.3.2.2 单独编译 kernel
$ U2 u- I8 a P/ e, e" t' o& R5 L: Z单独编译 kernel,则进入源码解压的到的“iTOP-iMX6_android4.4.2/kernel_imx”目
8 g4 D. I& c4 F1 ]- w4 d录,如下图所示。
# r5 ?$ I& M' Y8 u9 t+ v0 f* P
: ]7 Q& Y9 k3 |+ x3 t* `" u: g5 m$ F L
如下图所示,使用命令“./build_android_kernel.sh ”,开始编译内核。
, E9 _0 F: x6 X; f
) B8 x. u0 R1 u8 I& S$ S. T
如下图所示,开始编译。
$ t* T, ~& j* y) g9 N- H4 W `6 s; `" a
( s, X+ `% N9 x* B* G$ O 如下图所示,编译完成。; A/ ?7 s$ ?& F9 ]
" R& J4 C: a/ ^
如下图所示,在“iTOP-iMX6_android4.4.2/kernel_imx/arch/ARM/boot”目录下生成# w" B4 o, l& S/ e* }
uImage,即是内核镜像。但是 iMX6 的内核烧写文件比较特殊,需要再次经过打包压缩,所
3 E4 M2 x4 i! N% s以还需要重新运行整体编译 android 的脚本“create.sh”,才能生成“boot.img”,
0 ^* ]- p4 n7 ~android 编译一次之后,后面编译就非常快了。
' P1 _5 c9 f$ ]7 Y
, X m% b$ l: z* m+ w9 b
更多内容关注迅为电子3 g) o7 G4 {4 Z8 E
0 R- W; b- W# u3 y
|