Linux的根文件系统制作
一、移植环境
·主机:VMWare--Fedora 9
·开发板:Micro2440--128MB
Nand
·编译器:arm-linux-gcc-4.3.2
·yaffs补丁:cvs-root.tar.gz这里下载
·Busybox:busybox-1.13.0.tar.tar
·yaffs制作工具:mkyaffs2image.tgz
二、移植步骤
1.准备工作目录和进入工作目录
#mkdir
my2440#cdmy2440
2.给内核打上yaffs补丁,使内核对yaffs的支持
#tar-zxvf cvs-root.tar.gz#cdcvs/yaffs2/#./patch-ker.sh c/root/my2440/linux-2.6.30.4/
3.配置内核,使其对yaffs2文件系统的支持。配置完后重新编译内核,下载到开发板上
File
systems --->< > Second
extended fs support< > Ext3
journalling file system support< > The
Extended 4 (ext4) filesystem< > Reiserfs
support< > JFS
filesystem support< > XFS
filesystem support< > OCFS2 file
system support< > Btrfs
filesystem (EXPERIMENTAL) Unstable disk format[*] Enable POSIX
file locking API[*] Dnotify support[*] Inotify file
change notification support[*] Inotify support
for userspace[ ] Quota supportKernel automounter
supportKernel automounter
version 4 support (also supports v3)FUSE (Filesystem in
Userspace) supportCaches
--->CD-ROM/DVD
Filesystems --->ISO 9660 CDROM file system support[
] Microsoft Joliet CDROM extensions[
] Transparent decompressionextension<
> UDF file system supportDOS/FAT/NT
Filesystems --->MSDOS fs supportVFAT (Windows-95) fs support(437)
Default codepage for FAT(iso8859-1)
Default iocharset for FAT<
> NTFS file system supportPseudo
filesystems --->[*] Miscellaneous
filesystems --->---
Miscellaneous filesystems<
> ADFS file system support (EXPERIMENTAL)<
> Amiga FFS file system support (EXPERIMENTAL)<
> Apple Macintosh file system support (EXPERIMENTAL)<
> Apple Extended HFS file system support<
> BeOS file system (BeFS) support (read only) (EXPERIMENTAL)<
> BFS file system support (EXPERIMENTAL)<
> EFS file system support (read only) (EXPERIMENTAL)YAFFS2 file system support-*-
512 byte / page devices[
] Use older-styleon-NAND data format with pageStatus byte[
] Lets Yaffs do its own ECC-*-
2048 byte (or larger) / page devices[*]
Autoselect yaffs2 format[
] Disable lazy loading[
] Turnoffwide tnodes[
] Force chunk erase check[*]
Cache short names in RAMJournalling Flash File System v2 (JFFS2) support(0)
JFFS2 debugging verbosity (0=quiet, 2=noisy)[*]
JFFS2 write-buffering support[
] Verify JFFS2 write-buffer reads[*]
JFFS2 summary support (EXPERIMENTAL)[
] JFFS2 XATTR support (EXPERIMENTAL)[
] Advanced compression options for JFFS2Compressed ROM file system support (cramfs)SquashFS 4.0 - Squashed file system support[
] Additional option for memory-constrained systems<
> FreeVxFS file system support (VERITAS VxFS(TM) compatible)<
> Minix file system support<
> SonicBlue Optimized MPEG File System support<
> OS/2 HPFS file system support<
> QNX4 file system support (read only)ROM file system supportRomFS
backing stores (Block device-backed ROM file system support) --<
> System V/Xenix/V7/Coherent file system support<
> UFS file system support (read only)<
> NILFS2 file system support (EXPERIMENTAL)[*] Network File
Systems --->Partition
Types --->-*- Native language
support --->< >
Distributed Lock Manager (DLM) --->
4.编译busybox生成文件系统所需要的应用程序
1)解压busybox源码,修改Makefile使之编译成ARM平台:
#tar-jxvf busybox-1.13.0.tar.tar#cdbusybox-1.13.0#gedit Makefile
大概164行改成CROSS_COMPILE = arm-linux-,189行改成ARCH = arm
2)配置busybox选项,下面只列出了要注意的地方,没有列出的默认即可
#make
menuconfig
Busybox
Settings --->General
Configuration --->Buffer
allocation policy (Allocate with Malloc) --->[*]
Show verbose applet usage messages[*]
Store applet usage messages in compressed form[*]
Support --install [-s] to install applet links at runtime[*]
Enable locale support (system needs locale for this to work)[*]
Support for --long-options[*]
Use the devpts filesystem for Unix98 PTYs[*]
Support writing pidfiles[*]
Runtime SUID/SGID configuration via /etc/busybox.conf[*]
Suppress warning message if /etc/busybox.conf is not readable(/proc/self/exe)
Path to BusyBox executableBuild Options
--->[*]
Build BusyBox as a static binary (no shared libs)[*]
Build with Large File Support (for accessingfiles> 2 GB)Installation Options
--->[
] Don't use /usrApplets
links (as soft-links) --->(./_install)
BusyBox installation prefixBusybox Library
Tuning --->(6)
Minimum password length(2)
MD5: Trade Bytes for Speed[*]
Faster /proc scanning code (+100 bytes)[*]
Command line editing(1024)
Maximum length of input[*]
vi-style line editing commands(15)
History size[*]
History saving[*]
Tab completion[*]
Fancy shell prompts(4)
Copy buffer size, in kilobytes[*]
Use ioctl names rather than hex values in error messages[*]
Support infiniband HWLinux Module Utilities --->(/lib/modules)
Default directory containing modules(modules.dep)
Default name of modules.dep[*] insmod[*] rmmod[*] lsmod[*] modprobe--- Options common
to multiple modutils[ ] Support version
2.2/2.4 Linux kernels[*] Support tainted
module checking with new kernels[*] Support for
module.aliases file[*] Support for
module.symbols fileLinux System Utilities --->
3)编译和安装busybox,安装完后会在busybox-1.13.0/_install/目录下生成:bin、linuxrc、sbin、usr
#make#make install
5.开始构建文件系统
1)新建一个目录root-2.6.30.4,把busybox-1.13.0/_install/目录下生成:bin、linuxrc、sbin、usr复制过来,并且在该目录下创建文件系统所需要的其他目录
#mkdir
root-2.6.30.4#cp-rf busybox-1.13.0/_install/*root-2.6.30.4/#cdroot-2.6.30.4/#mkdir dev etc home lib mnt opt proc tmp var
www
2)向各目录中添加文件系统所需要的目录或文件,没有提到的就不用添加。这里要注意各种文件的权限,建议都改为777,命令:#chmod 777文件名
"dev"目录,创建两个设备文件:
#mknodconsolec 5 1#mknod null c 1 3
#mknod
ttySAC0 c 204 64
#mknod
mtdblock0 b 31 0
#mknod
mtdblock1 b 31 1
#mknod
mtdblock2 b 31 2
"etc"目录,创建各种配置文件并向里面添加内容,没有列出的就不用添加:
boa/boa.conf: boa WEB服务器配置文件,暂时为空。
group:系统用户组配置文件,内容如下:
root:*:0:daemon:*:1:bin:*:2:sys:*:3:adm:*:4:tty:*:5:disk:*:6:lp:*:7:lpmail:*: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:plg501:x:501:fa
inittab:系统init进程配置文件,内容如下:
#
/etc/inittab::sysinit:/etc/init.d/rcSconsole::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r
mime.types:暂时为空。
passwd:系统密码文件,内容如下:
root::0:0:root:/:/bin/shftp::14:50:FTP User:/var/ftp:bin:*:1:1:bin:/bin:daemon:*:2:2:daemon:/sbin:nobody:*:99:99:Nobody:/:sky::502:502:Linux User,,,:/home/sky:/bin/sh
rc.d/init.d/httpd:内容如下:
#!/bin/shbase=boa# See how we were called.case"$1"instart)/usr/sbin/$base;;stop)pid=`/bin/pidof $base`if [ -n"$pid"];
thenkill
-9 $pidfi;;esacexit 0
sysconfig/HOSTNAME:主机名称文件,内容如下:
Micro2440
fstab:系统挂载文件系统列表,内容如下:
#
device mount-point type
options dump fsck ordernone /proc
proc
defaults 0 0none /dev/pts
devpts mode=0622 0 0tmpfs /dev/shm
tmpfs defaults 0
0
init.d/rcS:系统启动加载项,内容如下:
#!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c
only in this shell so we can interrupt subprocesses.#/bin/mount -t proc none /proc/bin/mount -t tmpfs none /tmp/bin/mount -t tmpfs none /var/bin/mkdir -p /var/log/bin/hostname -F /etc/sysconfig/HOSTNAME
mdev.conf: mdev设备配置文件,暂时为空。
net.conf:网络配置文件,暂时为空。
profile:用户环境配置文件,内容如下:
#
Ash profile# vim: syntax=sh# No corefilesby default#ulimit -S -c 0 > /dev/null 2>&1USER="`id -un`"LOGNAME=$USERPS1='[\u@\h \W]\# 'PATH=$PATH:/usr/local/binLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libHOSTNAME=`/bin/hostname`export USER LOGNAME PS1 PATHLD_LIBRARY_PATH
resolv.conf: DNS配置文件,内容如下:
nameserver
192.168.70.1
"home"目录:创建一个sky目录,与etc目录passwd文件中的sky相对应
"lib"目录:这个里面放的都是库文件,直接从交叉编译器的库文件目录中拷贝过来:
#cp
-f /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so*
lib/ -a
6.使用yaffs制作工具编译构建好的文件系统。先解压mkyaffs2image.tgz(这个工具是友善提供的,可以在他们的网站上下载),会自动解压到开发主机的/usr/sbin/目录下。编译后生成的文件系统镜像root-2.6.30.4.bin也在这个目录下
#tar -zxvf
mkyaffs2image.tgz#mkyaffs2image root-2.6.30.4/
root-2.6.30.4.bin
7.下载yaffs2文件系统镜像到开发板上测试,使用情况如下:
现在还没成功。不知道哪里出了问题,
8.使用cramfs制作工具编译构建好的文件系统。这个工具的名字叫做mkcramfs,在网上找一下到处都是.也可以从下载cramfs-1.1.tar.gz。然后执行
tar
zxvf cramfs-1.1.tar.gz
进入解包之后生成cramfs-1.1目录,执行编译命令:
make
编译完成之后,会生成mkcramfs和cramfsck两个工具,把他们cp到/usr/bin/下。就可以像其他命令一样执行了。
#mkcramfs
root-2.6.30.4/ root-2.6.30.4.cramfs
9.下载cramfs文件系统镜像到开发板上测试,使用情况如下:
10后记
我按照网上的资料做了很多次文件系统。Yaffs2的就是不成功。有人说是制作工具的问题,有人说busybox的版本和编译器之间的问题。我也不知道是怎么回事。于是我改用了cramfs就成功了,现在继续研究为什么不能制作成功yaffs2的文件系统。