假如想要建立完整的根文件系统linux多线程,你们通常都是使用buildroot,它除了包含了busybox的功能,并且上面还集成了各类软件,须要哪些软件就选择哪些软件,不须要我们去移植。
嵌入式系统三大部份:bootloader(uboot)、Linux内核、根文件系统。
制做根文件系统有三大利器:busybox、buildroot、yocto。
使用busybox建立文件系统,仅仅只是帮我们建立好了一些常用的命令和文件,像lib库、/etc目录下的一些文件都须要自己自动创建,我们还要自己去移植一些第三方软件和库,例如alsa、iperf、mplayer等等。并且busybox建立的根文件系统默认没有用户名和密码设置。
假如想要建立完整的根文件系统,你们通常都是使用buildroot,它除了包含了busybox的功能,并且上面还集成了各类软件,须要哪些软件就选择哪些软件,不须要我们去移植。buildroot极大的便捷了我们嵌入式Linux开发人员建立实用的根文件系统。
至于yocto建立根文件系统,过分复杂,须要时间也许久手把手教你构建自己的linux系统,我们通常不会选择这一种形式。
buildroot下载
buildroot源码肯定是要从buildroot官网下载,官网地址为。
下载后解压如图:
buildroot和uboot、Linuxkernel一样也支持图形化配置,输入如下命令即可打开图形化配置界:
make menuconfig
1、配置Targetoptions
Target options
-> Target Architecture = ARM (little endian)
-> Target Binary Format = ELF
-> Target Architecture Variant = cortex-A7
-> Target ABI = EABIhf
-> Floating point strategy = NEON/VFPv4
-> ARM instruction set = ARM
2、配置Toolchain
此配置项用于配置交叉编译工具链,设置为我们自己所使用的交叉编译器,必须是绝对路径。
目前,在ARMLinux的开发中linux 删除文件,人们趋于于使用Linaro()工具链团队维护的ARM工具链,它以每月一次的方式发布新的版本,编译好的可执行文件可从网址下载。Linaro是ARMLinux领域中最知名最具技术成就的开源组织,其会员包括ARM、Broadcom、Samsung、TI、Qualcomm等,国外的海思、中兴、全志和中国大陆的MediaTek也是它的会员。
一个典型的ARMLinux工具链包含arm-linux-gnueabihf-gcc(后续工具省略前缀)、strip、gcc、objdump、ld、gprof、nm、readelf、addr2line等。前缀中的“hf”显示该工具链是完全的硬浮点。
Toolchain
-> Toolchain type = External toolchain
-> Toolchain = Custom toolchain //用户自己的交叉编译器
-> Toolchain origin = Pre-installed toolchain //预装的编译器
-> Toolchain path = //编译器绝对路径
-> Toolchain prefix = $(ARCH)-linux-gnueabihf //前缀
-> External toolchain gcc version = 4.9.x
-> External toolchain kernel headers series = 4.1.x
-> External toolchain C library = glibc/eglibc
-> [*] Toolchain has SSP support? (NEW) //选中
-> [*] Toolchain has RPC support? (NEW) //选中
-> [*] Toolchain has C++ support? //选中
-> [*] Enable MMU support (NEW) //选中
3、配置Systemconfiguration
用于设置一些系统配置,例如开发板名子、欢迎语、用户名、密码等。
System configuration
-> System hostname = Jasonangel //平台名字,自行设置
-> System banner = Welcome to xxxxx //欢迎语
-> Init system = BusyBox //使用 busybox
-> /dev management = Dynamic using devtmpfs + mdev //使用 mdev
-> [*] Enable root login with password (NEW) //使能登录密码
-> Root password = 123456 //登录密码为 123456
4、配置Filesystemimages
此选项配置我们最终制做的根文件系统为何格式的,配置如下:
-> Filesystem images
-> [*] ext2/3/4 root filesystem //如果是 EMMC 或 SD 卡的话就用 ext3/ext4
-> ext2/3/4 variant = ext4 //选择 ext4 格式
-> [*] ubi image containing an ubifs root filesystem //如果使用 NAND 的话就用 ubifs
5、禁止编译Linux内核和uboot
buildroot不仅仅能建立根文件系统,也可以编译linux内核和uboot。当配置buildroot,使能linux内核和uboot之后buildroot都会手动下载最新的linux内核和uboot源码并编译。并且我们通常都不会使用buildroot下载的linux内核和uboot,由于buildroot下载的linux和uboot官方源码,上面会缺乏好多驱动文件,但是最新的linux内核和uboot会对编译器版本号有要求,可能造成编译失败。为此我们须要配置buildroot,关掉linux内核和uboot的编译,只使用buildroot来建立根文件系统,首先是严禁Linux内核的编译,配置如下:
-> Kernel
-> [ ] Linux Kernel //不要选择编译 Linux Kernel 选项!
接着严禁编译Uboot,配置如下:
-> Bootloaders
-> [ ] U-Boot //不要选择编译 U-Boot 选项!
6、配置Targetpackages
此选项用于配置要选择的第三方库或软件、比如alsa-utils、ffmpeg、iperf、ftp、ssh等工具,可以按需选择。
配置完成之后就可以编译buildroot了,编译完成之后buildroot都会生成编译下来的根文件系统压缩包手把手教你构建自己的linux系统,我们可以直接使用。输入如下命令开始编译:
sudo make //注意,一定要加 sudo,而且不能通过-jx 来指定多核编译!!!
buildroot编译过程会很历时,请耐心等待!编译完成之后才会在buildroot-2019.02.6/output/images下生成根文件系统,即可使用。
编译过程须要一定的额外显存,注意须要留好显存,否则会报错如下:
g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report
buildroot下的busybox配置
buildroot在建立根文件系统的时侯也是要用到busybox的,既然用到了busybox这么就涉及到busybox的配置。buildroot会手动下载busybox压缩包,buildroot下载的源码压缩包都储存在/dl目录下,在dl目录下就有一个称作“busybox”的文件夹,此目录下保存着busybox压缩包。
在buildroot下打开busybox的配置界面输入如下命令:
sudo make busybox-menuconfig
输入之后才会打开buildroot下的busybox配置界面,须要哪些功能,使能即可。可以在busybox中更改文件,使其对英文支持,这一点可以百度设置。
编译完毕之后,会生成rootfs.tar,拷贝下来之后,可以对其进行解压之后使用nfs挂载到板子上,或则直接使用SD卡烧写。编译下来的文件系统即可使用,假如须要哪些命令和工具,在makemenuconfig中使能再度编译即可。
教你用buildroot建立根文件系统|《Linux就该如此学》()