构建根文件系统(*.yaffs2)的步骤: 一、最小根文件系统(first_fs.yaffs2)包括: 1、第一个进程init链接到busybox,即配置、编译、安装busybox 2、构建/dev/console /dev/null 3、构建/etc/inittab 4、配置文件中指定的程序 5、安装C library 具体步骤: 0、创建最小根文件系统文件夹:first_fs (创建位置不要求,本例为/home/book/first_fs ) 1、第一个进程init链接到busybox,即配置、编译、安装busybox (1)解压出busybox源码文件:busybox-1.7.0 (2)~/busybox-1.7.0$ make menuconfig //配置选项 (2)修改busybox顶层Makefile(如果不修改会出现各种警告!) 修改前: 175行 ARCH ?= $(SUBARCH) 176行 CROSS_COMPILE ?= 修改后: 175行 ARCH ?= ARM 176行 CROSS_COMPILE ?= arm-linux- (3)make (4)安装busybox到指定目录下:make CONFIG_PREFIX=/ home/book/first_fsinstall 注意:=与安装目录之间不能有空格!!! 安装后,first_fs文件夹里有:bin linuxrc ***in usr 2、构建/dev/console /dev/null (1)在first_fs 下创建dev文件夹 /first_fs$ mkdir dev (2)创建节点:/first_fs/dev$ sudo mknod console c 5 1 (3)创建节点:/first_fs/dev$ sudo mknod null c 1 3 3、构建/etc/inittab (1)/first_fs$ mkdir etc (2)/first_fs/detc$ vi inittab console::askfirst:-/bin/sh 4、配置文件中指定的程序(最小根文件系统中无此项) 5、配置C library 虚拟机/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib下有C library (1)first_fs$ mkdir lib (2)…../arm-linux/lib$ cp *.so* / home/book/first_fs /lib/-d -d 表示动态链接不可省 以上就是最小根文件系统!!!! 二、将最小根文件系统烧到开发板上 1、制作映象文件*.yaffs2 (1)解压制作mkyaffs2image工具 1)/work/system$ tar xjfyaffs_source_util_larger_small_page_nand.tar.bz2 解压制作工具 2)/work/system$cd development_util_ok/yaffs2 3)/yaffs2$ cd utils/ 4)/ util$ make 编译得到映像工具mkyaffs2imag (2)/utils$ sudo cp mkyaffs2image/usr/local/bin/ (3)sudo chmod +x/usr/local/bin/mkyaffs2image 增加可执行属性 (4)cd / home/book (5)mkyaffs2image first_fs first_fs.yaffs2 以上就制作出了first_fs.yaffs2映象文件 2、烧写到开发板 使用u-boot菜单选项y 使用dnw传输 扩充最小根文件系统: 一、Proc:内核提供的虚拟文件系统: 作用: 记录内核里当前有哪些应用文件在运行等,记录运行信息 1、/first_fs$ mkdir proc 2、挂载proc 方法一: (1)在etc/inittab 中增加一个配置文件: /first_fs$ vi etc/inittab console::askfirst:-/bin/sh ::sysinit:/etc/init.d/rcS (2)在etc中创建脚本文件init.d/rcS: /first_fs/etc$mkdir init.d /first_fs/etc$vi init.d/rcS mount –t proc none /proc /first_fs/etc$chmod +x etc/init.d/rcS 增加可执行属性 方法二: mount –a //根据tc/fstab来挂载根文件系统 (1)在etc/inittab 中增加一个配置文件: /first_fs$ vi etc/inittab console::askfirst:-/bin/sh ::sysinit:/etc/init.d/rcS (2)在etc/init.d/rcS 中增加一个命令: /first_fs$ vi etc/init.d/rcS mount –a /first_fs/etc$chmod +x etc/init.d/rcS 增加可执行属性!!!如果没加则不会挂接proc (2)/first_fs$ vi etc/fstab # device mount-point type options dump fsckorder proc /proc proc defaults 0 0 以上工作完成之后,重新制作映象文件first_fs.yaffs2,烧到开发板中 注:使用#cat /proc/mounts 命令可以查看当前已经挂接的文件系统。 二、使用mdev创建/dev中设备节点 mdev是udev简化版本, 自动创建/dev/设备节点,适用方法可以参考手册或busybox-1.7.0/ docs/mdev.txt 1、/first_fs$ mkdir sys 2、/first_fs$ vi eyc/fstab # device | mount-point | type | options | dump | fsck order | proc | /proc | proc | defaults | 0 | 0 | sysfs | /sys | sysfs | defaults | 0 | 0 | tmpfs | /dev | tmpfs | defaults | 0 | 1 |
3、/first_fs$ vi eyc/init.d/rcS mount –a mkdir /dev/pts mount –t devpts devpts /dev/pts echo /***in/mdev >/proc/sys/kernel/hotplug //当加载某个驱动或者有设备拔插时,内核就会调用hotplug, //hotplug指向/***in/mdev, mdev就会自动创建设备节点 mdev –s //在mdev目录下生成内核支持的所有设备节点 以上工作完成之后,重新制作映象文件first_fs.yaffs2,烧到开发板中。 注意:烧写first_fs.yaffs2后reboot会出现大量坏块,可能原因是etc/fstab和etc/init.d/rcS中出现拼写错误,或者字符之间使用了tab键隔开,字符之间只能是空格隔开!!!!!! 其他格式的映象文件:.***fs2 一般用于Nor flash上,也可以用在nand flash上 1、配置、编译、安装zlib库 $ cd /work/GUI/xwindow/X/deps $ tar x*** zlib-1.2.3.tar.gz $ cd zlib-1.2.3 $ ./config --shared --prefix=/usr/ //配置文件,--shared链接动态库;--prefix=/usr/安装在/usr目录下 $ make //编译 $ sudo make install 2、编译制作mkfs.jffs2 工具 $ cd /work/tools $ tar xjf mtd-utils-05.07.23.tar.bz2 $ cd mtd-utils-05.07.23/util $ make $ sudo make install 以上步骤得到jffs2映象文件制作工具: mkfs.jffs2 3、制作烧写*.jffs2映象文件 $ cd /work/nfs_root $ mkfs.jffs2 -n -s 2048 -e 128KiB -dfirst_fs -o first_fs.jffs2 以上步骤制作了first_fs.jffs2映象文件 4、烧写first_fs.jffs2 (1)修改uboot环境变量:进入菜单,输入q进入命令行,输入print,设置环境变量bootargs: OpenJTAG> set bootargs noinitrd root=/dev/mtdblock3rootfstype=jffs2init=/linuxrc console=ttySAC0 (2)Uboot菜单输入j,然后使用dnw将first_fs.jffs2现在到开发板 使用网络文件系统NFS: 文件系统放在服务器上的,内核启动时从服务器上识别目录并将目录作为根文件系统,就不需要再烧写根文件系统里,保持同步 #ifconfig eth0 up 接上网线,配置ip,处于同一个网段即可,服务器的ip为192.168.1.19 #ifconfig eth0 192.168.1.11 ping一下服务器192.168.1.19 #ping 192.168.1.19 //发现可以ping通 挂接NFS: 需要满足的条件: 1、服务器“允许”那个目录可以被挂接 2、单板挂接 a、手工挂接 从flash上启动根文件系统,再用命令挂接NFS: (1)服务器“允许”那个目录可以被挂接 /first_fs$ sudo vi /etc/exports 添加:/work/nfs_root/first_fs *(rw_sync_no_root_squash) 其中/work/nfs_root/是根文件系统所在目录 重启NFS服务: /first_fs$ sudo /etc/init.d/nfs-kernel-serverrestart 则服务器允许挂接这个目录first_fs (2)单板挂载: #mkdir /mnt #mount –t nfs –o nolock 192.168.1.19:/work/nfs_root/first_fs/mnt 则/mnt下的文件和服务器上first_fs下的文件相同 b、直接从NFS启动:修改uboot命令行参数bootargs 设置bootargs的格式:noinitrd root=/dev/rootnfsroot=[:][,] ip=:::::: ([]表示可省略,<>不可省) set bootagrs noinitrdroot=/dev/root nfsroot=192.168.1.19:/work/nfs_root/first_fs ip=192.168.1.11:19 2.68.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 具体的参数根据自己的网络参数设置 设置好之后,重新reboot,启动则可
|