rootfs 制作


最小 根文件系統 

(1)/dev/console(終端控制台, 提供標准輸入、標准輸出以及標准錯誤)

    /dev/null (表示空設備終端, 所有寫到這個文件中的數據都會被丟棄掉。)

(2)init進程的程序(也就是busybox,因為init程序位於busybox中,已經完成)

(3)/etc/inittab(用於init進程讀取配置, 然后執行inittab里的指定應用程序)

(4)應用程序(被inittab配置文件調用的應用程序)

(5)C庫(glibc,被應用程序調用的C庫函數,比如:printf,strcmp,fopen等)

注:以下操作均是在/home目錄下操作,實操前請注意修改path

1、創建終端文件(/dev/console 和 /dev/null)

  mkdir first_fs;cd  first_fs

  1.1查看pc /dev/console 和 /dev/null  

  ls /dev/console /dev/null -al
  crw------- 1 root root 5, 1 Feb 21 18:53 /dev/console
  crw-rw-rw- 1 root root 1, 3 Feb 12 22:08 /dev/null

  1.2參照pc 創建字符設備/dev/console 和 /dev/null

  mkdir dev;cd dev

  sudo mknod console c 5 1    //創建console字符設備, 5:主設備號 1:次設備號

  sudo mknod null c 1 3    //創建null 字符設備

  cd -

  

2、busybox已做好,所以init進程的程序也就做好了

3、構造/etc/inittab

  mkdir etc

  touch etc/inittab

  vi  etc/inittab

  輸入

  console::askfirst:-/bin/sh      //action值必須小寫  id可以寫成/dev/xx或xx

  表示action= askfirst(每次啟動/bin/sh進程之前等待用戶按下enter鍵),然后指定/bin/sh的終端對應/dev/console字符設備

   

4、應用程序

  因為是最小根文件系統,所以用戶程序可以先不制作。

5、安裝 glibc lib(cross  compile lib)

  mkdir lib

  cd /home/gcc-3.4.5-glibc-2.3.6/arm-linux/lib     //進入源目錄

  cp *.so* /home/first_fs/lib -d //復制glibc庫到lib目錄(*:匹配符,-d:保持鏈接)

6、完善系統(內核虛擬文件系統proc制作)

  它是通過proc虛擬文件系統掛接到proc目錄,然后當前進程的信息會以文件的形式保存到proc目錄

  以ps命令為例:

  mkdir proc                    //創建proc目錄

  6.1 inittab配置文件中追加內容,避免手動mount掛載proc

  方法1:

  在inittab里追加內容:

  ::sysinit:/etc/init.d/rcS                  //將/etc/init.d/rcS腳本設置成系統的初始化文件

  

  創建etc/init.d/rcS文件

  mkdir -p etc/init.d

  vi etc/init.d/rcS              //添加一行命令(也可以添加其它命令)

  mount -t proc none /proc              //掛載proc(前提根文件系統有proc目錄)

  sudo chmod +x etc/init.d/rcS                   //加上可執行權限使腳本rcS能夠執行命令 

  

  方法2:

  除了使用在rcS中添加mount -t proc non /proc命令 

  也可以用mount -a  作用是加載文件/etc/fstab中配置的所有設備

  它會依賴一個配置文件/etc/fstab

  在inittab里追加內容:

  ::sysinit:/etc/init.d/rcS                  //將/etc/init.d/rcS腳本設置成系統的初始化文件

  

  創建etc/init.d/rcS文件

  mkdir -p etc/init.d

  vi etc/init.d/rcS, 添加一行命令

  mount -a      //加載文件/etc/fstab中配置的所有設備

  

  創建fstab文件

  vi  etc/fstab

  輸入內容:

  #device mount-point type options dump fsck order
  proc /proc proc defaults 0 0

  

 7、完善系統——使用udev自動在/dev下創建設備節點

  在dev下只有2個字符設備(/dev/console /dev/null),如果大量增加設備的話,手動創建太麻煩,可以使用udev 自動創建/dev/設備節點。

  busybox 中mdev 是udev的一個迷你版, 它主要的功能是管理/dev目錄底下的設備節點。它同時也是用來接替devfs及熱插拔的功能

  7.1 創建sysfs、devpts要掛載的目錄

  mkdir   sys                     //創建sysfs要掛載的目錄

  7.2、vi  etc /fstab,添加sysfs、tmpfs掛載內容:

  sysfs /sys sysfs defaults 0 0
  tmpfs /dev tmpfs defaults 0 0

  

  7.3  vi etc/init.d/rcS, 追加熱拔插命令和配置/dev設備,添加內容如下:

  mount -a
  mkdir /dev/pts
  mount -t devpts devpts /dev/pts
  echo /sbin/mdev > /proc/sys/kernel/hotplug
  mdev -s

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM