zoukankan      html  css  js  c++  java
  • 全志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

  • 相关阅读:
    后端Golang+前端React架构开发案例
    Vim技巧大全
    Draggable Modal dialog in Bootstrap
    Github.com的镜像站
    kettle之excel上传数据库
    自定义函数之分割函数
    jmeter 压测 ActiveMq 消息队列
    SQL---查找+删除重复记录
    异常值检测(Outlier Detection)
    使用u盘在pc上安装centos7(安装停留在dracut:/#的处理)
  • 原文地址:https://www.cnblogs.com/xuyh/p/4177736.html
Copyright © 2011-2022 走看看