二十一.Linux开发之BSP分析和buildroot的引入

有道云笔记地址:

详情看这里链接,记录太多,就不一一排版了。

http://note.youdao.com/noteshare?id=64eec0e2fe29bfef2e554264a269a02a&sub=1858AFCBB4D0476CBFDFB169981BF402

一、BSP简介

(此处转载注明:http://blog.51cto.com/9291927/1796000)

嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境,硬件相关层就是嵌入式系统中的板级支持包 BSP(Board Support Package,简称BSP)。

BSP是嵌入式系统中介于硬件平台和操作系统之间的中间层软件,主要目的是为了屏蔽底层硬件的多样性,根据操作系统的要求完成对硬件的直接操作,向操作系统提供底层硬件信息并最终启动操作系统。BSP具有硬件相关性和操作系统相关性的特点,BSP主要功能为屏蔽硬件,提供操作系统及硬件驱动,具体功能包括:

A、单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持

B、为操作系统提供设备驱动程序和系统中断服务程序

C、定制操作系统的功能,为软件系统提供一个实时多任务的运行环境

D、初始化操作系统,为操作系统的正常运行做好准备

BSP是相对于操作系统而言的,不同的操作系统有不同定义形式的BSP,要求BSP所实现的功能也有所不同。在嵌入式Linux系统中,主要是初始化底层硬件并引导操作系统;同时,BSP又是和硬件相关的,还要考虑对硬件的初始化操作。这些初始化操作主要是对CPU、内存、中断等相关的寄存器及协处理器进行正确的配置。在不同的开发阶段,因为核心和文件系统所处的位置不同,BSP所要完成的工 作也有所不同;在开发调试阶段,BSP要能够与主机通信并从主机下载核心;在目标产品中,BSP要能够从非易失存储设备中加载核心。

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

通常包括:

硬件相关:

A、开发板原理图

B、开发板元件列表

C、接口定义

D、地址分布

软件相关:

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

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

服务相关 :

售后的技术支持

、X210的bsp介绍

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

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

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

2、X210的linux QT bsp整体介绍

我们将qt_x210v3s_160307.tar拷贝解压到这里

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

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

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

3、mk的帮助信息

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

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

譬如:

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

mk -x 即可只编译xboot

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

mk -k即可只编译kernel

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

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

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

4、工作示例

(1)编译uboot  ./mk -ui

(2)编译内核   ./mk -k

注意:

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

三、mk文件分析

1、shell程序结构

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

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

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

2、主函数

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

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

四、buildroot引入

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。

2、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 第三方交叉编译工具位置,我的目录是空的。

3、make x210ii_defconfig

在~/x210v3_bsp/qt_x210v3# cd buildroot/下执行以下命令:

(1)先make xxx_defconfig,我们这里是make  x210_defconfig

(2)make menuconfig

(3)make(要编译很久很久很久.....(┬_┬)☹)

4、make及其错误解决

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

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

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

(1)编译后生成的文件夹格式的rootfs在buildroot/output/images/rootfs.tar。

我们将其复制到了根目录下的release目录下去,这个文件就是一个完整的可以工作的文件夹形式的rootfs。

(0)

相关推荐

  • 初识Buildroot

    转自CSDN ,记录是为了作者小编学习需要 作者:xixihaha331 什么是buildroot Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由M ...

  • 【博文精选】riscv linux在qemu上仿真

    经过几天的斗争,终于在qemu上,成功跑通了linux.下面将整个流程,记录下. 大致分为如下几步: 编译工具链 编译linux kernel 编译bootloader 编译跟文件系统 编译qemu ...

  • 编译型语言和解释型语言的区别

    我们编写的源代码是人类语言,我们自己能够轻松理解:但是对于计算机硬件(CPU),源代码就是天书,根本无法执行,计算机只能识别某些特定的二进制指令,在程序真正运行之前必须将源代码转换成二进制指令. 所谓 ...

  • 司马牛:山茶落后梅花开/《吾心深远处》系列之二十一

    <吾心深远处>系列之二十一 山茶落后梅花开 司马牛 从小学到高中,我与梅一直是校友. 从另一个层面来讲,由于乡里乡亲的,青梅竹马.岁月寒窗,加之长辈们的不断玩笑,寒来暑往,我俩好像也在彼此 ...

  • 张鸿雁教授:迈向二十一世纪的长江三角洲城市群发展战略定位分析

    5月13日,中共中央政治局召开会议,会议审议了<长江三角洲区域一体化发展规划纲要>.据悉此是发改委为了推动长三角地区三省一市间产业融合和创新发展所出台的一份发展规划,是长三角一体化上升为国 ...

  • ​二十一、血弱气尽,腠里开,邪气因入,与正气相搏,结于胁下。正邪分争,往来寒热,休作有时

    正邪分争,往来寒热,休作有时,默默不欲饮食,脏腑相连,其痛必下,邪高痛下,故使呕也,小柴胡汤主之.原文97前段 [郑论] 按此条指气血虚弱而言,正虚则外邪得以乘虚而入,邪正相攻,结于胁下,往来寒热,默 ...

  • 说话这个事儿——闲时花开(二十一)

    说话这个事儿 --闲时花开(二十一) 人们为什么越长大越不愿意开口说话,惜字如金? 因为经过岁月的洗礼,渐渐有自知之明,知道平时所说的话,大部分都是在自言自语,自说自话,在别人的眼里都是废话! 聪明的 ...

  • 涂装异常案例分析(二十一)、水上乐园混凝土上涂层面漆脱落!

    某水上乐园的混凝土池底及池壁,设计的涂装方案如下: 在今年4月份完成了涂装.可以肯定的是当时混凝土的水分是干了,而且表面处理也到位了,封闭底漆做得也非常好.环氧喷涂完后,3-4天内做的面漆.施工完毕后 ...

  • 2020我在逆水寒六开搬砖日记(之二十一)

    2020年逆水寒纯手动六开搬砖的真实体验 逆水寒六开搬砖紫装掉落日记 2020我在逆水寒六开搬砖日记(小结篇一) 2020我在逆水寒六开搬砖日记(之二十) 2020我在逆水寒六开搬砖日记(之十九) 2 ...

  • 病例分析(二十一)

    不谦真人在中医药论坛上看到一个病例,具体病情如下. 该患在某一省会中医大医院治疗,方中制附子用至30克,以温补肾阳为主,祛寒湿药未见多用,服六剂后,虽是七月大暑天,两个小腿仍穿保暖性护腿,两腿寒冷未见 ...

  • java开发之ThreadPoolExecutor源码分析

    线程池的状态 只有了解线程池的几个状态,才能读懂它的核心源码.所以先说说这几个状态 running:为线程池初始化时的默认状态,此状态会接收任务进行处理 shutdown: 该状态下的线程池不接收任何 ...

  • 轻松制作出极品美味的芋头蒸排骨!《开饭店的那些年》二十一

    老铁们,明天就是国庆了,祝大家国庆快乐,出去玩儿的时候要注意安全,不要往人多的地方去哦! 今天给大家做一款蒸排骨,就用我们的伊比利亚黑猪肋排,明天就会有活动的哦,大家一直在问这个排骨啥时候有特价,那么 ...