構建Linux根檔案系統

2021-07-11 10:44:58 字數 4177 閱讀 7399

**:七天不吃飯三天不喝水,天天做題的傢伙:

構建linux根檔案系統:

第一步:移植安裝busybox——unix命令集合。

見上個檔案。

第二步:使用glibc庫:

安裝lib庫檔案:

開發板上只需要載入器和動態庫:

<1>安裝載入器

在/usr/local/arm/arm-none-linux-gnueabi/arm-none-linux-gnueabi/libc/lib目錄下找到兩個檔案

ld-2.8.so         //動態程式啟動前,被用來載入動態鏈結庫

ld-linux.so.3       -> ld-2.8.so

<2>安裝動態庫 

/*編譯動態庫時會用到動態庫,但不會鏈結他們,執行時才鏈結*/

首先:

檢視需要那些動態庫:

在資料夾下面:/home/luoyuntian/middle/install/bin 檢查busybox的依賴關係

檢視以來關係的方式:

#arm-none-linux-gnueabi-readelf -a /home/luoyuntian/middle/install/bin/busybox | grep "shated"

libc.so.6 

libcrypt.so.1    

libm.so.6 

然後:

到交叉編譯器libc檔案的目錄:/usr/local/arm/arm-none-linux-gnueabi/arm-none-linux-gnueabi/libc/lib

拷貝到/home/luoyuntian/middle/install/lib/目錄下(但是拷貝的方式必須是這樣的要帶屬性的拷貝過去):

cp  $(copyfile)  ~/lib/ -a

最後:在/home/luoyuntian/middle/install/lib/下 用#ll 命令檢視上一步拷貝的幾個檔案所指向的檔案

libc.so.6         -> libc-2.8.so

libcrypt.so.1         -> libcrypt-2.8.so

libm.so.6         -> libm-2.8.so

/* 說明:

libc-2.8.so         //動態標準c庫

libm-2.8.so         //動態數學庫

libcrypt-2.8.so     //加密庫

*/第三步:構建根檔案系統

1、構建etc目錄

init程序根據/etc/inittab 檔案來建立其他子程序:比如呼叫指令碼檔案配置ip位址、掛在其他檔案系統,最後啟動shell等。

<1>、建立etc/inittab檔案

# /etc/inittab

::sysinit:/etc/init.d/rcs      //執行指令碼配置ip位址

ttysac0::askfirst:~/bin/sh    //串列埠上啟動shell命令

::ctrlaltdel:/sbin/reboot    //重啟命令

::shutdown:/bin/umount -a -r    //在關機的時候解除安裝所有的掛載

<2>、建立etc/init.d/rcs檔案

# !bin/sh            //表示這是乙個指令碼檔案,執行時使用/bin/sh解析

ifconfig eth0 192.168.0.8    //板子的ip

mount -a            //掛接/etc/fatab檔案指定的所有檔案系統

建立完成後,要改變它的屬性,使它能夠執行

#chmod +x etc/init.d/rcs

<3>、建立etc/fstab檔案

內容如下,表示執行「mount -a」後將掛接在proc、tmpfs檔案系統

# device    mount-point    type    option        dump    fsck order

proc        /proc        proc    defaults    0    0

tmpfs        /tmp        tmpfs    defaults    0    0

2、構建dev目錄

使用兩種方法構建dev系統。

方法1:靜態建立裝置檔案(節點)

從系統啟動過程可知,涉及的裝置有:/dev/mtdblock*(mtd)(mtd塊裝置),/dev/ttysac*(串列埠裝置)、/dev/console、/devnull,只要建立以下裝置就可以啟動系統。

在dev目錄下:

#mknod console c 5 1

#mknod null c 1 3

#mknod ttysac0 c 204 64

方法2:使用mdev建立裝置檔案

/*通過讀取核心資訊來建立裝置檔案的*/

#mount -t tmpfs mdev /dev    //使用核心檔案系統,減少對flash的讀寫

#mkdir /dev/pts            //dev/pts用來支援外部網路鏈結(telnet)的虛擬終端

#mount -t devpts devpts /dev/pts

#mount -t sysfs sysfs /sys    //mdev通過sysfs檔案系統獲得裝置資訊

#echo /bin/mdev>/proc/sys/kernel/hotplug    //設定核心,當有裝置插拔時呼叫/bin/mdev程式

#mdev -s             //在/dev目錄下生成核心支援的所有裝置的節點

要在核心啟動時,自動執行mdev。需要修改兩個檔案:etc/fstab來自動掛載檔案系統、修改etc/init.d/rcs加入自動執行命令。

1:etc/fstab

# device        mount-point     type    option          dump    fsck order

proc            /proc           proc    defaults        0       0

tmpfs           /tmp            tmpfs   defaults        0       0    //提高速度,減小磨損

sysfs        /sys        sysfs    defaults    0    0    //告訴mdev有那些裝置檔案的操作

tmpfs        /dev        tmpfs    defaults    0    0    //防止熱插拔時減少磨損

2:etc/init.d/rcs

# !bin/sh                       //表示這是乙個指令碼檔案,執行時使用/bin/sh解析

ifconfig eth0 192.168.0.8       //板子的ip

mount -a                        //掛接/etc/fatab檔案指定的所有檔案系統

mkdir /dev/pts

mount -t devpts devpts /dev/pts

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

mdev -s

需要注意的是:開發板上通過mdev生成的/dev目錄中,s3c2410的串列埠名是s3c2410_serial 0。需要修改etc/inittab檔案。

修改前:

ttysac0::askfirst:~bin/sh

修改後:

s3c2410_serial0::askfirst:~/bin/sh

另外,mdev是通過init程序來啟動的,在使用mdev構造/dev目錄之前,init程序至少要用到裝置檔案/dev/console、/dev/null,所要建立這兩個裝置檔案。

在構造的系統根目錄下:

#mkdir -p /dev

在dev目錄下:

#mknod console c 5 1

#mknod null c 1 3

3、構建其他目錄

其他目錄可以為空,

在構建的跟資料夾下:

#mkdir proc mnt tmp sys root usr

構建根檔案系統

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...