使用Busybox構造cramfs根檔案系統

2021-06-04 12:52:13 字數 3600 閱讀 6006

使用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.解壓檔案:

tar jxvf busybox-1.10.1.tar.bz2

tar zxvf cramfs-1.1.tar.gz

2、進入解包之後生成

cramfs-1.1

目錄,執行編譯命令:

make

編譯完成之後,會生成

mkcramfs

和cramfsck

兩個工具,其中mkcramfs

工具是用來建立

cramfs

檔案系統的,而cramfsck

工具則用來進行

cramfs

檔案系統的釋放以及檢查。如果該目錄下已有這兩個可執行程式,則無需編譯,直接使用。

3.修改makefile檔案以

arm板為例,開啟

makefile

檔案,找到

arch?=

和cross_compile?=

兩項,修改為

arch ?= arm

cross_compile ?=arm-linux- //arm-linux-

為交叉編譯器在環境變數中的目錄字首,視自己交叉編譯環境而定。

4.進入解壓後的

busybox-1.10.1

目錄,執行

make menuconfig

或make gconfig

進行配置。

在進行配置時有幾項需要注意: ø

build options

->

build busybox as a static binary (no shared libs)

force nommu build

build shared libbusybox

build with large file support (for accessing file>2gb)

如果選擇

build busybox as a static binary (no shared libs)

方式進行編譯時,所需的庫已經與程式靜態地鏈結在一起,這些程式不需要額外的庫就可以單獨執行,但是自己編寫的程式在檔案系統上執行必須採用靜態編譯,否則會報諸如:

bin/sh: hello :not found

的錯誤。

靜態編譯如:

arm-linux-gcc–static hello.c –o hello

如果選擇

build shared libbusybox

方式進行編譯時,要將交叉編譯的動態庫或符號鏈結複製到對應的目錄中,否則程式不能執行。同時在配置時應去掉

build shared libbusybox

目錄下的兩項:如下 

build shared libbusybox

->

produceadditional busybox binary linked against libbusybox

同時去掉

build with large file support (for accessing file>2gb)

否則編譯會報錯。 ø

一定要勾選上如下配置:

init utilities

—>

(*) init

(*) supporting reading an inittab file//

支技init

程序讀取

/etc/inittab

配置檔案。

(*) supporting running commands with controlling-tty//

使busybox

在真實的串列埠裝置中執行命令列,不使用可能會報類似與:sh:

can』t access tty

:job control turned off

的錯誤。

其它基本可按預設配置。

5.執行make

編譯完成後執行

make install

則在busybox-1.10.1

目錄下有

_install

這個目錄,這正是我們想要的。

66. _install

目錄下已經有三個包含應用程式的目錄:

bin、

sbin

、usr

和指令碼linuxrc

,注意此

linuxrc

不要隨便換掉,就用此

linuxrc。

在此_install

目錄下建立其它幾個需要的目錄,如下

mkdir etc dev proc tmp lib var sys

7.轉到

dev目錄下建立裝置節點

mknod ram0 b 1 0

mknod-m 660 console c 51

mknod-m 660 null c 1 3

mknod-m 660 zero c 1 3

mknod-m 666 ttysac0 c 204 64

8.編寫指令碼,這一點很重要,沒寫好或指令碼有錯誤,檔案系統都起不來。

轉到etc

目錄,編寫

inittab

指令碼,內容如下:

# startup the system

null::sysinit: /bin/mount –o remount,rw/

null::sysinit: /bin/mount –t procproc /proc

null::sysinit: /bin/mount –a

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

ttysac0::respawn: /bin/sh

9.編寫掛載表

fstab

proc/proc proc defaults 0 0

sysfs/sys sysfs defaults 0 0

none/dev/pts devpts mod=0622 0 0

tmpfs/dev/shm tmpfs defaults 0 0

10.在

etc下建立目錄

init.d

cd init.d

建立指令碼

rcs

內容如下: #

!/bin/sh

儲存,並修改

rcs的許可權,否則會出現

cannot run 『/etc/init.d/rcs』:permission denied

的錯誤:

chmod775 rcs

1111.

生成檔案系統映像。

11、./mkcramfs _install rootfs.cramfs

至此,檔案系統製作完畢。

使用busybox的crond服務

crond是乙個服務,乙個守護程序。crond 是linux用來定期執行程式的命令,crond命令每分鐘會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。crontab是用來讓使用者在固定時間或固定間隔執行程式之用,換句話說,也就是類似使用者的時程表。按照網上查詢的資料執行時經常會...

busybox使用中的問題

我現在使用的rootfs是從ti官網down下來的編譯好的busybox v1.00 pre8。使用中遇到問題如下 1.提示can t access tty.job control turned off 每次啟動都有這個提示,也不知道有什麼壞處。這是busybox的官方說明 我沒修改核心,直接改 r...

busybox中sendmail命令使用

1 busybox 只支援sendmail命令傳送郵件,暫不支援mail命令 mail呼叫sendmail命令傳送郵件 2 sendmail用法 cat mail.txt subject test cc to to 163.com from from 163.com 郵件格式頭和內容之間一定要有空行...