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->
Producebinary for each applet,linked against 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
至此,文件系統制作完畢。