構建自己的根檔案系統

2021-07-12 03:42:37 字數 4402 閱讀 7444

說明:本篇文章是筆者自己用的,可以參考,由於環境不同,所以可能讀者不是太理解。

根檔案系統的命令都是busybox的連線命令比如執行ls與執行  busybox ls 是同樣的效果

一、 最小根檔案系統:

1  /dev/console     /dev/null

2  init程式  ,**於busybox

3 /etc/inittab

4  配置檔案中制定的程式

5  c庫

二、配置、編譯、安裝busybox

1  在makefile中修改cross中加上一句arm-linux-

2  makemenuconfig   進行配置

3 make 進行編譯

4 make install (千萬不能直接執行makeinstall,因為現在是交叉編譯,會破壞電腦檔案系統)

需要先新建乙個資料夾,然後安裝在新建的資料夾中,命令為:

make config_prefix=新建的資料夾(/work/…) install

在busybox檔案下的install檔案下有說明

三、構造根檔案系統

1  首先檢視一下pc機上的/dev/目錄下的console和null是什麼東西,執行命令

ls /dev/console  /dev/null –l  出現如下資訊

crw------- 1 root root 5, 1 2016-02-1210:04 /dev/console

crw-rw-rw- 1 root root 1, 3 2016-02-1209:32 /dev/null

說明console和null都是為字元裝置,上面還有其主副裝置號

根據這個,我們在自己的資料夾下新建乙個dev檔案,在該資料夾下新建兩個裝置節點

執行命令:  

mkdir dev   

cd dev  

sudo mknod console  c  5  1

sudo mknod null  c  1  3

2  etc/inittab     構造inittab,如果不構造就會有預設的配置項 ,建立etc目錄,在etc目錄下建立inittab檔案

mkdir  etc

vietc/inittab

3 c庫

建立lib目錄,將pc機上的/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib目錄下的庫檔案拷貝到我們新建的lib目錄下,命令最後加乙個-d是為了讓連線依然為連線,不讓其拷貝,如果拷貝的話會讓根檔案系統變得很大。

cp *.so* /work/nfs_root/my_first_fs/lib -d

通過二、三兩步就建立好了我們的最小根檔案系統,下面就是將我們自己建立的最小根檔案系統做成映象檔案(yaffs(小葉(每頁512位元組)的nand)、yaffs2(大頁(每頁2048位元組)nand)、jffs2等)

1 在/work/system/目錄下有個檔案yaffs_source_util_larger_small_page_nand.tar.bz2,該檔案就是製作映像檔案的工具。

2  將該檔案解壓就會得到development_util_ok資料夾,該資料夾下含有兩個資料夾:yaffs   yaffs2

3  進入到yaffs2中,然後進入utils資料夾下,ls該資料夾,出現以下檔案

makefile mkyaffs2image.c mkyaffsimage.c  nand_ecc.c  yaffs_packedtags1.c

4  然後在utils資料夾下執行make就會編譯出很多任務具,其中包括mkyaffs2image,我們要用到的工具就是mkyaffs2image

5  將mkyaffs2image檔案拷貝到pc及的系統目錄中,並將該檔案加上可執行屬性

sudo  cp  mkyaffs2image /usr/local/bin/

sudo  chmod  +x /usr/local/bin/mkyaffs2image

其中chmod命令是用來改變許可權的格式為

chmod  +[許可權代號] 檔案

其中許可權代號r可讀、w可寫、x可執行

6 返回到製作好的根檔案系統資料夾,執行製作映像檔案命令即可製作映像檔案

可以先執行以下mkyaffs2image看以下呼叫該工具的格式

mkyaffs2image  my_first_fs my_first_fs.yaffs2

注:將某個工具拷貝到pc記得系統目錄usr/local/bin/中,該工具就可以當成命令使用了

7  將我們製作好的額最小根檔案系統裝載到開發板上

8  完善根檔案系統,建立proc目錄   mkdir /proc

將proc目錄,核心提供了乙個虛擬的檔案系統  mount -t proc none /proc

這樣做的話是手工掛載,如果不想手工掛載的話,就在etc/inittab中新增配置項

在rcs檔案中編輯如

mount -t proc none /proc

然後在加乙個可執行的屬性  sudo chmod +x /etc/init.d/rcs最後編譯成映像檔案

在rcs中運用mount –a  ,然後在/etc下建立fstab檔案,fstab格式為:

#device   mount-point(掛載點)   type option   dump   fack   order

proc      /proc                proc   0     0

etc 目錄下有init.d(資料夾)    inittab    fatab,  init.d資料夾下放著rcs檔案

inittab的內容如下:

console::askfirst:-/bin/sh

::sysinit:/etc/init.d/rcs

rcs的內容如下:

#mount -t proc none /proc

mount –a

fstab的內容:

#device  mount-point   type    option     dump   fsck   order  

proc     /proc         proc    defaults      0     0

9udev機制:自動建立dev目錄下的裝置節點,在busybox中以後個udev的簡化版mdev

在busybox-1.7.0\docs目錄下有個mdev.txt檔案,裡面有教程

here'sa typical code snippet from the init script:

[1]mount -t sysfs sysfs /sys

[2]echo /bin/mdev > /proc/sys/kernel/hotplug

[3]mdev -s

ofcourse, a more "full" setup would entail executing this before theprevious

codesnippet:

[4]mount -t tmpfs mdev /dev

[5]mkdir /dev/pts

[6]mount -t devpts devpts /dev/pts

a   安裝虛擬檔案系統,在fstab中新增如下內容

#device  mount-point   type    option     dump   fsck   order  

proc     /proc         proc    defaults      0     0

sysfs      /sys          sysfs     defaults     0     0

tmpfs     /dev          tpfs     defsults      0    0

b   在rcs檔案中加入內容

mkdir/dev/pts

mount-t devpts devpts /dev/pts

echo/bin/mdev > /proc/sys/kernel/hotplug

mdev-s

構建根檔案系統

wget make defconfig make cross compile arm linux gnueabi make install編譯完install後會預設安裝在busybox原始碼目錄下 install目錄內,但是此檔案系統並不完整,只有四個目錄 root ls bin linuxrc ...

構建根檔案系統

wget make defconfig make cross compile arm linux gnueabi make install編譯完install後會預設安裝在busybox原始碼目錄下 install目錄內,但是此檔案系統並不完整,只有四個目錄 root ls bin linuxrc ...

構建根檔案系統

tar xjf busybox 1.7.0.tar.bz2 cd busybox 1.7.0 make menuconfig 編譯busybox 1.7.0出現如下錯誤 busybox 1.7.0 make menuconfig makefile 405 mixed implicit and nor...