AT91SAM9260 linux 系统移植日志——jffs2文件系统定制
2011-9-13
目标:熟练u-boot、linux系统、文件系统的优化裁剪;精通系统移植;精通linux系统、文件系统、uboot原理等。
2011-9-13
第一天,尝试在AT91SAM9260 上进行linux系统移植,以前移植系统总希望所有的东西都是自己打造的,所以,移植时总时从0开始进行定制。由于自身知识、经验的不足,导致在mini2440上的移植直到现在都没有成功。严重影响了学习的积极性以及进度,所以,从今天起要改变学习的方法,从简入手,先从最简单的开始。
今天,利用系统自带的u-boot、linux内核映像,自己定制jffs2文件系统,学习文件系统的定制方法。
按照厂家提供的方法,如下():
1、建立交叉编译环境
SecureCRT ssh 到 ubuntu
<1> 进入工作目录,复制光盘资料newmsg/tools/下的 arm-2007-01-21.iso
cd /home/works
cp newmsg/tools/arm-2007-01-21.iso ./
mkdir tmp
chmod 777 tmp
<2>安装交叉编译工具
cd tmp
./install –d ../eldk41gcc40
<3>设置交叉编译工具路径,如下:
vi ~/.bashrc
最后一行添加以下路径,
export PATH=$PATH:/home/newmsg/works/tools/eldk41gcc40/usr/bin
<4>测试安装
重新登录,使环境变量生效
exit
sudo su
查看交叉编译工具版本,测试路径是否正确,如下:
arm-linux-gcc –v
1、制作根文件系统
本篇根文件系统使用 busybox 制作,busybox 以小巧著称,适合于嵌入式设备的linux 文件系统,下面是详细的制作过程:
SecureCRT ssh 到 ubuntu,切换到 root
1. busybox 编译
1>准备源码
cd /home/newmsg/works
tar –xzvf busybox-1.15.3.tar.gz
cd busybox-1.15.3
make clean distclean
make menuconfig 对busybox进行配置,去掉不需要的项目,最后生成.config文件。
2>交叉编译
make ARCH=arm CROSS_COMPILE=arm-linux- install
编译成功后,会在busybox-1.15.3/_install/文件夹下生成如下文件:
2.制作根文件系统
1>创建根文件系统基本架构
cd /home/newmsg/works/nfsroot
mkdir root usr mnt proc tmp var opt etc dev lib sys
cp -a ../busybox-1.15.3/_install/* ./
2>添加必要的库文件
将arm-linux-gcc的库文件全部拷贝到lib目录里,例如我的arm-linux-gcc的安装路径为:/opt/arm_linux_gcc/usr/bin/arm-linux-gcc
则执行如下命令:
cp -a /opt/arm_linux_gcc/arm/lib/* ./lib/
3>添加必要设备文件
mknod ./dev/console c 5 1
mknod ./dev/null c 1 3
mknod ./dev/zero c 1 5
说明:如果在配置了busybox中的mdev选项,这些节点系统会自动生成,但是如果文件系统创建前如果不显式的创建这些节点,系统启动时会报如下警告:
Warning: unable to open an initial console.
原因:mdev 是通过 init 进程来启动的,在使用 mdev 构造 /dev 目录之前,init 至少要用到设备文件/dev/console、 /dev/null ,所以需要事先建立这两个设备文件:
lingd@ubuntu:~/arm2410s/rootfs$ cd dev
lingd@ubuntu:~/arm2410s/rootfs/dev$ sudo mknod -m 660 console c 204 64
[sudo] password for lingd:
lingd@ubuntu:~/arm2410s/rootfs/dev$ sudo mknod -m 660 null c 1 3
lingd@ubuntu:~/arm2410s/rootfs/dev$ ls -l
total 0
crw-rw---- 1 root root 5, 1 2010-04-02 15:49 console
crw-rw---- 1 root root 1, 3 2010-04-02 15:50 null
注意:本来console的主次设备号应为5和1.但是因为init在执行完/etc/init.d/rcS脚本后,就 会在一个控制台上,按照inittab的指示开一个shell(或者是开getty+login,这样用户就会看到提示输入用户名的提示符)。在mdev -s未执行之前,/dev目录下只有我们创建的/dev/null和/dev/console,也就是说,没有控制台可供init用来按照inittab 的指示开一个shell。而在s3c24xx 系列芯片的串口驱动里面用了s3c2410_serial做为设备名(在内核源码的“drivers/serial/s3c2410.c”文件的949 行),因此,启动时可用s3c2410_serial0、s3c2410_serial1或s3c2410_serial2作为init用来按照 inittab的指示开一个shell的控制台,这里我用了串口0,即s3c2410_serial0(主次设备号为204和64)作为控制台。这里直接 将console当s3c2410_serial0,所以console的主次设备号才会为204和64。
4>添加基本配置文件
cd etc
mkdir init.d
touch inittab init.d/rcS profile fstab
vi inittab
添加以下内容(以下内容的原理和详细解释会在威步出品的同系列的手册中找到,查看《手册使用介绍》即可找到相应手册) :
::sysinit:/etc/init.d/rcS
ttyS0::respawn:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/bin/umount -a –r
vi pro