使用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 郵件格式頭和內容之間一定要有空行...