核心版本:linux-2.6.28.7
交叉編譯器版本:arm-linux-gcc4.1.2
作業系統平台:linux(要用選上eabi支援) red hat 企業版5
開發闆平台:arm fl2440
使用的工具:busybox-1.15.2.tar.bz2
提示:fl2440根檔案系統的制作網上已經有很多例子,但是你發現沒有,你按照他們的做法你有可能還是實作不了,我做了兩方面的改進,
一是建立裝置節點的時候要多加兩項
#mknod s3c2410_serial0 c 204 64
#mknod ttys0 c 4 0
二是把passwd檔案中的第一行:root:x:0:0:root:/root:/bin/bash中的/bin/bash,改成/bin/sh
其餘的基本和其他的一樣,busybox編譯過程中常見的錯誤在下篇文章中講解。
步驟為:
一、準備制作
建立根檔案系統目錄,主要包括以下目錄:/bin、/etc、/dev、/home、/lib、/mnt、/opt、/proc、
/root、/sbin、/sys、/tmp、/usr、/var。
建一個名為rootfs的檔案夾
在該檔案夾下建立上述目錄
#mkdir bin etc dev ……………
二、編譯 busybox
擷取busybox1.15.2源碼,在http://www.busybox.net/downloads/找到busybox-1.15.2.tar.bz2這個
壓縮包,下載下傳,解壓:
#tar xjvf busybox-1.15.2
進入源碼目錄,修改makefile
cross_compile = arm-linux-
arch = arm
執行#makemenuconfig進行配置busybox
配置選項大部分都是保持預設的,隻需要注意選擇以下這幾個選項,其他的選項都不用動:
busybox setting --->
build options --->
· build busybox as a static binary(no shared libs)
· build with large file support (for accessing files > 2gb)
installation options --->
選擇上不用usr
(./_install) busybox installation prefix <—進入這個選項,輸入busybox的安裝路徑,
如:../yaffs
busybox library tuning --->
· vi-style line editing commands
· fancy shell prompts<—要選擇這個選項:“fancy shell prompts”,否則挂載文
件系統後,無法正常顯示指令提示符:“[\u@\h \w]#”
配置完後,執行#make make install,然後就會在上一級目錄下生成rootfs檔案夾,裡面包含幾個
檔案夾/bin、/sbin、/usr、linuxrc。把這些檔案全部複制到剛建好的rootfs目錄下。
#cp –rf * ../rootfs
三、制作檔案系統
在dev目錄下,建立兩個裝置節點:
#mknod console c 5 1
#mknod null c 1 3
由于後面會顯示不能打開
can't open /dev/s3c2410_serial0: no such file or directory
can't open /dev/ttys0: no such file or directory
(是以這兒還要建立兩個裝置節點)
#mknod s3c2410_serial0 c 204 64
#mknod ttys0 c 4 0
進入etc目錄,添加檔案:
(1)拷貝busybox-1.15.2/examples/bootfloopy/etc/*到目前目錄下。
# cp-r../../busybox-1.15.2/examples/bootfloopy/etc/*./
包括的檔案:fstab、init.d、inittab、profile
(2)拷貝/etc/passwd、/etc/group、/etc/shadow到目前目錄下。
# cp/etc/passwd./
# cp/etc/group./
# cp/etc/shadow./
把passwd檔案中的第一行:root:x:0:0:root:/root:/bin/bash中的/bin/bash,改成/bin/sh,因為檔案
系統的bin目錄下沒有bash這個指令,而是用ash代替bash,是以在用使用者名密碼登入的時候(如
telnet),會出現“cannot run /bin/bash: no such fileor directory”的錯誤。
(3)修改inittab檔案:
内容如下:
console::sysinit:/etc/init.d/rcs
ttys0::respawn:-/bin/sh
s3c2410_serial0::askfirst:-/bin/sh
:: once:/usr/sbin/telnetd-l/bin/login
:: ctrlaltdel:/bin/umount-a-r
(4)修改fstab檔案,内容如下:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
var /dev tmpfs defaults 0 0
(5)修改init.d/rcs檔案,内容如下:
#!/bin/sh
path=/bin:/sbin:/usr/bin:/usr/sbin
runlevel=s
prevlevel=n
umask022
exportpathrunlevelprevlevel
mount-a
mkdir/dev/pts
mount-tdevptsdevpts/dev/pts
echo/sbin/mdev>/proc/sys/kernel/hotplug
mdev-s
mkdir-p/var/lock
/bin/hostname-f/etc/sysconfig/hostname
(6)修改profile檔案,内容如下:
# ashprofile
# vim:syntax=sh
# nocorefilesbydefault
#ulimit-s-c0>/dev/null2>&1
user="`id-un`"
logname=$user
ps1='[\u@\h\w]# '
path=$path
hostname=`/bin/hostname`
echo" processing/etc/profile... "
echo"done"
exportuserlognameps1path
(7)建立sysconfig檔案夾,在裡面建立hostname檔案,内容為:fl2440
(8)拷貝庫檔案:
進入lib目錄,拷貝交叉編譯器的庫檔案到lib目錄下
#cp-f-a/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib/*.so*./
由于交叉編譯器的庫檔案比較多,體積較大,是以需要裁剪一下庫檔案,隻保留常用的庫文
件。
#cp mkyaffs2image /usr/bin
制作檔案系統鏡像:
#mkyaffs2image root_2.6.33 root_2.6.33.bin
root_2.6.33.bin就是yaffs2檔案系統鏡像,要先修改它的權限,否則該檔案無法被複制:
#chmod777root_2.6.33.bin
把root_2.6.33.bin下載下傳到nandflash中的檔案系統分區中,如果檔案系統能正常挂載,終端會列印出:
please press enter to activate this console. <—按回車
processing /etc/profile...
done