全志Android SDK编译详解(二)

注意要确定安装了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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。