Chinaunix首页 | 论坛 | 博客
  • 博客访问: 427414
  • 博文数量: 131
  • 博客积分: 1990
  • 博客等级: 上尉
  • 技术积分: 996
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-24 12:15
文章分类
文章存档

2011年(4)

2010年(19)

2009年(108)

我的朋友

分类: 嵌入式

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系统虽然能运行,可惜几乎一点实际作用都没有,重点该放在应用上,切记。

阅读(1586) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~