全部博文(92)
分类: 嵌入式
2010-04-18 15:23:46
根文件系统的制作
内核版本:
Linux-2.6.31
交叉编译器版本:
arm-linux-gcc 4.1.2
操作系统平台:
Linux -- Red Hat 9.0
开发板平台:
Arm -- TX2440A
使用的工具:
Busybox-1.15.2
STEP 1:
创建根文件系统目录,主要包括以下目录:
/bin,/etc,/dev,/home,/lib,/mnt,/opt,/proc,/root,/sbin,/sys,/tmp,/usr,/var.
建一个名为root_2.6.31的文件夹 mkdir root_2.6.31
在该文件夹下创建以上目录 mkdir bin etc dev ……………
STEP 2:
获取busybox1.15.2源码,在找到busybox-1.15.2.tar.bz2这个压缩包,下载,解压:tar xjvf busybox-1.15.2
进入源码目录,修改Makefile
第164行,CROSS_COMPILE = arm-linux-
第190行,ARCH = arm
STEP 3:
执行#make menuconfig进行配置busybox
Busybox Settings->Build Options->[*]Build BusyBox as a static binary(选择为静态编译)
Busybox Settings->Installation Options->BusyBox installation prefix->../rootfs(制定Busybox 的安装目录为上一级的rootfs)
配置完后,执行#make #make install
STEP 4:
然后就会在上一级目录下生成rootfs文件夹,里面包含几个文件夹/bin /sbin /usr linuxrc
把这些文件全部复制到刚建好的root_2.6.31目录下,
#cp –rf * ../root_2.6.31
STEP 5:
在root_2.6.31/dev目录下,创建两个设备节点:
#mknod console c 5 1 (console 是设备名,c是字符型设备,5是主设备号,1是从设备号)
#mknod null c 1 3
STEP 6:
进入etc目录,添加文件:
拷贝Busybox-1.15.2/examples/bootfloopy/etc/* 到当前目录下。
# cp –r ../../busybox-1.15.2/examples/bootfloopy/etc/* ./
包括文件:fstab init.d inittab profile
拷贝/etc/passwd, /etc/group, /etc/shadow到当前目录下。 (这三个是系统的密码和用户文件)
# cp /etc/passwd ./
# cp /etc/group ./
# cp /etc/shadow ./
修改inittab文件:(定义了子进程执行的文件,并引导执行第一个脚本文件)
内容如下:
console::sysint:/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
#chmod 777 inittab
修改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
#chmod 666 fstab
修改init.d/rcS文件,内容如下: (rcS是系统最先运行的文件,也叫初始化脚本)
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
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
#chmod 777 rcS
修改profile文件,内容如下:(profile也是脚本文件,但它是在我们按下回车后才被执行的)
# Ash profile
# vim: syntax=sh
# No core files by default
#ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
echo "Processing /etc/profile... "
echo "Done"
export USER LOGNAME PS1 PATH
新建sysconfig文件夹,在里面新建HOSTNAME文件,内容为:TX2440A (定义了一个符合)
STEP 7:
拷贝库文件: (我们编译busybox用的是arm-linux-gcc 4.1.2 ,所以我们要拷贝arm-linux-gcc 4.1.2中的lib库,即arm920t-eabi)
进入lib目录,拷贝交叉编译器的库文件到lib目录下
#cp –f –a
/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib/*.so* ./
STEP 8:
到这里,文件系统的框架已经做好,先制作成yaffs镜像,运行一下。
使用mkyaffs2image工具,制作yaffs镜像,这个工具是在yaffs2源码包中utils目录下的mkyaffs2image.c文件编译得到的,如果使用的是大页NAND,需要修改源码。
把编译好的可执行文件复制到/usr/bin目录下,#cp mkyaffs2image /usr/bin
制作文件系统镜像:#mkyaffs2image root_2.6.31 root_2.6.31.bin
#chmod 777 root_2.6.31