移植busybox構建最小根檔案系統

2022-08-11 06:45:09 字數 4936 閱讀 8972

busybox:瑞士軍刀,裡面裝有很多小命令。

step 1:構建目錄結構

建立根檔案系統目錄,主要包括以下目錄

/dev  /etc /lib  /usr  /var /proc /tmp /home /root /mnt /bin  /sbin  /sys 

#mkdir     /home/rootfs

#cd        /home/rootfs

#mkdir  dev  etc  lib  usr  var  proc  tmp  home  root  mnt   sys

step 2:    使用busybox構建/bin /sbin linuxrc

進入busybox-1.16.1目錄,執行

#make defconfig

#make menuconfig

busybox setting ----->

build options -----> 

//1選擇將busybox進行靜態編譯 

[*]build busybox as a static binary (no shared libs) 

//2.指定交叉編譯器為 

(/usr/local/arm/4.3.2/bin/arm-linux-)cross compiler prefix

installation options -----> (選擇生成的檔案存放目錄,也可以直接放在rootfs下就不用拷貝了)

//3.選擇上 don』t use /usr 

busybox library tuning---> 

[*]username completion 

[*]fancy shell prompts 

[*]query  cursor  position  from  terminal 

//4.編譯出的busybox的shell命令直譯器支援顯示當前路徑及主機資訊

儲存退出

#make   

#make install

在busybox目錄下會看見 _install目錄,裡面有/bin /sbin linuxrc三個檔案

將這三個目錄或檔案拷到第一步所建的rootfs資料夾下。

#cp bin/ sbin/ linuxrc /home/rootfs -ra 

切記一定要帶上-a的引數,因為bin目錄裡大部分都是鏈結,如果不帶-a的引數,拷過去之後會做相應的複製,不再是鏈結的形式

step 3  構建etc目錄:(主要有etc/inittab檔案 、etc/init.d/rcs、etc/fstab)

1)進入根檔案系統rootfs的etc目錄,執行如下操作:

拷貝busybox-1.16.1/examples/bootfloopy/etc/* 到當前目錄下

#cp –r busybox-1.16.1/examples/bootfloopy/etc/*  rootfs/etc

修改inittab,(根據它建立其他子程序)

原始檔案為:

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

2 ::respawn:-/bin/sh

3 tty2::askfirst:-/bin/sh

4 ::ctrlaltdel:/bin/umount -a -r

修改後為:

---(1):開機免登陸,直接開啟shell(前面數字為行號)         

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

2 #::respawn:-/bin/sh

3 #::respawn:-/bin/login

4 console::askfirst:-/bin/sh

5 #tty2::askfirst:-/bin/sh

6 ::ctrlaltdel:/bin/umount -a -r

---(2):開機需要登陸(前面數字為行號)         

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

2 #::respawn:-/bin/sh

3 ::respawn:-/bin/login

4 #console::askfirst:-/bin/sh

5 #tty2::askfirst:-/bin/sh

6 ::ctrlaltdel:/bin/umount -a -r

2)拷貝虛擬機器上的/etc/passwd, /etc/group, /etc/shadow到rootfs/etc下

# cp /etc/passwd   rootfs/etc

# cp /etc/group    rootfs/etc 

# cp /etc/shadow   roofs/etc

對以下三個檔案修改,只儲存與root相關的項,根據具體情況內容會有所不同。

修改passwd為root:x:0:0:root:/root:/bin/sh,即只儲存與root相關項,而且最後改成/bin/ash。

修改group為root:x:0:root

修改shadow為root:$1$x9yv1wlb$abj2v9joloc9xw/y0qwps.:14034:0:99999:7:::

登陸開發板時需輸入使用者名稱密碼,同虛擬機器相同

3)修改profile

path=/bin:/sbin:/usr/bin:/usr/sbin          //可執行程式 環境變數

export ld_library_path=/lib:/usr/lib        //動態鏈結庫 環境變數

/bin/hostname osee

user="`id -un`"

logname=$user

hostname='/bin/hostname'

ps1='[\u@\h \w]# '                          //顯示主機名、當前路徑等資訊:

4)修改 etc/init.d/rc.s檔案(新增自動執行命令)#!/bin/sh

/bin/mount -n -t ramfs ramfs /var  

/bin/mount -n -t ramfs ramfs /tmp

/bin/mount -n -t sysfs none /sys

/bin/mount -n -t ramfs none /dev

/bin/mkdir /var/tmp

/bin/mkdir /var/modules

/bin/mkdir /var/run

/bin/mkdir /var/log

/bin/mkdir -p /dev/pts                    //telnet服務需要

/bin/mkdir -p /dev/shm                    //telnet服務需要

#echo /sbin/mdev > /proc/sys/kernel/hotplug//usb自動掛載需要

/sbin/mdev -s         //啟動mdev在/dev下自動建立裝置檔案節點

/bin/mount -a    

#######配置網路################################

/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0

/sbin/ifconfig eth0 192.168.1.70

/sbin/ifconfig eth0 netmask 255.255.255.0

/sbin/route add default gw 192.168.1.1 eth0

/sbin/ifconfig eth1 192.168.1.71 netmask 255.255.255.0

/sbin/route add default gw 192.168.1.1 eth1

5)修改etc/fstab檔案,增加以下檔案      掛載proc tmpfs檔案系統

#device     mount-point type   options              dump fsck order

none   /dev/pts    devpts   mode=0622      0 0

tmpfs  /dev/shm    tmpfs    defaults       0 0

proc    /proc       proc     defaults  0   0

step 4 構建lib目錄:

(~/at91/x-tools/arm-zch-linux-gnueabi/arm-zch-linux-gnueabi/sysroot/lib我的只是把這個目錄下的so檔案複製就可以了)

1)#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

將以下動態庫拷貝到rootfs/lib下

#cp  *so*  roofs/lib  -a

2)#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib

將以下動態庫拷貝到rootfs/lib下 

#cp ./libstdc++.so.*  rootfs/lib  -a

step 5 構建lmdev目錄:

方法1:靜態建立裝置檔案cat  /proc/devices

mknod console  c 5 1

mknod null c 1 3

mknod ttysac0 c 204 64

mknod mtdblock0 b 31 0

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

確保核心設定config_sysfs config_tmpfs

在核心啟動時,自動執行mdev

修改etc/fstab來自動掛載根檔案系統 修改etc/init.d/rcs加入自動執行的命令。

用busybox構建乙個最小根檔案系統

p 用busybox 構建乙個最小根檔案系統 15年4月4月23月23日23日日15 11 30 一 乙個最小根檔案系統包括 1 dev console dev null 2 init busybox 3 etc inittab 4 配置檔案制定的程式 5 c庫 二 下面寫步驟 1 解壓配置 bus...

使用Busybox構造cramfs根檔案系統

使用busybox構造cramfs根檔案系統 11.1 busybox 如果系統中沒有 mkcramfs mkcramfs 壓縮工具。本檔案系統使用 busybox 1.10.1 cramfs 1.1 壓縮檔案 busybox 1.10.1.tar.bz2 cramfs 1.1.tar.gz。22....

busybox安裝根檔案系統

1.交叉編譯busybox make arch arm cross compile arm linux config prefix work rootfs install 2.移植lib庫 安裝glibc cp usr local arm 4.3.2 arm none linux gnueabi l...