mini2440构建根文件系统

构建根文件系统

一. 根文件系统知识
根文件系统是嵌入式linux系统三个重要组成部分之中的其中一个,其他两个是bootloader, kernel。在系统 中扮演者重要的角色。它是linux系统正常运行必须的shell命令和其他应用程序的存储媒介。通常存储在磁盘以及Flash中。嵌入式一般根文件系统存储在Nandflash中,比较著名的flash根文件系统是jffs2和yaffs2。在开发阶段一般用nfs网络文件系统。还有一种内存文件系统,ramdisk内存盘,这个文件系统因为在内存的缘故,掉电后所存储的东西就会丢失。
二. 在ubuntu主机上构建基本的目录
根据FHS标准建立根文件系统的基本目录,
#!/bin/sh
echo "------Create rootfs directons start...--------"
mkdir rootfs
cd rootfs
echo "--------Create root,dev....----------"
mkdir root dev etc boot tmp var sys proc lib mnt home usr 
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
echo "make node in dev/console dev/null"
sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 600 dev/null  c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp
chmod 1777 tmp
chmod 1777 var/tmp
echo "-------make direction done---------"
将其保存成脚本,加上可执行权限。就会在工作目录建立根文件系统基本目录
三.使用busybox构建可执行程序包
(1)下载busybox-1.13.3 这个是友善之臂推荐的版本
(2)解压进入目录,执行make menuconfig(使用ubuntu10.10操作系统,前提装了相关的库,如果第一个执行这个会出现错误,原因是一个库没有装,这个库是menuconfig程序运行所必须,当编译内核的时候也需要这个库,google一下装上ok)
  配置busy-1.13.3
           主要注意配置的地方有以下:
           Installation Options-->Don't use /usr   这个一定要选上,如果不选上就会覆盖系统原来的可执行文件。
           Build Options  ---> Build BusyBox as a static binary (no shared libs) 这个要选上,因为在嵌入式系统一般都是静态编译,这样不需要在系统中存储很大的C库。有助于节省空间。
           其他的配置就根据具体的应用来配置。
(3)修改Makefile
主要修改两个两个地方
           ARCH=arm
           CROSS_COMPILE=arm-linux-
(4)然后make CONFIG_PREFIX=/home/sun/study/rootfs install
CONFIG_PREFIX是你的文件系统目录,就是上面脚本建立的目录结构,如果出现
--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
代表编译成功,成功之后就会在/home/sun/study/rootfs/bin 中出现很多可执行文件,在/home/sun/study/rootfs出现Linuxrc可执行文件
四.修改与添加系统初始化脚本
(1)etc/inittab 系统init进程配置文件
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
加上可执行权限 chmod +x inittab
(2)etc/init.d/rcS系统启动加载项文件
echo "----------mount all.........."
mount -a
echo "----------Starting mdev......"
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname -F /etc/sysconfig/HOSTNAME
echo "***********************************************"
echo "************booting to mini2440 *****************"
echo "Kernel version:linux-2.6.32.2"
echo "zhenguoyao-uestc-chengdu"
echo "Date:2011.5.30"
echo "***********************************************"
加上可执行权限 chmod +x rcS
(3)etc/fstab 系统挂载文件系统列表文件
#evice mount-point type       option       dump   fsck   order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
(4)etc/profile用户环境配置文件
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
#set hostname
HOSTNAME='/bin/hostname'
export HOSTNAME
# Set PS1
PS1='[\u@\h \W]\
export PS1
(5)/etc/passwd shadow 用户文件以及密码
把主机的passwd shadow 文件拷贝到/etc下
(6)etc/sysconfig 目录下新建主机文件名HOSTNAME,内容为"mini2440"

cat >>./etc/sysconfig/HOSTNAME   然后键入 mini2440  回车 然后按下 ctrl+c 结束录入

注意:以上操作应该在建立的rootfs目录中

五. NFS文件系统测试

设置uboot启动参数为

bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.1.111:/home/sun/study/rootfs ip=192.168.1.230:192.168.1.1::255.255.255.0 console=ttySAC0,115200 init=linuxrc mem=64M

用uboot引导内核,如果可以进入终端,说明启动成功!
六. 因为暂时还没有应用程序,没有拷贝库文件,以后用到的时候再拷贝。
七. 制作jffs2文件系统文件
根文件系统制作好了,但是只能通过NFS挂载,因为只在主机上。如果想通过nandflash挂载,就必须制作yaffs2或者jffs2文件系统,因为我的uboot的nandflash yaffs2烧写功能有问题,通过友善之臂提供的yaffs2制作工具制作的yaffs2文件系统,只能通过supervivi下载才能用。所以重点介绍制作jffs2文件系统
(1)ftp://ftp.infradead.org/pub/mtd-utils/下载jffs2制作工具源码 mtd-utils,下载速度较慢,也可以在我的资源里下载 http://download.csdn.net/detail/YAOZHENGUO2006/3587952
(2)解压,然后make。首先映入眼帘的是缺少头文件/sys/acl.h因为主机linux版本不同是正常的。Baidu一下/sys/acl.h,能够在freebsd代码仓库中找到这个头文件,因为都是类unix系统,所以是一样的头文件。拷贝到/usr/include/sys/acl.h OK
然后又说没有 zlib.h 和 zconf.h 
终端下输入apt-get install  zliblg-dev ok
然后又说没有uuid.h
终端下输入apt-get install uuid-dev ok
还需要一个库
终端下输入apt-get install  liblzo2-dev ok
然后编译通过了,生成了mkfs.jffs2
进入目录输入
./mkfs.jffs2 -r /home/sun/study/rootfs -o rootfd.jffs2 -e 0x20000 –pad=0x500000 -s 0x800 -n
其中       -e是块大小  我们用的块大小是128k
                -s是页大小,我们用的页大小是2k
(3)烧入nandflash测试
设置bootargs

noinitrd root=/dev/mtdblock3 rootfstype=jffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M

在u-boot终端输入:

tftp rootfs.jffs2
nand erase 0x560000 500000
nand write 0x30008000 0x560000 500000
tftp zImage
bootm
   注意:这里内核是重新配置过的,因为友善之臂原版的2.6.32.2内核去掉了jffs2文件系统的支持,所以要重新编译一下内核,将jffs2文件系统的支持加入。就可以了,否则会提示找不到mtdblock3。



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值