微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > NXP-I.MX6UL开发板inux根文件系统定制资料分享(二)

NXP-I.MX6UL开发板inux根文件系统定制资料分享(二)

时间:10-02 整理:3721RD 点击:

上一篇文章中我们分享到了《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        //设置评估板的主机名

(Welcome to EVB-P6UL,www.embedall.com) System banner  //系统标题,在登陆shell前显示

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

注:选择开发板Linux系统的多媒体播放器

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内核的编译器,尽可能选择同一个编译器编译内核与文件系统。



这次的分享就到这里,接下来还会有第三篇《根文件系统移植》!谢谢大家的支持。



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top