嵌入式Linux構建yaffs根文件系統

嵌入式Linux構建yaffs根文件系統

開發環境說明:


(一)編譯busybox

解壓並進入:

tar xvf busybox-1.13.0.tar.bz2
cd busybox-1.13.0

加載默認配置:

make defconfig

打開圖形配置:

make menuconfig

使用靜態編譯並且指明交叉編譯器:

 Busybox Settings  ---> 
		Build Options  ---> 
			[*] Build BusyBox as a static binary (no shared libs)  # 指明使用靜態編譯
			(arm-linux-) Cross Compiler prefix  # 指明交叉編譯器
		Busybox Library Tuning  ---> 
			[*] Username completion  # 控制檯顯示完整用戶名
			[*] Fancy shell prompts  # shell信息提示
Networking Utilities  --->
	[ ] ip tunnel  # 關閉ip隧道,要不然編譯會出錯

編譯並安裝:

make && make install

編譯完成並安裝後在當前目錄下的_install文件夾。

(二)構建yaffs2文件系統

創建yaffs2文件系統目錄:

mkdir yaffs2
cd yaffs2

創建文件系統所需的一級目錄:

mkdir dev etc home lib mnt opt proc root sys tmp var usr

創建必要的二級目錄:

mkdir usr/lib usr/share etc/rc.d var/lib var/lock var/run var/tmp

拷貝busybx相關文件:

cp -rf /opt/embeded/busybox-1.13.0/_install/* ./

拷貝庫文件:

cp /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* ./lib/ -a

拷貝主機etc目錄下的必要文件:

cp /etc/passwd /etc/group /etc/shadow ./etc

拷貝busybox的示例配置文件:

cp /opt/embeded/busybox-1.13.0/examples/bootfloppy/etc/* ./etc/ -rf

在etc目錄下創建用於支持熱拔插設備的節點配置文件mdev.conf

touch etc/mdev.conf

創建兩個設備節點文件。
①由於內核執行到mdev時還沒有構建dev目錄,如果沒有創建/dev/console就會打印警告Warning: unable to open an initial console;②內核啓動過程中會將一些垃圾信息丟棄,此時就需要/dev/null設備。

mknod dev/console c 5 1
mknod dev/null c 1 3

系統啓動過程中的必要配置文件修改:
系統啓動過程中bootloader會傳遞參數 init=/linuxrc給內核main函數,所以在文件系統掛載後第一個執行的程序是linuxrc,該文件是busybox的鏈接文件,也就說系統啓動掛載文件系統後執行的第一個程序是busybox,busybox首先解析文件/etc/inittab,這個文件指明瞭接下來要啓動哪些程序。

修改文件etc/initab:

該文件初始內容如下:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

文件內容說明:inittab文件中每一個條目用來定義一個子進程,並確定他的啓動方法。
第一條帶有sysinit字段,表示系統啓動後最先執行rcS文件並且只執行一次。
第二條帶有respawn字段,表示直接運行-/bin/sh,無需輸入用戶名和密碼
第三條帶有askfirst字段,表示init進程先輸出‘Please press Enter to actvie this console’,等待用戶輸入回車後在啓動-/bin/sh,tty2是/dev目錄下的串口設備文件,需要根據實際進行修改。
第四條表示按下快捷鍵ctrl+alt+delete時卸載所有設備

注意:第二條和第三條只能任選其一。

我們將該文件改爲:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
# ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

解析完畢inittcb文件後,接下來就是運行/etc/init.d/rcS這個腳本文件了,修改該文件如下:

#!/bin/sh

# shell命令的搜索路徑
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# 運行等級是單用戶模式
runlevel=S

# 前一個等級爲N表示沒有前一個級別
prevlevel=N

# 權限位掩碼
umask 022

# 將以上設置導出到環境中
export PATH runlevel prevlevel

# 指明瞭在shell中的提示符:[root@tq2440/]#
/bin/hostname tq2440

# 將文件/etc/fstab中指明的文件系統掛載到對應掛載點上
mount -a

# 如果目錄pts不存在則創建
mkdir -p /dev/pts

# 從內存掛載一個虛擬的文件系統,作用是可以瞭解目前遠程虛擬終端(telnet,ssh等)的基本情況
mount -t devpts devpts /dev/pts

# 使用mdev處理內核的熱拔插事件
echo /sbin/mdev > /proc/sys/kernel/hotplug

# 建立dev目錄,掃描/sys/class和/sys/block下所有塊設備目錄,如果在掃描到設備文件含有dev且文件中包含的時設備號,利用這些信息在/dev目錄下創建設備節點文件
mdev -s

# 更新環境變量
source /etc/profile

修改/etc/mdev.conf文件內容如下:

sd[a-z]*[0-9]		0:0	0660	@(mount -t vfat -o iocharset=cp936 /dev/$MDEV /mnt/udisk)
sd[a-z]*[0-9]		0:0	0660	*(umount /mnt/udisk)
mmcblk[0-9]*p[0-9]	0:0	0660	@(mount -t vfat -o iocharset=cp936 /dev/$MDEV /mnt/sd)
mmcblk[0-9]*p[0-9]	0:0	0660	*(umount /mnt/sd)

修改/etc/fstab文件內容如下:

#device		mount-point	type	options		dump	fsck order
proc		/proc		proc	defaults		0	0
none        /tmp        ramfs   defaults        0   0
sysfs		/sys		sysfs	defaults		0	0
mdev		/dev		ramfs	defaults		0	0

修改/etc/profle文件內容如下:

# /etc/profile: system-wide .profile file for the Bourne shells

echo
echo -n "Processing /etc/profile... "

# 這條命令的意思是設置core文件大小爲0,輸出信息以及錯誤信息都不輸出在顯示器上。
#ulimit -S -c 0 > /dev/null 2>&1

# 獲取用戶名
USER="`id -un`"

# 登陸顯示名
LOGNAME=$USER

# 在shell下的顯示格式[root@tq2440 /]# 
PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "

# 加載環境變量
PATH=$PATH

# 主機名
HOSTNAME=`/bin/hostname`

# 導出到環境變量
export USER LOGNAME PS1 PATH

echo "Done"
echo

在用戶登陸時系統會在/etc下尋找三個文件:passwd、shadow、group用來匹配相關信息。

修改/etc/passwd,只保留root、daemon和bin這三行:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

修改/etc/shadow,只保留root、daemon和bin這三行:

root:$6$EfJ5aZ0U$7GfeBkv0vfZj2pIQhoxc1HEpObTI2IA0jo57DJLIQkCNMkIsxbCKSXlr5Utnyp58uN70i.dN41J7kQb/fXsck/:17850:0:99999:7:::
daemon:*:16273:0:99999:7:::
bin:*:16273:0:99999:7:::

修改/etc/group,只保留root、daemon和bin這三行:

root:x:0:
daemon:x:1:
bin:x:2:

到此根文件系統yaffs2製作完畢!

使用如下命令創建文件系統鏡像:

mkyaffs2image yaffs2 yaffs2.bin

然後下載到NAND存放文件系統所在的分區就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章