以下是这几天搞出来的
Mini2440上Yaffs2文件系统的建立
注:参考天嵌公司的相关手册
一:确认内核移植时对yaffs2的支持并确保yaffs的补丁打上
二:建立目录
#mkdir myroot
#cd myroot
#mkdir bin dev etc lib mnt proc sbin sys root tmp home
三:busybox的修改
1. 解压并修改Makefile
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-
2. 配置
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
其他的默认就行了,也可以根据自己的情况配置
3 编译安装busybox
#mak CONFIG_PREFIX=/opt/myroot install
可以在myroot文件夹下看到bin、sbin、usr、linuxrc相应的添加
四:各个文件的编写
1:/dev
从2.6.18开始,负责旧版本的设备管理系统devfs没有了,但是新版本的udev是基于用户空间的设备管理系统,在内核启动时并不能自动创建设备节点,要手工建立两个设备节点console和null,字符类型,后面的数字代表主设备号和次设备号
#mknod console c 5 1
#mknod null c 1 3
如果不创建这两个设备,在文件系统启动是会出现:不能初始化控制台的错误
如 Warning: unable to open an initial console.
Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
在init/main.c中的init_post()中
2./lib
从以前的root或linux中拷过来库文件
#cp –rfd /root_qtopia/lib/* /opt/myroot/lib/
-d保持库文件的链接关系
3./etc
在“etc”目录下面有如下常用的文件:
fstab:指明需要挂载的文件系统;
group:用户组;
inittab:init 进程的配置文件;
passwd:密码文件;
profile:用户环境配置文件;
mdev.conf:因为2.6.18 版本开始linux 放弃使用devfs 而采用udev(mdev 是udev 的简化版本),这里的mdev.conf 文件可以是空,也可以按照一定规则来编写,这里我采用了为空;
resolv.conf:存放DNS 信息的文件,访问外网时需要DNS 的信息。
常用的目录有:
init.d 目录:启动文件目录,该目录下面有个“rcS”的文件,里面存放了系统启动时配置以及自启动加载的进程等;
sysconfig 目录:在我们的文件系统里面,该目录下面存放了名为“HOSTNAME”的文件,该文件内容为:localname,这句话就是我们在文件系统里面看到那个“[root@ localname /]”
rc.d 目录:在我们的文件系统里面用来存放一些自启动所要调用的脚步等;
boa 目录:我们的文件系统特有的目录,用来存放web 服务器的配置脚本。
【/etc/fstab】:
# device mount-point type options dump fsck order
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
【/etc/group】:
root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:lp
mail:*:8:
news:*:9:
uucp:*:10:
proxy:*:13:
kmem:*:15:
dialout:*:20:
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
sudo:*:27:
audio:*:29:
ppp:x:99:
500:x:500:xuxiaohua
501:x:501:xuxiaohua
【/etc/passwd】:
root::0:0:root:/:/bin/sh
ftp::14:50:FTP User:/var/ftp:
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
jiajintao:$1$8GIZx6d9$L2ctqdXbYDzkbxNURpE4z/:502:502:Linux User,,,:/home/xuxiaohua:/bin/sh
Passwd和group文件可以从linux或友善的root里面直接拷过来
【/etc/profile】:
# Ash profile
# vim: syntax=sh
# No core files by default
#ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`" #这个符合是Esc键下面的那个
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
【mdev.conf】:
空
【resolv.conf】:
Nameserver 192.168.1.1
【init.d/rcS】:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
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
Echo “*********************myroot*********************”
最后把属性改下#chmod +x rcS
【/etc/rc.d/init.d/httpd】:
#!/bin/sh
base=boa
# See how we were called.
case "$1" in
start)
/sbin/$base
;;
stop)
pid=`/bin/pidof $base`
if [ -n "$pid" ]; then
kill -9 $pid
fi
;;
esac
exit 0
【/etc/sysconfig/HOSTNAME】:
xuxiaohua
这个可以是你在home目录下的用户
最后#mkyaffs2image myroot jyaffs2.img
介绍下各目录
“home”目录
存放用户文件的目录,在这里,我建立了一个名为“xuxiaohua”的目录,前面的passwd 文里面有个用户名就是对应xuxiaohua这个目录
“lib”目录
常用的库文件,获取库文件的方法:
#cp -rfd /root_qtopia/lib/* /myroot/lib/
这里拷贝了常用的库文件,如果需要特殊的库,需要再从相应的位置复制过来。
“mnt”目录
我们一般用来挂载的U 盘之类的外设,这里建立两个目录“udisk”和“sd”挂载U 盘和SD卡。
“opt”目录
空
“proc”目录
提供一些目录和虚拟文件系统。
“root”目录
超级用户的目录。
“sys”目录
“tmp”目录
存放临时文件的目录。
“var”目录
存放临时文件的目录。
“web”目录
存放web 服务器的相关文件的目录,建议直接从以前制做好的文件系统中拷贝过来。