當使用Busybox-1.2.0制作根文件系統
交叉編譯器為3.3.2
make-3.8.1
STEP?1:
創建根文件系統目錄,主要包括以下目錄/bin,/etc,/dev,/mnt,/sbin,/usr。
STEP?2:
升級make到3.81版本,用RH9自己帶的make?3.79會出錯
進入make-3.81目錄,執行:#?./configure????#?make???#make?install
會把make安裝到/usr/local/bin目錄下,要使新make立即生效,要設置環境變量
PATH=/usr/local/bin:$PATH。設置完成后,就可以編譯Busybox了。
STEP?3:
進入busybox-1.2.0目錄,執行#?make?defconfig
執行#?make?menuconfig
Busybox?Setting?----->?Build?Options----->
選擇上Build?BusyBox?as?a?static?binary?(no?shared?libs)
Do?you?want?to?build?BusyBox?with?a?Cross?Compiler?
指定交叉編譯器為
(/usr/local/arm/3.3.2/bin/arm-linux-)Cross?Compiler?prefix
Installation?Options?----->
選擇上?Don’t?use?/usr
設置Busybox?installation?prefix為../rootfs即安裝目錄.
在Shells中,選擇Choose?your?default?shell為ash.
保存退出
STEP?4:
#?make????#?make?install
STEP5:
編譯tinylogin-1.4。進入tinylogin-1.4目錄,修改Makefile文件如下:
DOSTATIC?=?true
USE_SYSTEM_PWD_GRP?=?false
USE_SYSTEM_SHADOW?=?false
CROSS?=?/usr/local/arm/3.3.2/bin/arm-linux-
STEP?6:
執行#?make?PREFIX=../rootfs?install
STEP?7:
進入根文件系統rootfs的etc目錄,執行如下操作:
拷貝Busybox-1.2.0/examples/bootfloopy/etc/*到當前目錄下。
#?cp?–r?../../busybox-1.2.0/examples/bootfloopy/etc/*?./
拷貝/etc/passwd,?/etc/group,?/etc/shadow到當前目錄下。
#?cp?/etc/passwd?./
#?cp?/etc/group?./
#?cp?/etc/shadow?./
修改inittab,把第二項改為::respawn:-/bin/login
修改profile,加入PATH環境變量:exportPATH=/bin:/sbin:/usr/bin:/usr/sbin
對以下三個文件修改,只保存與root相關的項,根據具體情況內容會有所不同。
修改passwd為root:x:0:0:root:/root:/bin/sh,即只保存與root相關項,而且最后改成/bin/sh。
修改group為root:x:0:root
修改shadow為root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::
STEP?8:
制作cramfs鏡像,下載到實驗箱上就可以引導起來了。
#?mkcramfs?rootfs?rootfs.cramfs
用BusyBox-1.1.3制作根文件系統
cross-2.95.3
STEP?1:
#?mkdir?rootfs
#?cd?rootfs
#mkdir?bin?dev?etc?home?lib?mnt?proc?sbin?sys?tmp?root?usr
#mkdir?mnt/etc
#mkdir?usr/bin?usr/lib?usr/sbin
STEP?2:
進入BusyBox解壓后的目錄,配置BusyBox
#?make?menuconfig
Busybox?Settings?>
General?Configuration?>
[*]?Support?for?devfs
Build?Options?>
[*]?Build?BusyBox?as?a?static?binary?(no?shared?libs)
/*將busybox編譯為靜態連接,少了啟動時找動態庫的麻煩*/
[*]?Do?you?want?to?build?BusyBox?with?a?Cross?Compiler?
(/usr/local/arm/2.95.3/bin/arm-linux-)Cross?Compiler?prefix
/*指定交叉編譯工具路徑*/
Init?Utilities?>
[*]?init
[*]?Support?reading?an?inittab?file
/*支持init讀取/etc/inittab配置文件,一定要選上*/
Shells?>
Choose?your?default?shell?(ash)?>
Coreutils?>
[*]?cp
[*]?cat
[*]?ls
[*]?mkdir
[*]?echo?(basic?SuSv3?version?taking?no?options)
[*]?env
[*]?mv
[*]?pwd
[*]?rm
[*]?touch
Editors?>
[*]?vi
Linux?System?Utilities?>
[*]?mount
[*]?Support?mounting?NFS?file?systems
[*]?umount
[*]?Support?loopback?mounts
[*]?Support?for?the?old?/etc/mtab?file
Networking?Utilities?>
[*]?inetd
/*
*支持inetd超級服務器
*?inetd的配置文件為/etc/inetd.conf文件,
*/
#?make?TARGET_ARCH=arm?CROSS=arm-linux-\
PREFIX=../rootfs/?all?install
//執行上面的命令會把相關文件安裝到我們的根文件系統rootfs
編譯過程中若出現如果出現找不到內核版本號的編譯錯誤(如:編譯libb/loop.c時提示找不到?linux/version.h?文件,也可以拷貝3.3.2交叉編譯器下的version.h文件。),可以把內核源碼中的version.h文件拷貝到交叉編譯器的包含文件的linux目錄下。另外也可以用3.3.2交叉編譯器,但是要修改loop.c內容,把#include的路徑寫為#includesys-include/linux/version.h
#?mkcramfs?rootfs?rootfs.cramfs
將rootfs.cramfs燒寫到實驗箱.運行即可啟動.