通过Buildroot自制根文件系统
前言
根文件系統(tǒng)是Linux內(nèi)核啟動(dòng)之后讀取的一個(gè)文件系統(tǒng),并從這個(gè)文件系統(tǒng)中加載第一個(gè)init應(yīng)用程序并啟動(dòng),就是Linux上俗稱的root進(jìn)程、根進(jìn)程
制作它的方式有很多,例如busybox、yocto,但是這兩個(gè)方式有缺點(diǎn),第一個(gè)是busybox太精簡(jiǎn)了,不足以滿足最新版Linux內(nèi)核運(yùn)行時(shí)所需的目錄結(jié)構(gòu),而Yocto比較龐大,Buildroot是最合適的選擇,它基于Busybox來(lái)構(gòu)建根文件系統(tǒng),Buildroot完善了busybox目錄結(jié)構(gòu),并且支持創(chuàng)建用戶,如果使用busybox需要我們自己來(lái)手動(dòng)構(gòu)建目錄結(jié)構(gòu)與文件體系
因?yàn)樾掳鍸inux內(nèi)核啟動(dòng)時(shí)不單單只是需要文件系統(tǒng)里存在幾個(gè)目錄,還需要有system v的一些服務(wù),目前4.x版本用的是systemD,如果你對(duì)內(nèi)核沒有足夠的了解的情況下最好還是使用這些構(gòu)建工具幫助我們來(lái)創(chuàng)建,否則你創(chuàng)建的根文件系統(tǒng)很可能無(wú)法引導(dǎo)Linux,就算引導(dǎo)起來(lái)了可能也會(huì)因?yàn)槿笔承┪募鴮?dǎo)致無(wú)法正常工作。
當(dāng)然你也可以通過(guò)copy某些發(fā)行版的Linux文件結(jié)構(gòu)到你的根文件系統(tǒng)下,不過(guò)最好還是使用一些構(gòu)建工具來(lái)完成,例如你創(chuàng)建用戶的話是需要使用Linux的加密程序與了解Linux用戶存儲(chǔ)結(jié)構(gòu)才能創(chuàng)建用戶。
制作根文件系統(tǒng)純粹就是在通過(guò)文件形式來(lái)構(gòu)造一個(gè)Linux系統(tǒng),為內(nèi)核提供用戶態(tài)的體系
Buildroot與Yocto一樣,它也是用來(lái)構(gòu)建Linux嵌入式系統(tǒng)的,但與Yocto不同的是,它比較迷你、小巧,但缺點(diǎn)是移植包比較少,大多數(shù)情況下需要我們自己來(lái)移植包,用來(lái)構(gòu)建一些小型Linux嵌入式系統(tǒng)比較方便,但如果真正想制作成類型Ubuntu那樣的發(fā)行版還是需要使用Yocto和Debian
Buildroot是使用make來(lái)管理項(xiàng)目,通過(guò)make menuconfig來(lái)控制構(gòu)建哪些項(xiàng)目,同時(shí)它也是需要從互聯(lián)網(wǎng)下載所需tools的,但是不同的是它不會(huì)向Yocto那樣需要個(gè)七八十G的內(nèi)存,所以Buildroot是比較小巧的項(xiàng)目,但可以通過(guò)基于Buildroot來(lái)定制化你自己的構(gòu)建項(xiàng)目。
獲取源碼
官網(wǎng)下載地址:https://buildroot.org/
github下載地址:https://github.com/buildroot/buildroot
開始制作
將源代碼下載下來(lái)之后,Buildroot移植Linux內(nèi)核上的menuconfig,使用與Linux一樣的配置命令:make menuconfig進(jìn)入配置界面來(lái)對(duì)它進(jìn)行配置
首先選擇Target options,然后根據(jù)你板子的信息配置一下,下面是我的配置內(nèi)容:
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然后選擇Toolchian
Toolchain-> Toolchain type = External toolchain //使用用戶自己的編譯器-> Toolchain = Custom toolchain //使用自定義工具鏈-> Toolchain origin = Pre-installed toolchain //預(yù)裝的編譯器-> Toolchain path = /home/zhihao/arm/bin //編譯器絕對(duì)路徑-> Toolchain prefix = $(ARCH)-linux-gnueabihf //編譯器前綴-> External toolchain gcc version = 8.x //編譯器版本,需要與你編譯器版本對(duì)上-> External toolchain kernel headers series = 4.1.x //外部工具鏈內(nèi)核標(biāo)頭,你可以在編譯器arm-buildroot-linux-gnueabihf/sysroot/usr/include/linux/version.h目錄下找到它的值,是十六進(jìn)制的,需要轉(zhuǎn)換-> External toolchain C library = glibc/eglibc //選擇嵌入式gcc庫(kù)-> [*] Toolchain has SSP support? (NEW) //選中-> [*] Toolchain has RPC support? (NEW) //選中-> [*] Toolchain has C++ support? //選中-> [*] Enable MMU support (NEW) //選中然后在選擇System configuration
System configuration-> System hostname = Jasonangel //平臺(tái)名字,自行設(shè)置-> System banner = Welcome to xxxxx //歡迎語(yǔ)-> Init system = BusyBox //使用 busybox-> /dev management = Dynamic using devtmpfs + mdev //使用 mdev-> [*] Enable root login with password (NEW) //使能登錄密碼-> Root password = 123456 //登錄密碼為 123456最后在配置文件系統(tǒng)格式
-> 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最后在將內(nèi)核、bootload關(guān)掉,只編譯根文件系統(tǒng)
-> Kernel-> [ ] Linux Kernel //不要選擇編譯 Linux Kernel 選項(xiàng)!-> Bootloaders-> [ ] U-Boot //不要選擇編譯 U-Boot 選項(xiàng)!如果你想配置第三方庫(kù),可以選擇Target packages
在這個(gè)里面你可以選擇opencv、ffmpeg這些庫(kù),buildroot會(huì)自動(dòng)編譯到根文件系統(tǒng)lib目錄下
配置完成之后直接make即可開始編譯
make在make期間可能會(huì)出現(xiàn)下載404的問(wèn)題
或者一直卡在下載處Time out的問(wèn)題,這個(gè)原因是因?yàn)锽uildroot里的鏈接可能失效了,又或者你無(wú)法科學(xué)上網(wǎng)的原因?qū)е碌?/span>
有兩種解決方案,你可以先跟著報(bào)錯(cuò)包的名字到github上去找release版本或者去官網(wǎng)找,找到下載地址以后進(jìn)入到package目錄下,然后進(jìn)入到包名字的目錄,里面有一個(gè)包名字.mk的文件,打開它可以看到如下內(nèi)容:
PKGCONF_VERSION = 1.6.3 PKGCONF_SITE = https://github.com/pkgconf/pkgconf/archive/refs/tags PKGCONF_SOURCE = pkgconf-$(PKGCONF_VERSION).tar.gz PKGCONF_LICENSE = pkgconf license PKGCONF_LICENSE_FILES = COPYING PKGCONF_CPE_ID_VENDOR = pkgconfPKG_CONFIG_HOST_BINARY = $(HOST_DIR)/bin/pkg-config將PKGCONF_SITE修改為你找到可用的地址就可用了,Buildroot會(huì)把PKGCONF_VERSION 、PKGCONF_SITE 、PKGCONF_SOURCE 組成一個(gè)完整的下載鏈接,注意仔細(xì)分割
如果你修改了名字,還需要修改pkgconf.hash里的名字
第二種方法就是在dl目錄下創(chuàng)建一個(gè)包名字的目錄,然后把包下載下來(lái)放進(jìn)去就可以了,需要注意,包的版本名字壓縮方式都需要與報(bào)錯(cuò)的名字一致
當(dāng)下載完成之后幾秒鐘就完成了根文件系統(tǒng)的制作,根文件系統(tǒng)會(huì)輸出到output目錄下為rootfs.tar文件
同時(shí)如果你想修改busybox可以使用如下命令來(lái)設(shè)置
sudo make busybox-menuconfig總結(jié)
以上是生活随笔為你收集整理的通过Buildroot自制根文件系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: this指针的作用和用法
- 下一篇: 各种门禁系统接线详细图解(含中控)