Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67569
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-25 16:11
个人简介

生命是个奇迹,我用时间来证明!

文章分类
文章存档

2013年(25)

我的朋友

分类: 嵌入式

2013-04-27 14:51:29

原文地址:制作根文件系统 作者:丫叩酱

一、根文件系统和busybox

1) 在~目录下,创建一个rootfs目录,将其制作为nfs,目录结构如下(写一个脚本script.sh):
mkdir bin dev etc lib mnt opt proc sbin srv sys tmp usr var
cd etc 
mkdir init.d network
cd network
touch if-down.d if-post-down.d if-pre-up.d if-up.d
cd ../../usr
mkdir bin lib sbin
cd ../var
mkdir run
cd ../
2) 解压 mc2440 下的 busybox-1.9.1.tar.bz2 到 /home/akaedu/下,得到文件夹busybox-1.9.1
$ tar zxvf busybox-1.9.1.tar.bz2
3) 进入内核目录
$ cd busybox-1.9.1
4) 修改Makefile,找到 (此处需修改Makefile)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= 
    改为:
ARCH ?= arm (后面不能有空格)
CROSS_COMPILE ?= arm-linux-
5) 以缺省配置为起点做进一步的配置
$ make defconfig
$ make menuconfig
    在菜单中做如下配置:
#1 选中 BusyBox Settings——> Installation Options——>BusyBox installation prefix,设置为/home/akaedu/rootfs,busybox编译后安装到这个目录
#2 根据需要裁剪各命令。但是Shell——>Choose your default shell选项一定要保留一个默认shell(如ash),
(如果没有默认shell,将不会创建/bin/sh这个链接,而一般的shell脚本都是以#!/bin/sh开头的,若找不到/bin/sh就不能执行。)
6) 编译和安装busybox
$ make
$ make install
7) linuxrc需读取设备文件/dev/console和/dev/null,我们手动创建这些设备文件:
$ cd rootfs/dev
$ sudo mknod -m 600 console c 5 1
$ sudo mknod -m 666 null c 1 3
常见设备文件的设备号可以从内核代码的Documentation/devices.txt文件中查到
8) 创建一个启动配置文件:~/rootfs/etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty 115200 s3c2410_serial0
::restart:/sbin/init
::shutdown:/bin/umount -a -r
9) 启动的过程首先执行rcS启动脚本,创建这个脚本~/rootfs/etc/init.d/rcS (根据/etc/fstab配置文件提供的信息mount一些fs)
#!/bin/sh
mount -a
       这个脚本需加可执行权限:chmod +x rcS
10) 创建/etc/fstab配置文件
#
proc /proc proc defaults 0 0
sys /sys sysfs defaults 0 0
11) 执行完rcS,要执行respawn(如上8)),需创建s3c2410_serial0设备文件
$ cd rootfs/dev
$ sudo mknod -m 600 s3c2410_serial0 c 204 64
       这个设备号在内核代码的Documentation/arm/Samsung-S3C24XX/Overview.txt中可查到
12) 打开终端会提示输入用户名和密码后才启动shell,需创建帐号文件passwd和group
~/rootfs/etc/passwd文件内容为:
root::0:0:root:/:/bin/sh
~/rootfs/etc/group文件内容为:
root::0:
       现在就创建了一个root帐号,没有密码。如需密码,可以把主机上的/etc/shadow文件中的root帐号的那一行放到开发板的根系统中。

二、glibc
由于busybox需要glibc共享库的支持,下面将在根文件系统中安装glibc。

1) 解压crosstool.tar.bz2到/opt/目录下,得到文件夹crosstool
$ tar  zxvf crosstool.tar.bz2
2) 把共享库拷到根文件系统哦~/rootfs/lib目录下
$ cd /opt/crosstool/gcc-4.0.2-glibc-2.3.6/arm-linux/lib
$ cp -dp * /home/akaedu/rootfs/lib
3) 到~/rootfs/lib目录下删除掉所有的静态库和一些不常用的库。
$ rm *.a
$ rm *.o
  现在通过NFS启动开发板,应该可以成功启动到shell下了。

三、mdev
先前我们在根文件系统的/dev目录下手动创建了三个设备文件:console、null和s3c2410_serial0,内核里还有很多设备驱动需要通过设备文件题东街口给应用程序访问,若一个个手动创建太麻烦且容易出错,busybox提供mdev程序可以从sysfs中读出内核提供的设备驱动信息,在/dev目录下自动创建相应的设备文件并为这些设备文件命名。

1) 把以下几行附加到启动脚本~/rootfs/etc/initd/rcS的末尾
mount -t tmpfs mdev /dev
mdev -s
mkdir /dev/input
ln -s /dev/mice /dev/input/mice
2) mdev还需要一个配置文件mdev.conf,用于指定各设备文件的所有者和权限,其格式可参考busybox源代码中的docs/mdev.txt。我们不做特别的设置,但这个文件需存在,因此创建一个空文件。
$ touch rootfs/etc/mdev.conf

  现在重新启动开发板,从minicom可以看到/dev目录下创建了很多设备文件,而主机上查看NFS目录~/rootfs/dev却仍然只有先前的三个设备文件,想一想为什么?

四、系统时钟

1) 将主机上的时区文件拷贝到开发板根文件系统
$ cp /etc/localtime ~/rootfs/etc
2) 在启动脚本~/rootfs/etc/init.d/rcS中添加一条命令
hwclock --hctosys
3) 修改开发板系统时钟
#data 051815232012
Wed May 15:23:00 CST 2011
     这时关闭系统,时钟信息还是会丢失。若在上述命令后用hwclock命令写到硬件RTC时钟,在系统断电期间RTC时钟由电池维持,下次启动通过hwclock --hctosys仍然可以将系统时钟设定正确。

五、网络配置
在bootloader中设置的开发板IP地址仅在bootloader阶段与主机通信时起作用。
若是NFS Root方式启动,系统启动后的IP地址是由内核启动参数中的NFS设置决定的,这样系统启动后仍然可以读取主机的NFS导出目录。
若是Nand Flash根文件系统启动,则启动后需重新配置IP地址和激活网络接口,我们可以把配置写在启动脚本~/rootfs/etc/init.d/rcS中:

1) 在启动脚本~/rootfs/etc/init.d/rcS添加
ifup -a
2) 添加一个配置文件~/rootfs/etc/network/interfaces:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1

六、httpd
busybox自带了一个Web服务器程序httpd
1) 在在启动脚本~/rootfs/etc/init.d/rcS添加如下一行
httpd -h /srv/www
2) 在根文件系统中创建服务目录
$ mkdir -p rootfs/srv/www/cgi-bin
  现在启动开发板系统,试验以下功能
#1 编辑一个index.html放在~/rootfs/srv/www下,从主机上打开浏览器,输入开发板的IP地址看能否浏览
丫叩酱
jfifjasl;ijfeio

ajsiofjaoisjf

3) 编译一个shell脚本,加可执行权限,放在~/rootfs/srv/www/cgi-bin,从主机打开浏览器,输入该脚本的地址(如:)
#!/bin/sh
echo "Content-Type:text/plain"
echo
ls -l

七、将自己定制的根文件系统下载到开发板上运行
阅读(1052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~