EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 孤久厌闹 于 2020-4-23 14:54 编辑 I, @- Z3 D1 w: L
, _/ Q( k, ?+ U/ s, R
5.3.1 Android 源码整体编译-基于迅为-IMX6开发板系列
0 n# M q4 v: Z本节介绍如何将 Android 源码如何整体编译,即将 uboot,kernel,Android 镜像一次 {" t5 v( A% y3 w6 ?, P7 Y" t
性全部编译出来。; b4 P& F9 C+ y0 W$ r
注意:编译 Android 系统必须保证给 Ubuntu 系统提供 4G 以上内存。这里“提供 4G 以% H+ \6 y: W, o U2 p3 K
上内存”的意思,不仅仅是指在 VMware Workstations 虚拟机中设置分配 4G 内存。例如,2 K- c" w; A6 d% D4 z: n
用户在编译的时候,PC 机的内存一共是 6G,在虚拟机中设置分配 4G 内存,但是在
. I1 v! E7 V1 t o9 n; ^* |Windows 系统下,开着 QQ,杀毒软件,音乐播放器,浏览器等等,这样在 Windows 下占
- q1 r5 J) g" y, W7 q6 ?用的内存就快 2G 了,那么虚拟机会自动调整到只占用 2G,甚至不到 2G 的内存,这样就有: H2 n( V/ }, o1 U. C( J9 R1 D# L& l
可能没法编译通过。6 T8 p- C2 F. { L* i9 {6 ~) d
正确的分配内存方法是,首先给虚拟机分配 4G 以上内存,然后在 Windows 下关掉尽量
9 @. u& G" ?! b7 Q) i; g多的不必要的应用,关掉尽量多应用的后台程序。
! H5 H# [0 P2 x5 d5 r当然,如果用户的 PC 是 8G 或者 16G 内存,随意就成。
# z- |% k" @& C+ ]' t" b8 l9 L xAndroid 源码在光盘目录“04_源码_Android4.4 文件系统”下,压缩包先在 windows" G( Z5 f* U, h) ~
下解压,解压之后的到单独的压缩包“iTOP-iMX6_android4.4.2_20160904.tar.gz”。
. o& A4 p( P0 ]+ J- h. Z, o将“iTOP-iMX6_android4.4.2_20160904.tar.gz”压缩包解压到 Ubuntu 下(作者在5 \0 Z' M- i* p# X
/home 目录下新建了 imx6 目录,将源码拷贝和解压到 imx6 目录下)。注意:这里的解压命
# h Q% ~/ R! z: J3 C' Y h V令,包括后面的解压命令中,压缩包的日期可能有点不一样,用户要根据实际情况调整。" p4 y" K* y! L4 w
使用解压命令“tar -vxf iTOP-iMX6_android4.4.2_20160904.tar.gz”解压源码,如下) Z4 k5 Z/ k# a/ ?: ?; v
图所示。/ t+ U+ E0 j) D( S
解压之后得到“iTOP-iMX6_android4.4.2”文件夹,如下图所示。7 F: @% a- A/ I. C
/ Z5 K7 G# S+ g% Y: z; ]& T
使用命令“cd iTOP-iMX6_android4.4.2”,进入“iTOP-iMX6_android4.4.2”目录,
' y( ^/ S% U( Q, V* i; u如下图所示。/ M( c, ~2 U/ l! m7 ~7 Q' [6 o
# M; Q; k+ B$ V8 a W+ O3 s
如下图所示,使用 ls 命令,可以看到编译脚本“create.sh”。* h$ a C$ F5 I& {, `# S
2 ?1 s0 P# V0 T, Y, T 运行脚本“./create.sh”,可以编译出适用于商业级核心板的 uboot,kernel,以及! ?6 F1 h4 M" C) Y* _' ~
Android 文件系统,如下图所示。! {" i S" X( k% w" b# i
$ l8 ~+ M# C, { 注意!如果想编译出适用于工业级核心板的 uboot,kernel,以及 Android 文件系统,
" j4 {' _& e. T$ Y8 m需要在编译时增加参数“1GDDR”,即:“./create.sh 1GDDR”,如下图所示。(1、要支持, ^; T! }( U8 k, J8 E/ g: [
工业级核心板,源码版本要求为 20180706 及其之后日期版本。2、下面截图与上述路径不" N% x; ? z0 M* @0 V
同,大家不用考虑,只需知道编译适用于工业级核心板源码时,需要添加参数即可。其他步骤' B c- Z" Q0 m' s m
完全相同。)
9 @6 ?: g% k: c# z* z
# D8 k6 H+ Y( v3 s0 u如下图所示,开始编译。
6 Y( a2 t4 u! c- B G4 C! W
. J* W& g( o3 p5 a6 x0 h5 }; c
编译完成,如下图所示。
3 S: C9 t! l8 R
* x5 q3 @5 u& Y+ ]0 z编译完成之后,使用命令“cd out/target/product/topeet_6dq”进入镜像目录,使用) U* V: f& J& t4 c& c. u* E9 z
ls 命令,可以看到生成了“u-boot.bin”,“boot.img”,“system.img”,
2 |$ _" n2 C5 G7 \“recovery.img”等镜像文件。) w0 y1 H! Z0 y5 s7 p" @. }
2 l e: B; B5 A0 d) \- c* j
5.3.2 单独编译
& S7 N: w8 r1 T k9 S! i5 X' `上一小节介绍了 Android 的整体编译,本节介绍单独编译 uboot 和 kernel。
% W/ [; ~4 N- `0 p7 R" l$ e9 o5.3.2.1 单独编译 uboot! H- Z( @9 e! f3 j
进入源码解压得到的“iTOP-iMX6_android4.4.2/bootable/bootloader/uboot-imx”
. v( o: R0 Y2 K9 z: S目录,如下图所示,可以看到脚本“build_uboot.sh”。
: r5 t, W h# S* n+ w
. p* [& O6 e4 M3 `5 n3 R
如果没有执行过“5.3.1 Android 源码整体编译”小节,在运行单独编译脚本前,可以对1 q2 p1 c+ w5 {" I* n" E9 ~1 Q
编译文件进行配置。
' Y+ L8 P8 M( [% F' M# s①:适用于商业级核心板:
$ t4 D% x6 K; _. l4 X进入到“board/freescale/mx6q_topeet/”目录下,
# }; V& W/ U' W. Vcp flash_header.S_2G flash_header.S
8 W3 x5 g! ]9 l' d进入到“include/configs”目录下,2 t3 z0 M7 ?5 i
cp mx6q_topeet.h_2G mx6q_topeet.h
/ J5 U! z, Z G) |2 h1 o8 I( T②:适用于工业级核心板:& \7 n4 Y( K& s: d. D$ }6 ~
进入到“board/freescale/mx6q_topeet/”目录下,! d5 i5 e, X8 X- S& {3 n
cp flash_header.S_1G flash_header.S7 Q! S7 G( H" m% B6 a
进入到“include/configs”目录下,- O: K9 E$ D* W/ W1 N
cp mx6q_topeet.h_1G mx6q_topeet.h) X% r) M7 P8 H
配置完成后,运行脚本“build_uboot.sh”开始单独编译 uboot。如下图所示。& {4 A8 r7 @0 O8 ]
/ T! ~- ?: K, j如下图所示,编译完成。) z8 i1 ^3 e% l* { @3 N
) [7 Q& m- `4 i" r) K/ d
如下图所示,生成了“u-boot.bin”文件,就是 uboot 的镜像。iTOP-iMX6 开发板所有
# a: i9 Y# m& V2 ?& x的系统通用一套 uboot 源码和镜像。0 i. H% \1 V0 x/ ` m
! Q# C' u3 a2 l, ]+ Y: `. ?$ t- g
5.3.2.2 单独编译 kernel0 y: {3 O3 ?! T& j7 z
单独编译 kernel,则进入源码解压的到的“iTOP-iMX6_android4.4.2/kernel_imx”目# |' l' o- U9 t) Y: @0 j6 _
录,如下图所示。6 \1 ~5 l/ k" g" Q/ B
+ A5 f4 U% [8 l 如下图所示,使用命令“./build_android_kernel.sh ”,开始编译内核。
7 @# ?; {+ ~6 W! }( N
, `7 Z: \% W! m, ?4 \, M; V 如下图所示,开始编译。% o% J: C I8 u4 k8 r/ \
E9 B# Q6 c. f9 A1 Z: Q 如下图所示,编译完成。
' [8 A/ z- m, D5 F, W6 R0 x* B
7 u9 I1 u) R& Q; Z
如下图所示,在“iTOP-iMX6_android4.4.2/kernel_imx/arch/ARM/boot”目录下生成% y4 M% X- A0 W& \
uImage,即是内核镜像。但是 iMX6 的内核烧写文件比较特殊,需要再次经过打包压缩,所
. `6 N/ p, W1 o( Y& ]以还需要重新运行整体编译 android 的脚本“create.sh”,才能生成“boot.img”,
2 K( m( B, g, R) ]android 编译一次之后,后面编译就非常快了。0 L, M, [8 h) G# g& `
3 h' j4 r% i: u+ Y& V
更多内容关注迅为电子
( T1 B5 D- k& G! O7 V9 U' Z+ d( Q! i) f1 B7 I
|