天天看點

FL2440根檔案系統的制作(完整版)

核心版本: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

繼續閱讀