注意要确定安装了jdk)
第一步: cd lichee; ./build.sh -p sun5i_elite -k 3.0 (apt-get install uboot-mkimage需要安装mkimage工具)
1)打开build.sh脚本发现脚本中只有“buildroot/scripts/common.sh $@”此一句话;其中$@接受所有输入参数
2)继续打开 (vim) buildroot/scripts/common.sh脚本 阅读代码知编译linux-3.0内核和bootloader源码生成 内核镜像, uboot和文件系统等;并且copy到out/android目录
out/
├── android├── bImage
├── lib
├── toolchain
├── uImage
│── zImage
│── u-boot.bin
│── sun5i_rootfs.cpio.gz
几种linux内核文件的区别:
1、vmlinux 编译出来的最原始的内核文件,未压缩。
2、zImage 是vmlinux经过gzip压缩后的文件。
3、bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
4、uImage U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。
5、vmlinuz 是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
6、initrd 是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态
第二步: cd android; source build/envsetup.sh
这个命令是用来将envsetup.sh里的所有用到的命令加载到环境变量里去,我们来分析下它。
第三步: root@QinQi:/work/shenbao-new/wifi_DDR128X16_shenbao/android# lunch
(#lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译项,来定义Product和编译过程中用到的全局变量。)
You're building on Linux
Lunch menu... pick a combo:
1. full-eng
2. full_x86-eng
3. vbox_x86-eng
4. full_stingray-userdebug
5. full_wingray-userdebug
6. full_crespo4g-userdebug
7. full_crespo-userdebug
8. full_maguro-userdebug
9. full_toro-userdebug
10. full_tuna-userdebug
11. apollo_mele-eng
12. apollo_tvdevb-eng
13. crane_evb_v12r-eng
14. crane_evb-eng
15. crane_m1003h6-eng
16. elite_evb-eng
17. elite_nm307_v11-eng
18. elite_nm307-eng
19. nuclear_12_evb-eng
20. nuclear_evb-eng
21. full_panda-eng
Which would you like? [full-eng] 17
第四步:android# extract-bsp
extract-bsp 是一个脚本函数,在 device/softwinner/common/vendorsetup.sh 他也是在 lunch 的时候被执行的,也就是说如果先不执行 lunch ,extract-bsp 是无效的
经行分析 extract-bsp 脚本 发现,其实就是将 lichee 编译的结果输出到 device/softwinner/vendor 目录下,其实这个过程是为了 android的编译在做准备。
第五步:make
执行make命令的结果就是去执行当前目录下的Makefile文件,我们来看下它的内容:
### DO NOT EDIT THIS FILE ###
include build/core/main.mk
### DO NOT EDIT THIS FILE ###
我们再看下build/core/main.mk
main.mk文件里虽然脚本不多,但是却定义了整个Android的编译关系,它主要引入了下列几个重要的mk文件:
49 include $(BUILD_SYSTEM)/config.mk
55 include $(BUILD_SYSTEM)/cleanbuild.mk
142 include $(BUILD_SYSTEM)/definitions.mk