Linux内核在系统启动期间进行的最后操作之一就是安装根文件系统,这两天动手实践了一下,终于小成功了一把,下面在这里记录一下学习心得,以便日后回忆。
移植环境
1、操作系统Ubuntu 11.04
2、linux内核版本2.6.38
3、交叉编译器 arm-unknown-linux-gnueabi-gcc-4.3.2
准备条件
1,硬件
实验室自己画的开发板(外设很少),内核CPU:s3c2410AL-20(ARM920T处理器核)
2,源码
1、busybox源码--busybox-1.20.2.tar.bz2
下载地址:http://busybox.net/downloads/
2、cramfs源码--cramfs-1.1.tar.gz
下载地址:http://sourceforge.net/projects/cramfs/files/cramfs/
解压源码包编译生成映像生成工具
1、解压
2、编译
zujin@ubuntu:~/fs/cramfs-1.1$make
然后会在cramfs-1.1目录下看到映像生成工具mkcramfs,如下图:
解压并配置busybox
1、解压
zujin@ubuntu:~/fs$ tar xjvfbusybox-1.20.2.tar.bz2
2、修改Makefile文件
1)找到CROSS_COMPILE ?=
改为:CROSS_COMPILE?=/home/zujin/fs/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-
注意:首先把交叉编译器放到相应位置,再配置,否则会出错
2)找到ARCH?= $(SUBARCH)
改为:ARCH?= arm
3、配置
1)BusyboxSettting ----->
Build Options ------>
[*]Build BusyBox as astatic binary (no shared libs)
CrossCompiler prefix //和makefile中的 //CROSS_COMPILE保持一致
InstallationOptions----->
BusyBox installation prefix //改为你创建的rootfs, //如/home/zujin/fs/rootfs/
2)退出,保存
准备建立文件系统
1、在rootfs目录中创建一个creatfs.sh的脚本
#!/bin/sh
mkdirbin dev etc lib proc sbin sys usr #8 dirs
mkdirusr/bin usr/lib usr/sbin lib/modules
mknod-m 600 dev/console c 5 1
mknod-m 666 dev/null c 1 3
mkdirmnt tmp var
chmod1777 tmp
mkdirmnt/etc mnt/jiffs2 mnt/yaffs mnt/data mnt/temp
mkdirvar/lib var/lock var/log var/run var/tmp
chmod1777 var/tmp
mkdirhome root boot
2、运行creatfs.sh脚本
root@ubuntu:/home/zujin/fs/rootfs#chmod 777 creatfs.sh
root@ubuntu:/home/zujin/fs/rootfs#./creatfs.sh
在rootfs目录下会生成bin、dev等子目录
配置文件
1、复制配置文件到rootfs/etc目录下
root@ubuntu:/home/zujin/fs/rootfs#cd etc/
root@ubuntu:/home/zujin/fs/rootfs/etc#cp -r ../../busybox- 1.20.2/examples/bootfloppy/etc/* .
2、修改profile
# /etc/profile:system-wide .profile file for the Bourne shells
echo
echo -n "Processing/etc/profile... "
# Set search librarypath
exportLD_LIBRARY_PATH=/lib:/usr/lib
# set user path
exportPATH=/bin:/sbin:/usr/bin:/usr/sbin
#Set PS1
echo "Set PS1 in/etc/profile"
exportPS1="[\u@\h\W]\$"
echo "Done"
echo
3、修改inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount-a -r
::shutdown:/bin/umount-a -r
::shutdown:/sbin/swapoff-a
4、修改fstab
proc /proc proc defaults 0 0
none /tmp ramfsdefaults 0 0
none /var ramfsdefaults 0 0
mdev /dev ramfsdefaults 0 0
sysfs /sys sysfsdefaults 0 0
5、修改init.d/rcS
#! /bin/sh
echo "----------mountall"
/bin/mount -a
echo"----------Starting mdev......"
/bin/echo /sbin/mdev >/proc/sys/kernel/hotplug
mdev -s
echo"*********************************************************"
echo " created byyzj "
echo"********************************************************"
6、为mdev创建配置文件,可以为空
root@ubuntu:/home/zujin/fs/rootfs/etc#touch mdev.conf
使用mkcramfs工具生成文件系统映像
root@ubuntu:/home/zujin/fs/cramfs-1.1#./mkcramfs ../rootfs/ rootfs.cramfs
Directory data: 7664bytes
Everything: 1172kilobytes
Super block: 76 bytes
CRC: 9eed376a
warning: gids truncatedto 8 bits (this may be a security concern)
烧写进nandflash
1、该nandflash被分为5个分区(bootloader被烧进板子背面的NORflash),如图:
2、按下板子的Reset键,迅速按空格键,进入板子的bootloader,即vivi,如图:
3、将文件系统烧写进上图的第二个分区
1)首先将延时调长一些
2)烧写
--键入命令loadnand 0x200000 0x3300000 x
--CtrlA
--S 然后,通过上下键选择xmodem
---选择文件rootfs.cramfs
以上几个步骤,指法必须娴熟,如果失败多试几次。
烧写完毕
重新reset