|
起步开始做简单的文件系统:
1:使用平台
(1)、系统 Red Hat Linux 9
(2)、编译器3.4.1
2:硬件设备
Mini2440 及TE2440
3:busybox-1.1.3
首先:
创建根文件系统的基本目录结构
可以使用脚本:
#! /bin/sh
echo "making dir : bin dev etc lib proc sbin sys usr"
cd root
mkdir bin dev etc lib proc sbin sys usr home root
mkdir usr/bin usr/lib usr/sbin lib/modules
mkdir mnt tmp var
chmod 777 tmp
mkdir mnt/etc mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/run var/tmp
chmod 777 var/tmp
dev 目录
下面的内容在内核挂载完毕文件系统后,系统会使用mdev 自动建立。
不过mdev 是调用init 进程来启动的,在使用mdev 构建“dev”目录前,init 进程需要用到“/dev/console”和“/dev/null”这两个设备文件,所以,我们需要在制作文件系统时静态创建这两个设备文件,方法如下:
#mknod console c 5 1
#mknod null c 1 3
如果不创建这两个设备文件,在文件系统启动时会出现错误信息.大概是不能初始化控制台。
etc 目录
用来存放系统的配置文件。
目录下面有如下常用的文件:
fstab:指明需要挂载的文件系统;
group:用户组;
inittab:init 进程的配置文件;
passwd:密码文件;
profile:用户环境配置文件;
mdev.conf 这里我采用了为空;
init.d 目录:启动文件目录,该目录下面有个“rcS”的文件,里面存放了系统启动时配置以及自启动加载的进程等;
sysconfig 目录:在我们的文件系统里面,该目录下面存放了名为“HOSTNAME”的文件,该文件内容为:用户名。
fstab:
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0
rcS:
#!/bin/sh
/bin/mount -n -t proc none /proc
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t ramfs none var
/bin/mkdir -p var/empty
/bin/mkdir -p var/log
/bin/mkdir -p var/lock
/bin/mkdir -p var/run
/bin/mkdir -p var/tmp
inittab 可以参考busybox中的例子
::sysint:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount –a -r
linuxrc:
#!/bin/sh
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/4 /
这块是cramfs需要的,如果是yaffs,则不需要
exec /sbin/init 这个是必须的。。
编译busybox:
make TARGET_ARCH=arm CROSS=/usr/local/arm/3.4.1/bin/arm-linux- PREFIX=/home/rootfs/ all install
将编译完成 的linuxrc还原成原来的linuxrc
在编译busybox-1.1.3时,用arm-toolchains-3.4.1编译busybox-1.1.3 ,静态链接, 出现如下问题:
/opt/busybox-1.1.3/util-linux/util-linux.a(mount.o)(.text+0x5fc): In function `singlemount':
: undefined reference to `del_loop'
collect2: ld returned 1 exit status
make[1]: *** [busybox_unstripped] 错误 1
make: *** [all] 错误 2
方法:
去掉busybox-1.1.3/util-linux/mount.c下面的这么一段, 就编译成功了.
352 // If mount failed, clean up loop file (if any).
353
354 /*if (rc && loopFile) {
355 del_loop(mp->mnt_fsname);
356 if (ENABLE_FEATURE_CLEAN_UP) {
357 free(loopFile);
358 free(mp->mnt_fsname);
359 }
360 }*/
将3.4.1中arm-linux中 lib下拷贝*.so*的库文件。制作mkyaffs2image rootfs rootfs.yaffs 其中mkyaffs2image这个工具必须支持大页的FLASH