linux學習筆記:搭建第一個最簡單的根文件系統

搭建根文件系統需要準備哪些東西?

一、根文件系統需要第一個應用程序

內核啓動後的第一個程序負責配置其他的程序

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,這個默認不選取,但是很有用

建議勾選tab

  • 配置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這個來燒寫新的文件系統了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章