本帖最后由 szypf2011 于 2017-8-9 15:26 编辑
上一篇文章中我们分享到了《Buildroot 编译rootfs的准备工作》这一部分,接下来要说到的是《Buildroot根文件系统定制》。Buildroot根文件系统定制
所有的配置选项在make *config 中包含了关于该选项的文本提示。同时 make *config命令还提供了搜索工具,从提示信息中查看(位于Buildroot version Confiuration的顶部)如何使用它: l 在 menuconfig 中,搜索工具使用 “/”调出; l 在 xconfig 中,搜索工具用 “Ctrl + f ”调出。 除了搜索,还有其他一些热键。例如查看帮助信息,按“?”键;选择按“Enter”。执行make menuconfig,配置界面如下图所示:
注:上下方向键高亮显示垂直方向的选项,左右方向键高亮显示水平方向的选项,确认用回车键。此外,还可以使用热键选中某一选项,例如按下“T”键选中Toolchain、“K”键选中Kernel。 保存配置信息,在更改单个选项后选择“SAVE”,或者更改完成后退出配置菜单再选择是否保存。make menuconfig的配置选项都保存在当前目录的“.config”(隐藏)文件中。 Buildroot的配置选项简单描述如下: l Target options 目标选项。包括处理器体系结构、二进制文件格式、架构系列、ABI、浮点运算、指令集 l Build options 编译选项。选择您所需的特性和参数 l Toolchain 交叉编译链。选择哪种编译链,包括Buildroot提供的和外部的。 l System configuration 系统配置选项。例如,配置root登录密码等。 l Kernel 配置嵌入式系统的内核.EVB-P6UL的内核单独编译,不在buildroot中配置,该选项不作介绍。 l Target packages 文件系统运用程序以及库安装包。包含1800多种buildroot package,供您选择性的安装。 l Filesystem images 文件系统镜像文件。生成各种类型的根文件系统,例如BUIFS、EXT2/3/4、jffs2等 l Bootloaders 系统引导程序。包括Barebox、mxs-bootlets、U-boot。EVB-P6UL的U-Boot单独编译,不在buildroot中配置,该选项不作介绍。 l Host utilities 嵌入式系统的主机工具。选择一些您需要的工具。 l Legacy config options 历史遗留的配置。该版本的buildroot已经删除或者不支持的内容。 3.2 Buildroot组件配置 与嵌入式Linux内核的定制思想类似——先定制一个最小系统,最小正常工作后再添加其他组件。Buildroot也是一样,先定制出简单的根文件系统,运行稳定后再添加其他组件。围绕这个思想,在EVB-P6UL上先定制带BusyBox的文件系统,测试良好后再增加所需的功能。因此,先选择一些必要的组件,例如Target options 、Build options 、Toolchain。 3.2.1 Targetoptions 配置
在Buildroot 2016.2 Configuration下,选择target options进入该组件的子菜单,针对于 ARM平台,Target options配置选项如下图所示:
Target options的配置选项简单描述如下: l Target Architecture i.MX6UL系列处理器是ARM平台,小端,所以选择ARM (little endian) l Target Binary Format 只有ELF可选。ELF(Executableand Linkable Format)是一种运行与不同架构和操作系统的库以及可执行的文件格式,目的是为软件开发人员提供一组二进制接口定义。 l Target Architecture Variant 根据NXP的规格书查得,i.MX6UL系列处理器为cortex-A7架构,所以选择cortex-A7。 l Target ABI ABI(Application Binary Interface)描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。EVB-P6UL的根文件系统配置选择EABIhf,EABIhf是EABI扩展的硬浮点模型。为了发挥处理的效能,应选择支持浮点运算的交叉编译器(toolchain)。 l Floating point strategy 浮点运算策略。根据NXP官方的规格书,i.MX6UL系列的处理器的浮点单元为VFPv4-16。 l ARM instruction set ARM指令集。有ARM与Thumb2指令集,在此选择ARM。 3.2.2 Build options配置
在Buildroot 2016.2 Configuration下,选择Build options进入该组件的子菜单,Build options配置选项如下图所示:
Build options子菜单配置如上如所示即可,部分配置选项简单描述如下: l Location to save buildroot config 配置文件保存的路径。当执行 'make savedefconfig'时,defconfig文件将保存在该目录,当前设置为../configs。将EVB-P6UL光盘中的.config作为默认配置即可,再根据需求进行更改。 l Download dir 源文件保存的路径。网络下载的库、应用程序源码保存的路径,当前设置为../dl 3.2.3 Toolchain配置
在Buildroot 2016.2 Configuration下,选择Toolchain进入该组件的子菜单,Toolchain配置选项如下图所示
Toolchain子菜单根据所选交叉编译器不同,相关的参数设置也不同,部分配置选项简单描述如下: l Toolchain type
可选Buildroottoolchain或External toolchain,此处选External toolchain。
l Toolchain 使用Buildroot提供的或者用定义的编译器,此处选择Custom toolchain。 l Toolchain origin 交叉编译器的来源。可选择下载(Toolchain to be downloaded and installed)或预安装(Pre-installed toolchain),此处选择Pre-installedtoolchain。 l Toolchain path 设置交叉编译器的路径。根据所使用的编译器的安装路径进行设置。 l Toolchain prefix 交叉编译器的前缀。根据编译进行设置,通常为arm-linux-xxx。 小技巧:安装编译器后在终端输入arm-linux再按tab键补全,便可查看当前宿主机安装了哪些交叉编译器。 l External toolchain gcc version 外部交叉编译器的GCC版本。本次使用的编译器的gcc 版本为 4.9.1。
小技巧:安装编译器后在终端输入<交叉编译器前缀>-gcc -v ,便可查看gcc版本。
l External toolchain kernel headers series
内核头文件版本序列号。在交叉编译器器中获取。例如gcc-linaro-arm-linux-gnueabihf-4.9-2014.07的内核头文件的版本序列号,保存在gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/libc/usr/include/linux/version.h文件中。version.h源码如下图所示:
红色线标记部分为的数值 196865 转换成十六进制数为30101,该值即为kernel headers 的版本号,所以External toolchainkernel headers series选择3.1.X。 l External toolchain C library
外部交叉编译器的的C库。此处选择glibc/eglibc,如下图所示:
l Enable MMU support EVB-P6UL的处理器支持MMU,选择该项。 提示:建议选择与编译内核相同的交叉编译器。如果内核与根文件系统的编译器不同,可能导致程序不能正常运行。 3.2.4 QT配置 QT是嵌入式Linux中常用GUI开发工具,在Bootroot中已经集成QT的有关组件(库、工具软件),具体配置如下:
1、选择Targetpackages(选择图片中红框标识的组件),进入packages组件菜单
2、接着,选 Graphic libraries and applications(graphic/text)
3、再选 Qt,进入QT组件选择菜单。部分QT库与软件工具的选择,简要介绍如下: l Compile and install Qt demos (with code) //编译以及安装QT demo程序 l Approve free license //同意免费许可,Qt有商业与开源两种许可协议。建议选择,否 则编译过程中可能需要您确认是否同意Qt的许可。 l Pixel depths ---> //像素位宽,即LCD是显示屏的数据位,较为常用的RGB565、RGB666, RGB88,根据自己实际来选择。 16 bpp, rgb 5-6-5 18 bpp, rgb 6-6-6 24 bpp, rgb 8-8-8 l Fonts ---> //字体设置 micro Helvetica Unicode l freetype2 support (System freetype2) ---> //freetype2是一个开源的字体引擎 (X)System freetype2
l JPEG support (System libjpeg) ---> //JPEG(图片格式)支持 (X)System libjpeg l PNG support (System libpng) ---> //PNG(图片格式)支持 (X)System libpng l IFF support (System libtiff) ---> //TIFF(Tag Image File Format,标签图像格式)支持 (X)System libtiff l zlib support (System zlib) ---> //zlib函数库支持 (X)System zlib l SQL Module ---> //SQL(数据库)模块 SQLite3 support (System SQLite) ---> (X)System SQLite l Graphics drivers ---> //图像驱动程序 Linux Framebuffer l Mouse drivers ---> //鼠标驱动程序 pc tslib l Keyboard drivers ---> //键盘驱动程序
linux input
注:Buildroot默认使用的QT库为qt-everywhere-opensource-src-4.8.7.tar.gz,本次编译使用qt-everywhere-opensource-src-4.8.6.tar.gz。更换QT库的版本,需要在package/qt/qt.mk中修改“QT_VERSION”,还要修改package/qt/qt.hash的文件校验码(sha256sum与md5)。
QT的版本
获取文件校验码,并添加到qt.hahs文件中
3.2.5 其他配置 其他配置主要选择System configuration、Target packages、Filesystem images组件中库或者工具(系统)软件。以下按组件介绍: System configuration Root FS skeleton (default target skeleton) ---> (X) default target skeleton //文件系统架构,默认。若需自定义,请选择custom target skeleton (evbp6ul) System hostname //设置评估板的主机名 Init system (BusyBox) ---> //Linux初始化系统 (X) BusyBox /dev management (Dynamic using devtmpfs + eudev) ---> //设备管理器 (X) Dynamic using devtmpfs +eudev (system/device_table.txt) Path to thepermission tables //文件系统设备表,使用该表省去手动创建节点(mknod)的麻烦 Enable root login with password (123456) Rootpassword //设置root(用户)的登陆密码 /bin/sh(bash) ---> (X) bash // Run a getty (login prompt) after boot ---> --- Run a getty (loginprompt) after boot (ttymxc0) TTY port //评估板的调试串口社会自 Baudrate (keep kerneldefault) ---> //波特率设置,可以跟随内核或者固有某一常用值 (X) keep kerneldefault (vt100) TERM environmentvariable //终端设置
Target package l Audio and video applications ---> alsa-utils ---> //alsa的一个工具包,里面包含有声卡测试和音频编辑的工具 amixer aplay/arecord mplayer mplayer l Libraries ---> Audio/Sound ---> //声音 -*-alsa-lib ---> //音频库 ---alsa-lib (/dev/snd)directory with ALSA device files (all)built PCM plugins (all)built control plugins aload -*- mixer *- pcm rawmidi hwdep seq alisp old-symbols -*-libid3tag -*-libmad 注:选取音频库 l Graphic libraries and applications (graphic/text) ---> --- Qt Mousedrivers ---> tslib SQL Module ---> SQLite3 support (System SQLite) ---> (X)System SQLite 注:选取触摸频库、SQL数据库 l Networking applications ---> boa can-utils iproute2 iw lrzsz openssh pppd tftpd wireless tools wpa_supplicant 注:选取网络服务/应用程序
Filesystem images l ext2/3/4 root filesystem ext2/3/4 variant (ext4) ---> (X) ext4 (0) exact size in blocks (leave at 0 for autocalculation) (0) exact number of inodes (leave at 0 for autocalculation (0) extra size in blocks (0) extra inodes jffs2 root filesystem (X) Parallel flash with64 kB erase size tar the root filesystem Compression method (nocompression) ---> ubifs root filesystem (0x1f800) logical eraseblocksize (0x800) minimum I/O unit size (2048) maximum logicaleraseblock count ubifs runtimecompression (lzo) ---> Compression method (nocompression) ---> 注意:jffs2文件系统要选择Parallel flash (Nor Flash)的擦除块的大小;ubifs 需要设置逻辑擦除块的大小、page大小、最大逻辑擦除块的数量,上述三个选项所设置的值等同于执行mkfs.ubifs的选项 -<数值>,如下: l logical eraseblock size,相当于执行mkfs.ubifs -e/--leb-size -<数值> l minimum I/O unit size,相当于执行mkfs.ubifs -m/--min-io-size-<数值> l (2048) maximum logical eraseblock count ,相当于执行mkfs.ubifs -c/--max-leb-cnt-<数值>
Buildroot的裁剪定制没有统一的标准衡量如何选取组件是最好的,所以上述各个组件的定制难以面面俱到。在我们移植根文件系统时,选取所要用到的,根据嵌入式系统的应用进行裁剪。总而言之,根文件系统的裁剪以适用为目的。 至此,Buildroot的定制已经完成。配置过程中,发现有的特性不能选且有提示信息,这是因为该项特性先决条件未得到满足。举例说明: (1)(X) busybox' default shell *** bash, dash, zsh need BR2_PACKAGE_BUSYBOX_SHOW_OTHER 需要打开busybox的默认shell,就必须先选择 Show packages that are also provided by busybox (2)*** efibootmgr requires a glibc toolchain w/ headers >= 3.12, 需要交叉编译器的头文件版本大于等于3.12,所以该项选不了。
如果需要efibootmgr,则必须选择支持该特性的编译器。交叉编译器如何选择?各个版本的Buildroot的功能不尽相同,选择编译器时首先结合Buildroot支持的功能,先选定Buildroot,再选编译器;或先选编译器,再选Buildroot。同时考虑Linux内核的编译器,尽可能选择同一个编译器编译内核与文件系统。
这次的分享就到这里,接下来还会有第三篇《根文件系统移植》!!!谢谢大家的支持。
|