承接前篇,我們的linux內核終於製作好了,也順利的加載起來了,但是由於沒有根文件系統,所以說加載到最後,是無法進入系統的。而本節內容則是講解如何來製作根文件系統的。
BuildRoot創建根文件系統
由於BuildRoot工具可以構建linux的根文件系統,而且其配置項內部集成了很多我們常用的工具,所以今天它就是我們的主角。在開始之前,我們需要確保機器上安裝了編譯所需要的的依賴,如下:
apt-get install linux-headers-$(uname -r)
此命令可以檢測我們機器上缺少的一些依賴,當然,在編譯過程中,我們肯定還需要安裝一些其他的依賴,到時候在編譯過程中,出現什麼依賴錯誤,我們就利用apt install命令安裝缺少的組件就行了。
之後開始下載我們的BuildRoot組件:
wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz tar xvf buildroot-2017.08.tar.gz cd buildroot-2017.08/ make menuconfig
menuconfig配置
打開menuconfig後,我們可以看到本次編譯需要設置的選項,都列在這裏了,針對以下幾個選項,我們可以進行設置以下,畫框的部分需要注意:
Target options選項:
Tool chain選項,使用內置交叉編譯鏈,出問題概率小:
System configuration配置如下,注意設置密碼:
其他的就沒什麼了,大家可以翻閱其他選項,安裝一些自己需要安裝的組件即可。
make編譯
保存menuconfig之後,在根目錄位置輸入如下命令開始製作:
make
需要提醒的是,整個構建過程非常長,大概需要2小時的樣子,而且在編譯過程中,需要下載很多組件,這裏有一些常用的組件列表,我們把其解壓到BuildRoot根目錄下的dl目錄中,由於在編譯過程中,linux內核等也需要下載,但是下載地址非常慢:
https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.10.tar.xz https://downloads.uclibc-ng.org/releases/1.0.26/uClibc-ng-1.0.26.tar.xz
一個是linux內核文件,一個是依賴包,我們可以用迅雷等工具下載好,然後把下載好的包也放到dl目錄即可。就可以免去編譯的時候下載耗費的時間了。
在編譯過程中,一般會遇到如下問題:
Please port gnulib freadahead.c to your platform! 問題
此問題目前已經有解決方法了,可以點擊這裏查看,具體解決方案就是,按照圖示進入進入buildroot/output/build/host-m4.1.4.17文件夾,然後執行如下命令即可:
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
而其他一些問題,基本上都是組件缺少的問題,利用apt install命令可以搞定。
漫長的等待之後,到這個界面,就說明編譯成功了:
我們此時可以進入output/images目錄中,就可以看到rootfs.tar文件在那裏了。
文件燒寫
由於之前我們只做好了第二分區,也就是/dev/sdb2,此時我們就可以將我們的根文件系統燒寫進我們的tf卡了。
插上我們的usb讀卡器,由於sdb2沒法直接訪問,所以我們需要掛載,整體需要執行如下命令:
sudo mkdir /mnt/sdb2 //創建一個臨時目錄 sudo mount /dev/sdb2 /mnt/sdb2 //將sdb2掛載到此臨時目錄 sudo cp rootfs.tar /mnt/sdb2 //拷貝到sdb2中,此時sdb2中已經能看到跟文件 sudo tar -xf rootfs.tar //進入目錄並解壓 sudo rm rootfs.tar //刪掉tar sudo sync sudo umount /dev/sdb2
這樣,重新插拔一次usb讀卡器,我們就可以看到文件拷貝進來了。
然後將卡插回荔枝派nano,連接電腦,打開minicom,可以看到串口輸出信息如下:
參考資料:
根文件系統編譯 — 荔枝派Nano 全流程指南 documentation (lichee.pro)