搭建根文件系統需要準備哪些東西?
一、根文件系統需要第一個應用程序
busybox集成了init,爲了得到這個busybox程序作爲根文件系統的init,所以我們需要對busybox進行編譯安裝
二、內核啓動第一個應用程序的過程
1、確定標準輸入、標準輸出、標準錯誤設備
- 內核的init/main.c的756行,打開了dev/console 作爲標準輸入、標準輸出、標準錯誤設備。
所以我們需要在根文件系統創建dev/console作爲標準輸入、標準輸出、標準錯誤設備
2、尋找init程序(busybox的init)
- 內核首先根據ramdisk_execute_command變量來尋找指定的init程序,
- 如果沒有指定,那麼會嘗試依次執行sbin/init,etc/init,bin/init,bin/sh。如果都不存在則啓動失敗。
3、busybox init啓動流程
- 首先會檢查dev/console是否可以作爲標準輸入、標準輸出、標準錯誤設備,如果不能,就會使用dev/null作爲標準輸入、標準輸出、標準錯誤設備。
所以我們需要在根文件系統創建dev/null
-
然後會讀取etc/inittab文件,讀取其中的命令來執行
所以我們需要在根文件系統創建etc/inittab,並在裏面創建需要初始化的進程 -
ps:如果沒有etc/inittab文件,系統就會執行默認的inittab條目
-
我們在etc/inittab輸入console
三、根文件系統會用到C函數庫
所以我們需要在根文件系統創建lib目錄,並在裏面複製一份C函數庫
開始搭建根文件系統
一、總結,搭建根文件系統需要些什麼?
1、我們需要編譯安裝busybox
2、需要dev/console與dev/null作爲標準輸入、標準輸出。標準錯誤設備
3、需要etc/inittab來指定初始化進程
4、需要建立lib
二、編譯安裝busybox步驟
1、make menuconfig
-
找到busybox源碼,複製到交叉編譯環境下的linux系統 解壓後執行make menuconfig
-
期間可能會因爲make版本的問題導致一些錯誤,可以通過百度搜索自行解決,一般只要稍微修改busybox主makefile就可以解決。
-
在make menuconfig中,對busybox的編譯選項進行配置
-
tab completion,這個默認不選取,但是很有用
- 配置cross compiler(交叉編譯器 )爲arm-linux- ,低版本的busybox的menuconfig可能沒有這個選項,可以通過修改主makefile 來指定交叉編譯器。
2、執行make與make CONFIG_PREFIX=安裝目錄 install
執行make,
然後執行make CONFIG_PREFIX=安裝目錄 install
ps :千萬不能直接執行make install,否則會破壞原有linux系統
ps:後面添加的dev、etc、lib文件夾都在dir_path下
三、創建設備console和null
- mkdir dev創建dev目錄
- cd dev 進入dev目錄
- 查看一下console和null的主次設備號:ls /dev/console /dev/null -l
得知console的主設備號爲5,次設備號爲1;null的主設備號爲1,次設備號爲3。 - 然後執行
-mknod console c 5 1
mknod null c 1 3 - 創建設備console和null完成,但還需inittab配置文件來讓console生效
四、創建inittab配置文件
- mkdir etc
cd etc - vi inittab
- 加入console::askfirst:-/bin/sh
使這個shell的標準輸入,標準輸出,標準錯誤都指向這個console - 加入::sysinit:/etc/init.d/rcS
這是一個腳本文件,可以在裏面配置加入想要開機自動執行的命令 - 創建/init.d/rcS文件
給rcS添加可執行權限:chmod +x /init.d/rcS
五、配置glibc庫
- 使用,cp .so /lib -d ,複製庫到自己的lib目錄下
使根文件系統成爲可燒寫的映像文件
一、根據開發板來選擇系統映像文件格式
falsh頁地址小於2k的選擇yaffs格式,falsh頁地址大於等於2k的選擇yaffs2格式。
我們選擇yaffs2格式。
二、獲取到mkyaffs2image工具
1、下載安裝包yaffs_source_util_larger_small_page_nand.tar.bz2
- 下載地址:
鏈接:https://pan.baidu.com/s/1MluqjVEUCEbW6yYfD5j0hw
提取碼:j69l
2、解壓、編譯、燒錄
-
tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2
cd Development_util_ok
cd yaffs2/
cd utils/ -
進入工具目錄後:make 。生成我們需要的mkyaffs2image。
-
將它複製:cp mkyaffs2image /usr/local/bin/。
-
並給它可執行權限:chmod +x /usr/local/bin/mkyaffs2image。
-
再次進入我們創建的根文件目錄,利用mkyaffs2image生成可燒寫的根文件系統:mkyaffs2image 目錄地址 xxx.yaffs2
-
這樣就得到了可燒寫的映像文件:xxx.yaffs2
-
在uboot中,,就可以使用xxx.yaffs2這個來燒寫新的文件系統了