1. 编译cramfs制作工具mkcramfs
a. 解压cramfs-1.1.tar.bz2,产生cramfs-1.1文件夹
b. 使用终端进入cramfs-1.1文件夹,运行make,编译cramfs制作工具
c. 编译产生mkcramfs和cramfsck两个工具,将这两个工具复制到/usr/bin目录下。
2. 编译busybox
a. 解压busybox-1.20.2.tar.bz2,产生busybox-1.20.2文件夹
b. 使用终端进入busybox-1.20.2文件夹
c. 修改Makefile文件中的CROSS_COMPILE为相应的编译器,如
CROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
d. 终端中输入make TARGET_ARCH=arm编译busybox
e. 编译完成后输入make install安装busybox,安装的目录默认在./_install文件夹下,我们仅仅需要其中的bin,sbin,usr文件夹
3. 制作cramfs
a. 创建一个rootfs目录,将编译出的busybox文件夹bin,sbin,usr复制到rootfs目录下
b. 在rootfs目录下创建dev,etc,home,lib,mnt,opt,proc,root,sys,tmp,var目录
c. 在rootfs目录下创建linuxrc文件,内容如rootfs-2012-10-13-0003.tar.bz2下的linuxrc文件,并修改其属性:chmod 775 linuxrc
d. 进入rootfs/dev目录,执行:mknod console c 5 1和mknod null c 1 3创建设备节点.(如使用压缩包中的文件系统,需要执行这一步操作)
e. 进入rootfs/dev目录,创建fstab,inittab,profile,init.d/rcS等文件,相关内容参考rootfs-2012-10-13-0003.tar.bz2
f. 进入rootfs/usr目录,创建etc文件夹,作用用户配置文件,创建rc.local,profile,profile.org等文件,相关内容参考rootfs-2012-10-13-0003.tar.bz2
g. 进入rootfs的上一级目录,执行mkcramfs rootfs rootfs.cramfs制作跟文件系统,完成后产生rootfs.cramfs文件
4. 下载和运行cramfs
a. 将cramfs烧写到smdk开发的rootfs空间,重新启动开发板,看到如下信息表示根文件系统加载成功
VFS: Mounted root (cramfs filesystem) readonly.
Freeing init memory: 252K
Processing etc/init.d/rc.S
Mount all
*************************************
RootFS by Cramfs
*************************************
Please press Enter to activate this console.
注意:编译内核时需要配置启动参数:
Boot options->Default kernel command string:
Root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc console=ttySAC0,115200
附件:相关文件内容
Rootfs/linuxrc文件
#!/bin/bash
echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc
/bin/cp -a /mnt/etc/* /etc
echo "re-create the /etc/mtab entries"
# re-create the /etc/mtab entries
#/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /
/bin/mount -t ramfs ramfs /tmp
exec /sbin/init
Rootfs/etc/fstab文件
none /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
Rootfs/etc/inittab文件
# This is run first except when booting
::sysinit:/etc/init.d/rcS
# Start an "askfirst" shell on the console
#::askfirst:-/bin/bash
ttySAC0::askfirst:/bin/bash
# Stuff to do when restarting the init process
::restart:/sbin/init
#::once:/sbin/raja.sh
#::respawn:/sbin/iom
::once:/usr/etc/rc.local
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
Rootfs/etc/profiel文件
#/etc/profile: system-wide .profile file for the Bourne shells
echo "Processing /etc/profile"
# no-op
# Set search library path
LD_LIBRARY_PATH=/lib:/usr/lib
export LD_LIBRARY_PATH
# Set user path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
# Set PS1
#export PS1="[$USER@linux ]\\$"
#echo
Rootfs/etc/init.d/rcS文件
#! /bin/bash
echo "Processing etc/init.d/rc.S"
#hostname ${HOSTNAME}
echo " Mount all"
/bin/mount -an
/bin/mknod /dev/console c 5 1
/bin/mknod /dev/null c 1 3
/bin/mknod /dev/ttySAC0 c 204 64
/bin/mknod /dev/ttySAC1 c 204 65
/bin/mknod /dev/ttySAC2 c 204 66
/bin/mknod /dev/ttySAC3 c 204 67
/bin/mkdir /dev/pts
/bin/mkdir /dev/shm
/bin/mkdir /dev/video
/bin/mknod /dev/video/codec c 81 12
/bin/mknod /dev/video/preview c 81 13
#echo "Starting mdev..."
#/bin/echo /sbin/mdev > proc/sys/kernel/hotplug
#mdev -s
#/sbin/udevd --daemon
#/sbin/udevadm trigger
ln -s /dev/ts0 /dev/ts
Rootfs/usr/etc/rc.local文件
#!/bin/bash
./usr/etc/profile
/sbin/ifconfig lo 127.0.0.1 up
#/sbin/ifconfig eth0 192.168.2.12 netmask 255.255.255.0 up
#/sbin/inetd
#/usr/sbin/makelinks
/bin/mkdir /tmp/udisk
/bin/mkdir /tmp/sd
/bin/mkdir /tmp/photo
#source /.bashrc
#export QWS_DISPLAY=Transformed:Rot90
#/bin/cp -rf /Qtopia/qtopia-free-1.7.0/elfin/* /tmp/
#cd /tmp
#/Qtopia/qtopia-free-1.7.0/bin/qpe -qws&
#/bin/apm
Rootfs/usr/etc/profile文件
DISPLAY=unix:0.0
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
#QWS_KEYBOARD=TTY
LANG=C
HOME=/tmp
KMOD=/lib/modules/2.4.19-rmk4-pxa2
export PATH QTDIR LINUETTEDIR QWS_KEYBOARD LANG HOME DISPLAY KDEDIR KMOD
Rootfs/usr/etc/profile.org文件
#!/bin/sh
DISPLAY=unix:0.0
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt
LD_LIBRARY_PATH=/usr/home:/lib:/usr/lib:
#QWS_KEYBOARD=TTY
LANG=zh_CN
HOME=/usr/home
export PATH LD_LIBRARY_PATH LANG HOME