分类: 嵌入式
2009-10-14 21:04:07
所谓构建嵌入式linux根文件系统,就是创建各种目录,并且在里面创建各种文件。这次构建将使用Busybox 和 glibc,并使用yaffs映象文件工具制作成yaffs格式的镜像文件。
1. 进入busybox目录下,执行make menuconfig,配置busybox。
2. 修改busybox目录下的顶层Makefile文件,指定交叉编译器,
ARCH ?= $(SUBARCH) CROSS_COMPILE ?=
修改为
ARCH ?= arm CROSS_COMPILE ?= arm-linux-
3. 执行make,编译busybox
4. 安装
执行make CONFIG_PREFIX=out_dir install
就可以将busybox安装在out_dir指定的目录下。
执行后会our_dir目录下就会生成如下文件
. |-- bin |-- linuxrc -> bin/busybox |-- sbin `-- usr
5. 将glibc安装到根文件系统下
假如上面第四部的out_dir 是root_fs。
在root_fs下建立lib目录,存放库文件,并从glibc中将需要用到的库文件复制到root_fs/lib目录下。执行
mkdir -p root_fs/lib cd gcc-3.4.5-glibc-2.3.6/arm-linux/lib cp *.so* root_fs/lib -d
6. 构建etc目录
etc目录下的内容取决于要运行的程序,现主要创建inittab init.d/rcS fstab文件
在root_fs目录下执行 mkdir etc,新建目录。
创建root_fs/etc/inittab文件 内容如下:
#/etc/inittab ::sysinit:/etc/init.d/rcS ttySAC0::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r
创建root_fs/etc/init.d/rcS文件 内容如下:
#!/bin/sh ifconfig eth0 192.168.1.17 mount -a
改变rcS文件属性,执行 sudo chmod +x rcS
创建root_fs/etc/fstab文件 内容如下:
#device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0
7.构建dev目录(静态创建设备文件)
静态创建设备文件的方式是在/dev目录下静态创建各种节点。
mkdir -p root_fs/dev cd root_fs/dev sudo mknod console c 5 1 sudo mknod null c 1 3 sudo mknod ttySAC0 c 204 64 sudo mknod mtdblock0 b 31 0 sudo mknod mtdblock1 b 31 1 sudo mknod mtdblock2 b 31 2
其他设备文件当系统启动后,使用 cat /proc/devices命令查看内核中注册了那些设备,然后一一创建相应的设备文件。
8. 构建其他目录
其他目录可以是空目录,如proc mnt tmp sys root
cd root_fs mkdir proc mnt tmp sys root
9. 创建yaffs映象文件
首先为mkyaffsimage打补丁,再编译生成mkyaffsimage工具
然后执行
mkyaffsimage root_fs root_fs.yaffs
即可生成一份映象文件。
10.烧写
前提条件是开发板上已经有supervivi和linux内核 可参见http://blog.chinaunix.net/u2/75473/showart_1898407.html
用nand flash启动开发板,进入supervivi菜单界面,选择
通过dnw下载并烧写root_fs.yaffs到相应位置。从新启动开发板,有如下部分信息:
ernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 yaffs: Attempting MTD mount on 31.2, "mtdblock2" yaffs_read_super: isCheckpointed 0 VFS: Mounted root (yaffs filesystem). Freeing init memory: 120K init started: BusyBox v1.7.0 (2009-04-15 21:10:45 CST) starting pid 732, tty '': '/etc/init.d/rcS' Please press Enter to activate this console.
按下Enter后就会进入shell,看到左边有个超级用户命令提示符# 应该可以了。
Try:
# ls
bin lib mnt sbin usr dev linuxrc proc sys etc lost+found root tmp
这样,就成功移植了根文件系统了。
可惜的时,现在的整个linux系统虽然能运行,可惜几乎一点实际作用都没有,重点该放在应用上,切记。