嵌入式系统三部分:bootloader(uboot)、Linux内核、根文件系统。制作根文件系统的神器有3个:busybox、buildroot和yocto。使用busybox搭建文件系统只是帮助我们搭建一些常用的命令和文件。lib库和/etc目录下的一些文件需要手动创建。我们还需要自己移植一些第三方软件和库。如alsa、iperf、mplayer等。而busybox构建的根文件系统默认是没有用户名和密码设置的。如果要构建一个完整的根文件系统,一般使用buildroot。它不仅包括busybox的功能,还集成了各种软件。您可以选择您需要的任何软件,我们不需要移植它。buildroot极大的方便了我们嵌入式Linux开发者搭建一个实用的根文件系统。至于用yocto来搭建根文件系统,太复杂了,时间也长。我们一般不选择这种方式。buildroot下载buildroot源码必须到buildroot官网下载,官网地址为https://buildroot.org/。下载后解压如图:buildroot和uboot、Linuxkernel一样,也支持图形化配置。输入以下命令打开图形化配置界面:makemenuconfig1,配置TargetoptionsTargetoptions->TargetArchitecture=ARM(littleendian)->TargetBinaryFormat=ELF->TargetArchitectureVariant=cortex-A7->TargetABI=EABIhf->Floatingpointstrategy=NEON/VFPv4->ARMinstructionset=ARM2,configureToolchain该配置项用于配置交叉编译工具链,设置为我们使用的交叉编译器,必须是绝对路径。目前在ARMLinux的开发中,人们倾向于使用Linaro(http://www.linaro.org/)工具链团队维护的ARM工具链,该团队每月发布一次新版本,编译好的可执行文件可以下载来自http://www.linaro.org/downloads/。Linaro是ARMLinux领域最著名、技术成就最高的开源组织。其成员包括ARM、博通、三星、德州仪器、高通等,国内海思、中兴、全智、台湾联发科也是其成员。一个典型的ARMLinux工具链包括arm-linux-gnueabihf-gcc(后续工具省略前缀)、strip、gcc、objdump、ld、gprof、nm、readelf、addr2line等。前缀中的“hf”表示工具链是完全硬浮点。Toolchain->Toolchaintype=Externaltoolchain->Toolchain=Customtoolchain//用户自己的交叉编译器->Toolchainorigin=Pre-installedtoolchain//预装编译器->Toolchainpath=//编译器绝对路径->Toolchainprefix=$(ARCH(NEW)//Select->[*]ToolchainhasC++support?//Select->[*]EnableMMUsupport(NEW)//选择3、configureSystemconfiguration设置一些系统配置,如开发板名称、欢迎信息、用户名、密码,ETC。Systemconfiguration->Systemhostname=Jasonangel//平台名称,自己设置->Systembanner=Welcometoxxxxx//Welcome->Initsystem=BusyBox//使用busybox->/devmanagement=Dynamicusingdevtmpfs+mdev//使用mdev->[*]Enablerootloginwithpassword(NEW)//Enableloginpassword->Rootpassword=123456//登录密码为1234564,configureFilesystemimages该选项配置我们最终制作的根文件系统的格式,配置如下:->Filesystemimages->[*]ext2/3/4rootfilesystem//如果是EMMC或者SD卡,使用ext3/ext4->ext2/3/4variant=ext4//选择ext4格式->[*]ubiimagecontaininganubifsrootfilesystem//如果使用NAND,使用ubifs5,禁止编译LinuxKernel和ubootbuildroot不仅可以构建根文件系统,还可以编译linux内核和uboot。配置buildroot并启用linux内核和uboot后,buildroot会自动下载并编译最新的linux内核和uboot源码。但是我们一般不会使用buildroot下载的linux内核和uboot,因为buildroot下载的linux和uboot官方源码会缺少很多驱动文件,而最新的linux内核和uboot会需要编译器版本号,这可能会导致编译失败。因此,我们需要配置buildroot,关闭linux内核和uboot的编译,只使用buildroot构建根文件系统。首先禁止编译Linux内核,配置如下:->Kernel->[]LinuxKernel//不要选择编译LinuxKernel的选项!然后禁止Uboot的编译,配置如下:->Bootloaders->[]U-Boot//不要选择编译U-Boot的选项!6.ConfigureTargetpackages该选项用于配置要选择的第三方库或软件,如alsa-utils、ffmpeg、iperf、ftp、ssh等工具,可根据需要选择。配置完成后,就可以编译buildroot了。编译完成后buildroot会生成编译好的根文件系统压缩包,我们可以直接使用。输入以下命令开始编译:sudomake//注意,必须加sudo,不能通过-jx指定多核编译!!!buildroot编译过程会比较耗时,请耐心等待!编译完成后会在buildroot-2019.02.6/output/images下生成根文件系统,可以使用。编译过程需要一定的额外内存。注意保留内存,否则会报错如下:g++:internalcompilererror:Killed(programcc1plus)Pleasesubmitafullbugreportbuildrootbuildroot下的busybox配置在构建根文件系统的时候也用到了busybox,既然用到了busybox那么就涉及到配置的busybox。buildroot会自动下载busybox压缩包,buildroot下载的源码压缩包存放在/dl目录下。dl目录下有一个名为“busybox”的文件夹,busybox压缩包就保存在这个目录下。打开buildroot下的busybox配置界面,输入以下命令:sudomakebusybox-menuconfig输入后,会打开buildroot下的busybox配置界面。您可以启用所需的任何功能。可以修改busybox中的文件,使其支持中文,可以自行百度设置。编译后会生成rootfs.tar。拷贝好后可以解压然后使用nfs挂载到板子上,或者直接用SD卡烧录。可以使用编译好的文件系统。如果您需要任何命令和工具,只需在makemenuconfig中启用重新编译即可。本文转载自微信公众号《嵌入式Linux系统开发》,可通过以下二维码关注。转载本文请联系嵌入式Linux系统开发公众号。
