2.20.buildroot的引入和介绍

请移步到这:

http://note.youdao.com/noteshare?id=7c7703973f0de13eb948e410e6072d9e&sub=FC1D7CECDAD74B6F80FE796AC2C6825A

章节目录

2.20.1.X210的bsp介绍

2.20.2.mk文件分析

2.20.3.buildroot引入

 

2.20.1.X210的bsp介绍

对于开发板提供商来说,BSP就是开发板的生产商提供的一个资料和资源包。

通常包括:

    硬件相关: 

    A、开发板原理图 

    B、开发板元件列表 

    C、接口定义 

    D、地址分布

    软件相关: 

    A、某些操作系统的bootloader及源代码 

    B、某些操作系统裁剪好的映像文件(如linux系列可能有源码,如WinCE可能有CEC文件)

    服务相关 :

    售后的技术支持

2.20.1.1、嵌入式linux产品的bsp介绍

(1)大部分的ARM架构的linux平台的bsp的内容和结构都是相似的。

(2)bsp一般是芯片厂家/板卡厂家提供的。

九鼎科技发布的基于X210开发板的qt_x210v3 BSP。结构如下:

    buildroot,构建根文件系统

    Kernel,kernel内核

    uboot、xboot,uboot移植部分

    mk:整个BSP的管理、编译脚本,

2.20.1.2、X210的linux+QT bsp整体介绍

(1)tslib_x210_qtopia.tgz是用来支持QT的触摸屏操作的应用层库

(2)xboot和uboot是X210支持的2个bootloader源代码。kernel文件夹中是内核源代码,buildroot文件夹是用来构建根文件系统的文件夹。tools里是一些有用工具。

(2)mk脚本是用来管理和编译整个bsp的。

 

2.20.1.3、mk的帮助信息

root@liu-virtual-machine:~/qt4.8bsp/bsp# ./mk -h

Usage: mk [OPTION]

Build script for compile the source of telechips project.

 

-j=n using n threads when building source project (example: -j=16) //多线程编译

-x, --xboot build bootloader xboot from source file

-ui,--uboot_inand build uboot for emmc

-un,--uboot_nand build uboot for nand flash

-k, --kernel build kernel from source file and using default config file

-r, --rootfs build root file system

-re,--rootfs_ext3 build rootfs for emmc,used with uboot

-rj,--rootfs_jffs2 build rootfs for nand,used with uboot

-U, --update gen update package update.bin,used with xboot //升级包

-a, --all build all, include anything

-h, --help display this help and exit

 

(1)linux下的惯例就是,执行程序时加-h或者--help就可以看到这个程序执行的帮助信息。

 

(2)mk脚本的主要作用是编译bsp中的所有的源代码(包括bootloader、kernel、rootfs等),但是我们可以完整编译也可以部分编译,我们通过执行mk 后面加不同的参数来指定mk脚本去编译相应的部分。

譬如:

mk -a 即可编译所有的bsp源代码

mk -x 即可只编译xboot

mk -ui 即可只编译uboot针对inand版本开发板的源代码

mk -r 即可只编译buildroot,-r只是得到了文件夹形式的rootfs,并没有将其制作成镜像文件。

mk -re 即可编译buildroot并且制作得到ext3格式的rootfs镜像

mk -rj 即可编译buildroot并且制作得到jffs2格式的rootfs镜像

 

2.20.1.4、工作示例

(1)编译uboot ./mk -ui

(2)编译内核

 

注:./mk和mk都是执行mk这个脚本文件,区别在于./mk是带路径的,mk是不带路径的。还有source mk,这个和前两个的区别是source执行时不需要mk文件具有可执行权限,而前面两种要求mk必须在当前用户下具有可执行权限。

 

 

2.20.2.mk文件分析

2.20.2.1、shell程序结构

(1)shell脚本程序分为:变量定义、函数、代码。shell脚本程序的结构非常类似于C语言程序

(2)shell程序和C语言程序很大的一个差别就是shell没有main函数,shell脚本执行时也是先执行主函数的,不过主函数没有放在一个类似于main这样的函数中,而是直接放在全局下的一些代码。

