• 全志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

  • 相关阅读:
    HDOJ/HDU 2560 Buildings(嗯~水题)
    HDOJ/HDU 2555 人人都能参加第30届校田径运动会了(判断加排序~)
    POJ1703Find them, Catch them
    BZOJ2303: [Apio2011]方格染色
    BZOJ2809: [Apio2012]dispatching
    POJ1611The Suspects
    BZOJ2006: [NOI2010]超级钢琴
    BZOJ2288: 【POJ Challenge】生日礼物
    BZOJ1150: [CTSC2007]数据备份Backup
    洛谷P1316 P1824
  • 原文地址:https://www.cnblogs.com/xuyh/p/4177736.html
Copyright © 2020-2023  润新知