Lichee(一)­­ lichee目录结构介绍和编译命令

经过繁琐的环境搭建和漫长的代码下载的等待,我们终于可以开始我们的lichee之旅了,由于内容很繁杂,涉及面比较广,接下来就针对linux uboot modules等是如何被打包到固件这条主线来分析,先理清树干,再慢慢理清枝叶吧!

先认识一下什么是Lichee: Lichee表示全志科技A10芯片的开发代号,英 [,laɪ'tʃiː]  美 [,laɪ'tʃi] 荔枝的意思, 跟魔兽里面的巫妖lich没有关系哈  ^_^!

目录结构

.
├── boot
├── buildroot
├── build.sh
├── linux-3.0
├── out
├── README
├── tools
└── u-boot

  buildroot

它的主要作用是

  1. 管理包之间的依赖关系
  2. 生成ARM交叉工具链
  3. 生成U-Boot
  4. 制作根文件系统,可以包含strace, directfb, oprofile等非常丰富的应用软件和测试软件
  5. 生成最终用于烧写的固件包

 

它的目录结构如下

buildroot/ 
|-- board 
|-- boot 
|-- CHANGES 
|-- Config.in 
|-- configs 
|-- COPYING 
|-- dl 
|-- docs 
|-- fs 
|-- linux 
|-- Makefile 
|-- package 
|-- readme.txt 
|-- scripts 
|-- target 
|-- tools 
`-- toolchain 

其中,boot目录里存放Boot代码,config目录里存放预定义好的配置文件,比如我们的sun4i_defconfigdl目录里存放已经下载好的软件包,scripts目录里存放buildroot运作的代码,target目录里存放用于生成根文件系统的一些规则文件,在tools目录中存放的是用于打包和量产的pc工具。对于我们来说最为重要的是package目录,里面存放了将近3000个软件包的生成规则,我们可以在里面添加我们自己的软件包或者是中间件更多关于buildroot的介绍,可以到buildroot的官方网站http://buildroot.uclibc.org/获取。


linux-3.0

目录结构如下,

linux-3.0/ 
|-- arch 
|-- block 
|-- build 
|-- COPYING 
|-- CREDITS 
|-- crypto 
|-- Documentation 
|-- drivers 
|-- firmware 
|-- fs 
|-- include 
|-- init 
|-- ipc 
|-- Kbuild 
|-- kernel 
|-- lib 
|-- MAINTAINERS 
|-- Makefile 
|-- mm 
|-- modules 
|-- net 
|-- output 
|-- README 
|-- REPORTING-BUGS 
|-- rootfs 
|-- samples 
|-- scripts 
|-- security 
|-- sound 
|-- tools 
|-- usr 
`-- virt 

以上目录结构跟标准的Linux内核是一致的,除了多一个modules目录。modules目录是我们扩展用来存放没有跟内核的menuconfig集成的外部模块的地方。我们目前放了example, maliwifi3个外部模块,其中example是示例用的,mali是我们的3D GPU驱动。


linux-3.0/modules/ 
├── cedarx
├── example
├── gps
├── mali
├── nand
└── wifi

tools
基本作用:
1.  不同芯片不同产品的集成打包功能
2.  不同产品的特殊配置,例如分区、各种外设的配置、CPU频率电压等,基本上涵盖了配置一款产品的所有功能
3.  制作固件包时可能用到的工具和脚本

目录结构
tools 
├── daily_build 
├── pack 
└── tools_win

tools目录是非常重要的,daily_build存放的是各种版本各种型号的自动化脚本

目录结构
 tools/daily_build/ 
├── android_clean.sh 
├── auto_crane_2.6.sh 
├── auto_crane_3.0.sh 
├── auto_linux_2.6.sh 
├── auto_linux_3.0.sh 
├── auto_linux_3.0_sun5i_a12.sh 
├── auto_linux_3.0_sun5i_a13.sh 
├── build_android4.0.sh 
└── clean.sh

这些脚本目前仅仅作为参考,因为在当前的sun4i这个版本中,没有用到其中任何一个脚本

目录结构
tools/pack/ 
├── chips 
├── out 
├── pack 
├── pack.bat 
├── pctools 
├── sun4i_crane_test1.img 
└── sun4i_crane_test2.img

pack是一个非常关键的目录,chips存放着各种制造商的配置,当然后面的移植过程中将会重点提到,out目录是打包过程中产生的各种bin、cfg、fex文件,为最终的img打包文件做准备;pack脚本是将out目录中的各种文件打包的脚本,后面也会专门探讨,pack.bat很显然是windows平台下打包的批处理脚本,pctools是windows linux2种平台中打包过程中可能用到的小工具,暂时还没有用到;sun4i_crane_xxx.img就是我们通过pack打包生成的固件,可以直接烧写到目标板,其中sun4i代表是芯片版本(还有sun5i sun6i等) crane代表是android的固件,xxx代表是产品名,都是自己起的


u-boot

目录结构
u-boot/ 
├── api 
├── arch 
├── board 
├── boards.cfg 
├── build.sh 
├── common 
├── config.mk 
├── COPYING 
├── CREDITS 
├── disk 
├── doc 
├── drivers 
├── examples 
├── fs 
├── include 
├── lib 
├── MAINTAINERS 
├── MAKEALL 
├── Makefile 
├── mkconfig 
├── mmc_spl 
├── nand_spl 
├── nand_sunxi 
├── net 
├── onenand_ipl 
├── post 
├── README 
├── rules.mk 
├── snapshot.commit 
├── spl 
├── System.map 
├── tools 
├── u-boot 
├── u-boot.bin 
├── u-boot.lds 
├── u-boot.map 
└── u-boot.srec

其中build.sh就是用来编译u-boot


build.sh

打包的脚本,细心的人应该已经观察到,在buildroot linux3.0 u-boot目录中都存在一个build.sh的脚本文件,这个文件就是我们实现自动化一步打包的脚本
具体过程如下图






编译代码

首先,我们来看看build.sh的usage

NAME
    build - The top level build script for Lichee Linux BSP
SYNOPSIS
    build [-h] | [-p platform] [-k kern_version] [-m module] | pack
OPTIONS
    -h Display help message
    -p [platform] platform, e.g. sun4i, sun4i-lite, sun4i-debug, sun4i_crane
                   sun4i: full linux bsp
                   sun4i-lite: linux bsp with less packages
                   sun4i-debug: linux bsp for debug
                   sun4i_crane: android kernel
    -k [kern_ver] 2.6.36(default), or 3.0 [OPTIONAL]
    -m [module] Use this option when you dont want to build all. [OPTIONAL]
                   e.g. kernel, buildroot, uboot, all(default)...
    pack To start pack program
Examples:
    ./build.sh -p sun4i
    ./build.sh -p sun4i_crane
    ./build.sh -p sun4i-lite
    ./build.sh pack


我们当前的平台是android,所以platform 要选 sun4i_crane 当前的内核版本是linux3.0 ,所以kern_ver 是3.0 如果不带-k参数,当然就是默认的2.6.36
所以我们的编译命令就是

$./build.sh -p sun4i-crane -k 3.0 

太方便了! 一条命令把linux uboot 自定义的modules和configs等全部搞定啦



  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值