(3)shell程序执行时首先执行变量定义,然后执行主函数,其他函数在主函数代码中被调用执行。

2.20.2.2、主函数

(1)上节课说过mk可以编译整个bsp的源代码,也可以只编译其中一部分。怎么实现控制编译哪个不编译哪个?实现原理就是:用一个函数来完成编译一个(譬如编译内核用build_kernel函数,编译inand的uboot用build_bootloader_uboot_inand),然后用相应的一些变量来控制这个函数要不要被编译(譬如uboot_inand变量=yes就表示要编译inand版本的uboot,=no就表示不要编译),我们编译时通过-xxxxx来传参时,这些传参会影响这些变量的值=yes或者=no

(2)如果我们直接./mk并不传参,则$1为空,这时候按照一套默认的配置来编译。

2.20.2.3、各个源文件的编译函数

 

 

 

2.20.3.buildroot引入

buildroot简介

         Buildroot是一个包含Makefile和修补程序的集合,实现构建交叉工具链,根文件系统以及Linux内核映像。Buildroot是从事嵌入式系统开发的强大工具。

    官方网站:https://www.buildroot.org

1、buildroot工程目录分析

/dl 存放下载的源码包

/toolchain 放置编译交叉工具的配置文件与源代码

/fs/ 主要存放各种文件系统的源代码

/fs/skeleton 存放骨架,第一次生成文件系统镜像的地方

/linux linux源码存放地方

/configs 预先放置了一些开发板的配置参考,有arm,X86和MIPS等

/board 发现友善之臂的配置文件

/boot bootloader的一些配置,可以通过配置下载源码

/package 主要存放应用软件的配置文件,未来开发的主战场,可以通过配置其文件,增加源码包或者删减,利用 buildroot来实现交叉编译

/Output 编译的生成目录

/Output/images 存放编译后产生的所有镜像文件

/Output/build 编译的源码包,buildroot从dl的包解压缩到build里面,然后再编译

/Output/staging 这个目录非常重要,它提供了交叉编译依赖的库,一般进行make的时候,都会利用staging的库文件进行链接

/Output/target 嵌入式设备下的根文件系统,里面是我们实际烧写的根文件系统镜像

/Output/host 交叉编译工具位置如arm-linux-gc

/Output/toolchain 第三方交叉编译工具位置,我的目录是空的。

2.20.3.1、buildroot作用介绍

(1)之前自己从零开始构建根文件系统,一路下来事情还挺多,步骤比较麻烦。

(2)交叉编译工具链arm-linux-gcc,我们目前都是从soc官方直接拿来使用的,

官方的工具链从何而来?

实际上交叉编译工具链都是由gcc配置编译生成的,这个配置编译过程比较复杂,一般人自己去配置编译得到自己的交叉编译工具链是比较麻烦的,所以经常都是用别人最好的。

 

(3)buildroot就是一个集成包,这个包里集成了交叉编译工具链的制作,以及整个rootfs的配置编译过程。也就是说,使用buildroot可以很简便的得到一个做好的文件夹形式的根文件系统。

 

(4)buildroot将很多东西集成进来后,移植了linux kernel的make xxx_defconfig+make menuconfig的2步配置法,我们可以在buildroot的配置界面下完成集成在里边的所有东西的配置,然后直接make就可以最终得到文件夹形式的rootfs。

 

(5)buildroot包含busybox

2.20.3.2、make x210ii_defconfig

(1)先make xxx_defconfig

(2)make menuconfig

(3)make

 

2.20.3.3、make及其错误解决

(1)直接make会遇到很多错误,这些错误原因都是因为ubuntu中缺乏一些必要软件包造成的。解决方案是先安装这些必要的软件包。

(2)编译过程会需要从网上下载一些软件包,因此整个编译过程需要在联网状态下进行。

 

2.20.2.4、编译后结果查看与分析

(1)编译后生成的文件夹格式的rootfs在buildroot/output/images/rootfs.tar。我们将其复制到了根目录下的release目录下去,这个文件就是一个完整的可以工作的文件夹形式的rootfs。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值