一孤澎、簡(jiǎn)介
Buildroot是Linux平臺(tái)上一個(gè)構(gòu)建嵌入式Linux系統(tǒng)的框架棘钞。整個(gè)Buildroot是由Makefile腳本和Kconfig配置文件構(gòu)成的谨敛。本文使用buildroot為freescale imx287 開發(fā)板制作根文件系統(tǒng)跨嘉。
參考 https://www.cnblogs.com/kele-dad/p/8231434.html
1.buildroot目錄說明
.
├── arch: 目錄存放CPU架構(gòu)相關(guān)的配置腳本尊蚁,如arm/mips/x86 亡笑,這些CPU相關(guān)的配置,在制作工具鏈横朋,編譯boot和內(nèi)核時(shí)很關(guān)鍵仑乌。
├── board:存放了一些默認(rèn)開發(fā)板的配置補(bǔ)丁之類的
├── boot
├── CHANGES
├── Config.in
├── Config.in.legacy
├── configs: 放置開發(fā)板的一些配置參數(shù).
├── COPYING
├── DEVELOPERS
├── dl: 存放下載的源代碼及應(yīng)用軟件的壓縮包.
├── docs: 存放相關(guān)的參考文檔.
├── fs: 放各種文件系統(tǒng)的源代碼.
├── linux: 存放著Linux kernel的自動(dòng)構(gòu)建腳本.
├── Makefile
├── Makefile.legacy
├── output: 是編譯出來的輸出文件夾.
│ ├── build: 存放解壓後的各種軟件包編譯完成後的現(xiàn)場(chǎng).
│ ├── host: 存放著製作好的編譯工具鏈,如gcc琴锭、arm-linux-gcc等工具.
│ ├── images: 存放著編譯好的uboot.bin, zImage, rootfs等鏡像文件晰甚,可燒寫到板子裏, 讓linux系統(tǒng)跑起來.
│ ├── staging
│ └── target: 用來製作rootfs文件系統(tǒng),裏面放著Linux系統(tǒng)基本的目錄結(jié)構(gòu)决帖,以及編譯好的應(yīng)用庫和bin可執(zhí)行文件. (buildroot根據(jù)用戶配置把.ko .so .bin文件安裝到對(duì)應(yīng)的目錄下去厕九,根據(jù)用戶的配置安裝指定位置)
├── package:下面放著應(yīng)用軟件的配置文件,每個(gè)應(yīng)用軟件的配置文件有Config.in和soft_name.mk地回。
├── README
├── support
├── system:這里就是根目錄的主要骨架和相關(guān)的啟動(dòng)初始化配置,當(dāng)制作根目錄時(shí)就是將此處的文件cp到output里去.然后再安裝toolchain的動(dòng)態(tài)庫和你勾選的package的可執(zhí)行文件之類的.
└── toolchain
2.buildroot工作原理
Buildroot本身提供構(gòu)建流程的框架扁远,開發(fā)者按照格式寫腳本俊鱼,提供必要的構(gòu)建細(xì)節(jié),配置整個(gè)系統(tǒng)畅买,最后自動(dòng)構(gòu)建出你的系統(tǒng)并闲。
- buildroot的編譯流程是先從dl/xxx.tar下解壓出源碼到output/build/xxx, 然后它利用本身的配置文件(如果有的話)覆蓋output/build/xxx下的配置文件,在開始編譯連接完成后安裝到output/相應(yīng)文件夾下.
- Buildroot提供了函數(shù)框架和變量命令框架,采用它的框架編寫的app_pkg.mk這種Makefile格式的自動(dòng)構(gòu)建腳本谷羞,將被package/pkg-generic.mk 這個(gè)核心腳本展開填充到buildroot主目錄下的Makefile中去帝火。
- package/pkg-generic.mk中通過調(diào)用同目錄下的pkg-download.mk、pkg-utils.mk文件湃缎,已經(jīng)幫你自動(dòng)實(shí)現(xiàn)了下載犀填、解壓、依賴包下載編譯等一系列機(jī)械化的流程雁歌。你只要需要按照格式寫Makefile腳app_pkg.mk宏浩,填充下載地址,鏈接依賴庫的名字等一些特有的構(gòu)建細(xì)節(jié)即可靠瞎。
3.iMX287開發(fā)板硬件說明
1.主板外觀及基本接口分布
?2.硬件資源
二比庄、構(gòu)建步驟
1.下載buildroot
git clone git://git.busybox.net/buildroot
2.配置buildroot
查看buildroot包含的開發(fā)板配置
make list-defconfigs
選擇imx28默認(rèn)配置
cd buildroot
make freescale_imx28evk_defconfig
進(jìn)入menuconfig逐項(xiàng)配置
make menuconfig
-
Target options(目標(biāo)配置)
- Target Architecture:目標(biāo)架構(gòu),這里選擇 ARM(little endian)乏盐,ARM小端模式
- Target Binary Format:二進(jìn)制格式佳窑,為 ELF
- Target Architecture Variant:架構(gòu)變體為 arm920t,內(nèi)核類型
- Target ABI:應(yīng)用程序二進(jìn)制接口父能,為EABI
- Floating point strategy:浮點(diǎn)數(shù)的策略神凑,選擇為 Soft float
- ARM instruction set:arm 匯編指令集,選擇 ARM
-
Build options(編譯選項(xiàng))
對(duì)編譯過程進(jìn)行一些設(shè)置何吝,通常用默認(rèn)設(shè)置即可溉委。
-
Toolchain(工具鏈)
使用內(nèi)部工具鏈。
也可以手動(dòng)選擇Kernel Header版本和外部工具鏈爱榕。
注意:實(shí)際測(cè)試發(fā)現(xiàn)瓣喊,根文件系統(tǒng)與內(nèi)核使用不同版本的交叉工具鏈編譯,得到的根文件系統(tǒng)鏡像文件也可以與內(nèi)核鏡像搭配運(yùn)行黔酥。
-
System configuration(系統(tǒng)配置)
對(duì)目標(biāo)系統(tǒng)進(jìn)行配置藻三,包括主機(jī)名稱(System hostname)、歡迎旗標(biāo)(System banner)跪者、初始化系統(tǒng)(Init system)棵帽、設(shè)備管理方式(/dev management)、登錄方式和 Shell 等渣玲。
“Run a gretty after root”需要根據(jù)硬件進(jìn)行設(shè)置逗概,必須與系統(tǒng)調(diào)試串口對(duì)應(yīng)。 EasyARM28x 使用默認(rèn)的 console 即可忘衍。
-
kernel和bootloaders配置
內(nèi)核定制裁剪以及 Bootloader 的定制仗谆,建議獨(dú)立管理指巡, Kernel 和 Bootloaders 這兩項(xiàng)留空即可。
-
Target Packages(軟件包)
Buildroot 提供了海量軟件包可選隶垮,只需在配置界面選中所需要的軟件包藻雪,交叉編譯后即可使用。
Busybox是必選狸吞。
-
Filesystems images(文件系統(tǒng)鏡像選擇)
可以設(shè)置生成的文件系統(tǒng)鏡像類型 勉耀,如.tar、cpio蹋偏、ext2/3/4便斥、 jffs2、 yaffs2 和 ubifs 等多種方式 威始。
如果要生成ubifs枢纠,需要知道芯片邏輯擦除塊大小、最小IO單元(頁大欣杼摹)晋渺、可用物理擦除塊數(shù)量(PEB)∨д叮可以在uboot環(huán)境下木西,執(zhí)行如下命令得知:
> mtpart default > ubi part rootfs
3.編譯buildroot
make
編譯完成,在 output 目錄下可以得到生成的文件系統(tǒng)和鏡像文件
$ ls output/
build host images staging target
在images目錄下有燒錄鏡像文件
4.完善文件系統(tǒng)
1)增加/dev/null 文件
Buildroot 編譯后随静,生成的文件系統(tǒng)中通常沒有/dev/null 文件八千,而系統(tǒng)啟動(dòng)通常是需要的,可以自行創(chuàng)建:
cd output/target/dev/
sudo mknod null c 1 3
2)增加/dev/console文件
對(duì)應(yīng)于System configuration-“Run a gretty after root”選擇的調(diào)試端口
cd output/target/dev/
sudo mknod console c 5 1
3)再次編譯builtroot
make
三燎猛、使用根文件系統(tǒng)
將生成的rootfs.tar.bz2文件或rootfs.ubifs文件燒錄到處理器恋捆,進(jìn)入系統(tǒng)后即可以通過shell命令操作,已有的shell命令參考o(jì)utput/bin/目錄下的鏈接文件重绷。
開機(jī)成功進(jìn)入根文件系統(tǒng)
1.登錄
因?yàn)樵赟ystem configuration中把root passwd設(shè)置為root沸停,所以用戶名和密碼都是root。
2.系統(tǒng)信息查看
- 查看內(nèi)核版本:cat /proc/version
- 查看內(nèi)存使用:free
- 查看磁盤使用:df -m
- 查看CPU信息:cat /proc/cpuinfo
3.網(wǎng)絡(luò)設(shè)置
修改IP地址:ifconfig eth0 192.168.181.251
設(shè)置默認(rèn)網(wǎng)關(guān):route add default gw 192.168.181.1
設(shè)置子網(wǎng)掩碼:ifconfig eth0 netmask 255.255.255.0
設(shè)置廣播地址:ifconfig eth0 broadcast 192.168.181.225
修改mac地址:ifconfig eth0 hw ether 00:11:22:33:44:55
-
設(shè)置DNS:vi /etc/resolv.conf 修改后保存 #設(shè)置好DNS才能解析域名
nameserver 8.8.8.8 #修改成你的主DNS nameserver 8.8.4.4 #修改成你的備用DNS search localhost #你的域名
開機(jī)自動(dòng)設(shè)置網(wǎng)絡(luò)參數(shù):vi /etc/rc.d/init.d/start_userapp 將上述命令加入文件中
-
關(guān)閉/開啟網(wǎng)關(guān):
- fconfig eth0 down
- ifconfig eth0 up
設(shè)置動(dòng)態(tài)獲取ip地址:udhcpc #重啟后無效
外網(wǎng)ping測(cè)試:ping www.baidu.com