如果開(kāi)發(fā)板只有Nand Flash,那么選擇最合適的文件系統(tǒng)為YAFFS文件系統(tǒng)。mini2440 只有 Nand Flash 沒(méi)有 Nor Flash,因此選擇的文件系統(tǒng)為 YAFFS2 文件系統(tǒng)。
1.制作文件系統(tǒng)時(shí)準(zhǔn)備的源代碼
關(guān)于內(nèi)核源代碼和交叉編譯器,讀者可以根據(jù)自己的實(shí)際情況選擇具體的對(duì)應(yīng)版本, yaffs2.tar.gz 源碼是必需的。
2.解壓源碼
解壓內(nèi)核源碼和交叉編譯器的源碼,并將 yaffs2.tar.gz 復(fù)制到內(nèi)核源碼的 fs 目錄下進(jìn)行解壓。如果是第一次使用交叉編譯器,那么應(yīng)該在環(huán)境變量中添加交叉編譯器的路徑或者在/etc/profile 中添加交叉編譯器路徑,并重新啟動(dòng)計(jì)算機(jī)。文件/etc/profile 中的交叉編譯 器的設(shè)置,例如:
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/arm/4.3.2/bin
fi
3.修改內(nèi)核頂層Makefile
在 Makefile 中設(shè)置目標(biāo)平臺(tái)為 arm,交叉編譯器為 arm-linux。
# vi Makefile
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改為
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-
4.修改機(jī)器碼
在 vivi 啟動(dòng)時(shí)如果機(jī)器碼與設(shè)置的不一致會(huì)出現(xiàn)提示,在文件 arch/arm/tools/mach-types
中進(jìn)行下面的修改。
# vi arch/arm/tools/mach-types
s3c2440 ARCH_S3C2440 S3C2440 362
修改為
s3c2440 ARCH_S3C2440 S3C2440 782
5.修改時(shí)鐘頻率
修改 arch/arm/mach-s3c2440/mach-smdk2440.c 中的時(shí)鐘為 12MHz,具體修改如下:
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
//s3c24xx_init_clocks(16934400);
s3c24xx_init_clocks(12000000);//將頻率設(shè)置為 12MHz
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
6.使內(nèi)核支持YAFFS2
解壓 yaffs2.tar.gz 后進(jìn)入 YAFFS2 目錄,在 YAFFS2 目錄下有可執(zhí)行文件 patch-ker.sh,
執(zhí)行如下命令:
# ./patch-ker.sh c /usr/local/arm/linux-2.6.29.6
執(zhí)行該命令后,就會(huì)在 fs 的 Kconfig 和 Makefile 中增加對(duì) YAFFS2 的編譯選項(xiàng)的支持。
在 fs/Kconfig 會(huì)自動(dòng)添加:
# Patched by YAFFS
source "fs/yaffs2/Kconfig"
在 fs/Makefile 中會(huì)自動(dòng)添加:
# Patched by YAFFS
obj-$(CONFIG_YAFFS_FS) += yaffs2/
注意:這兩部分內(nèi)容也可以進(jìn)行手動(dòng)添加。添加的目的是在內(nèi)核的文件系統(tǒng)選項(xiàng)中增加 對(duì) YAFFS2 的支持選項(xiàng)。
回到內(nèi)核的一級(jí)目錄下運(yùn)行 make menuconfig,對(duì)內(nèi)核進(jìn)行配置,配置中多了對(duì) YAFFS2 文件系統(tǒng)支持的選項(xiàng)。進(jìn)入內(nèi)核配置界面后,依次選擇命令 File systems ---> Miscellaneous filesystems --->,進(jìn)入 Miscellaneous filesystems 配置窗口,選擇對(duì) YAFFS2 文件系統(tǒng)的支持
7.使內(nèi)核支持Mini2440
在內(nèi)核的 System Type-->ARM system type 選項(xiàng)下,選擇 Samsung S3C24xx 系列。如果讀者的開(kāi)發(fā)板不是 mini2440,那么就應(yīng)該選擇對(duì)應(yīng)的處理器類型。然后 在 S3C2440 Machines 中選擇 Mini2440 支持選項(xiàng)。
8.編譯內(nèi)核映像文件
執(zhí)行 make zImage 生成內(nèi)核的映像文件,如果遇到下面的錯(cuò)誤可以執(zhí)行 make distclean 進(jìn)行清理,然后重新生成映像文件。
# make distclean
# make zImage
9.編譯Busybox
編譯 Busybox 的配置細(xì)節(jié)可以參考制作 《Ramdisk 文件系統(tǒng)》。這里可以將 Busybox 交叉編譯安裝在 _install 文件中,
在/usr/local 目錄下新建 yaffs_root 文件夾,將 Busybox 的安裝目錄_install 中的文件 bin、linuxrc、sbin、usr 復(fù)制到 yaffs_root 目錄下。
# mkdir /usr/local/yaffs_root
# cd /usr/local/busybox-1.21.1/_install
# cp –rf bin linuxrc sbin usr /usr/local/yaffs_root
10.為YAFFS文件系統(tǒng)準(zhǔn)備lib庫(kù)
將交叉編譯器目錄下的庫(kù)文件全部復(fù)制到 lib 庫(kù)目錄下,-d 表示復(fù)制的時(shí)候包括鏈接 文件一起復(fù)制過(guò)來(lái)。
#cp -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/*so* ./lib
11.制作etc目錄下必要的文件
etc 目錄是文件系統(tǒng)中最重要的目錄,系統(tǒng)配置的啟動(dòng)信息都在該目錄下,下面分別給出必要的幾個(gè)文件。
(1)/etc/inittab 文件。
::sysinit:/etc/init.d/rcS #調(diào)用系統(tǒng)初始化文件
s3c2410_serial0::askfirst:-/bin/sh #文件 drivers/serial/s3c2410.c 中指定了串口驅(qū)動(dòng)名字 s3c2410_serial
::ctrlaltdel:/sbin/reboot #重啟
::shutdown:/bin/umount -a -r #關(guān)機(jī)
該文件為 init 進(jìn)程的配置文件。
(2)etc/init.d/rcS 文件。
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /var/lock
/bin/hostname -F /etc/sysconfig/HOSTNAME
該文件為可執(zhí)行文件,完成后還要修改其權(quán)限為可執(zhí)行。該文件功能包括指定環(huán)境變量、運(yùn)行級(jí)別和掛載設(shè)備等。
(3)etc/profile 文件。
USER="`id -un`"
LOGNAME=$USER
PS1='[Yaffs_LiuG]# '
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
如果不配置 profile,移植完文件系統(tǒng)后,進(jìn)入系統(tǒng)命令行頭為空,效果如下:
# ls
bin home lost+found proc sys var
dev lib mnt root tmp
etc linuxrc opt sbin usr
配置 profile 文件后,其效果如下:
]# ls
bin home lost+found proc sys var
dev lib mnt root tmp
etc linuxrc opt sbin usr
(4)etc/sysconfig/HOSTNAME 文件。
Yaffs@LiuG #指定 HOSTNAME,rcS 中調(diào)用該文件
(5)etc/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
該文件指明需要掛載的文件系統(tǒng)。
12.制作YAFFS映像文件
解壓制作文件系統(tǒng)工具 mkyaffs2image.tar,解壓后該工具自動(dòng)安裝在目錄 usr/sbin/下。 使用 mkyaffs2image 將上面制作的文件系統(tǒng)制作成映像文件。
# tar xvf mkyaffs2image.tar
# mkyaffs2image yaffs_root yaffs_root.img
本文摘自《linux系統(tǒng)移植(第2版)》