【记录】制作最小根文件系统
2016-08-08 15:21
399 查看
概述
所谓制作根文件系统,就是创建各种目录,并在里面创建各种文件。如在/bin,/sbin目录下存放各种可执行程序,在/etc目录下存放配置文件,在/lib目录下存放库文件。通常,使用Busybox来创建上述目录下的可执行文件。
最小根文件系统
内容包括1./dev/console,/dev/null
2.init程序,由busybox创建
3./etc/inittab(配置文件)
4.配置文件指定的应用程序
5.C库
配置,编译busybox
busybox将众多的UNIX命令集合到一个很小的可执行程序中,它为提供的选项少,但能够满足一般应用,为各种小型的或者嵌入式系统提供了一个比较完整的工具集。使用busybox创建最小根文件系统时,只需要在/dev目录下创建必要的设备节点,在/etc目录下创建一些配置文件即可。
1.解压
book@book-desktop:/work/system$ tar xjf busybox-1.7.0.tar.bz2
2.编译
参考\busybox-1.7.0\INSTALL
make menuconfig # This creates a file called ".config" make # This creates the "busybox" executable make install # or make CONFIG_PREFIX=/path/from/root install
第一步:
make menuconfig
编译完成后,生成.config文件,并读取.config配置信息
BusyBox 1.7.0 Configuration --------------------------------------------------------------------------------------------------------- +-------------------------------------- Busybox Configuration ---------------------------------------+ | Arrow keys navigate the menu. <Enter> selects submenus --->. Highlighted letters are hotkeys. | | Pressing <Y> includes, <N> excludes, <M> modularizes features. Press <Esc><Esc> to exit, <?> for | | Help, </> for Search. Legend: [*] built-in [ ] excluded <M> module < > module capable | | | | +------------------------------------------------------------------------------------------------+ | | | Busybox Settings ---> | | | | --- Applets | | | | Archival Utilities ---> | | | | Coreutils ---> | | | | Console Utilities ---> | | | | Debian Utilities ---> | | | | Editors ---> | | | | Finding Utilities ---> | | | | Init Utilities ---> | | | | Login/Password Management Utilities ---> | | | | Linux Ext2 FS Progs ---> | | | | Linux Module Utilities ---> | | | | Linux System Utilities ---> | | | | Miscellaneous Utilities ---> | | | +-------------v(+)-------------------------------------------------------------------------------+ | +----------------------------------------------------------------------------------------------------+ | <Select> < Exit > < Help > | +----------------------------------------------------------------------------------------------------+ BusyBox 1.7.0 Configuration
修改Makefile,设置交叉编译
设置tab completion
第二步:执行make
book@book-desktop:/work/system/busybox-1.7.0$ make
注意:第一次编译时出错,错误信息如下,原因是没有修改Makefile中的交叉编译
In file included from /usr/include/linux/netfilter_ipv4.h:8, from ipsvd/tcpudp.c:33: /usr/include/linux/netfilter.h:55: error: field ‘in’ has incomplete type /usr/include/linux/netfilter.h:56: error: field ‘in6’ has incomplete type ipsvd/tcpudp.c: In function ‘tcpudpsvd_main’: ipsvd/tcpudp.c:314: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result make[1]: *** [ipsvd/tcpudp.o] Error 1 make: *** [ipsvd] Error 2
第三步:安装
注意:千万不要直接make install,该命令会安装到PC机中,将破坏系统
①创建一个目录
book@book-desktop:/work/system/busybox-1.7.0$ mkdir -p /work/nfs_root/first_fs
②把busybox安装到该文件夹下
book@book-desktop:/work/system/busybox-1.7.0$ make CONFIG_PREFIX=/work/nfs_root/first_fs install
③进入文件夹查看
book@book-desktop:/work/nfs_root/first_fs$ ls
bin linuxrc sbin usr
构造最小根文件系统
busybox安装后,已经有了基本的目录。继续创建其他目录。1.创建设备文件:/dev/console,/dev/null
仿照PC,使用mknod创建
book@book-desktop:/work/nfs_root/first_fs$ ls /dev/console /dev/null -l crw------- 1 root root 5, 1 2016-08-03 08:04 /dev/console crw-rw-rw- 1 root root 1, 3 2016-08-02 11:07 /dev/null book@book-desktop:/work/nfs_root/first_fs$ book@book-desktop:/work/nfs_root/first_fs$ mkdir dev book@book-desktop:/work/nfs_root/first_fs$ cd dev book@book-desktop:/work/nfs_root/first_fs/dev$ sudo mknod console c 5 1 [sudo] password for book: book@book-desktop:/work/nfs_root/first_fs/dev$ ls console book@book-desktop:/work/nfs_root/first_fs/dev$ sudo mknod null c 1 3 book@book-desktop:/work/nfs_root/first_fs/dev$ ls -l total 0 crw-r--r-- 1 root root 5, 1 2016-08-03 20:42 console crw-r--r-- 1 root root 1, 3 2016-08-03 20:43 null
2.构造/etc/inittab(配置文件)
book@book-desktop:/work/nfs_root/first_fs$ mkdir etc book@book-desktop:/work/nfs_root/first_fs$ vi etc/inittab
在inittab中添加下面内容
console::askfirst:-/bin/sh
3.安装C库
将目录/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib下的库文件拷贝到lib目录下
book@book-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ mkdir /work/nfs_root/first_fs/lib book@book-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp *.so* /work/nfs_root/first_fs/lib/ -d
此时,这就是我们的最小根文件系统。
book@book-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cd /work/nfs_root/first_fs book@book-desktop:/work/nfs_root/first_fs$ ls bin dev etc lib linuxrc sbin usr
制作映像文件
将制作好的最小文件系统,制作为映像文件,就可以烧写到开发板上运行了。制作yaffs2镜像
1.解压yaffs2工具book@book-desktop:/work/system$ tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2 book@book-desktop:/work/system$ cd Development_util_ok/ book@book-desktop:/work/system/Development_util_ok$ ls yaffs yaffs2
2.编译
进入/work/system/Development_util_ok/yaffs2/utils目录下,执行make
编译出的工具如下
book@book-desktop:/work/system/Development_util_ok/yaffs2/utils$ ls -l total 132 -rw------- 1 book book 1770 2008-07-08 00:35 Makefile -rwxr-xr-x 1 book book 18266 2016-08-03 21:05 mkyaffs2image -rw------- 1 book book 19669 2008-07-08 00:36 mkyaffs2image.c -rw-r--r-- 1 book book 9412 2016-08-03 21:05 mkyaffs2image.o -rwxr-xr-x 1 book book 18126 2016-08-03 21:05 mkyaffsimage -rw------- 1 book book 16206 2008-02-29 10:26 mkyaffsimage.c -rw-r--r-- 1 book book 8168 2016-08-03 21:05 mkyaffsimage.o -rw------- 1 book book 6731 2008-02-29 10:26 nand_ecc.c -rw-r--r-- 1 book book 1776 2016-08-03 21:05 nand_ecc.o lrwxrwxrwx 1 book book 14 2016-08-03 21:05 yaffs_ecc.c -> ../yaffs_ecc.c -rw-r--r-- 1 book book 2496 2016-08-03 21:05 yaffs_ecc.o -rw------- 1 book book 1416 2008-02-29 10:26 yaffs_packedtags1.c -rw-r--r-- 1 book book 1216 2016-08-03 21:05 yaffs_packedtags1.o lrwxrwxrwx 1 book book 22 2016-08-03 21:05 yaffs_packedtags2.c -> ../yaffs_packedtags2.c -rw-r--r-- 1 book book 2160 2016-08-03 21:05 yaffs_packedtags2.o lrwxrwxrwx 1 book book 23 2016-08-03 21:05 yaffs_tagsvalidity.c -> ../yaffs_tagsvalidity.c -rw-r--r-- 1 book book 822 2016-08-03 21:05 yaffs_tagsvalidity.o book@book-desktop:/work/system/Development_util_ok/yaffs2/utils$
3.将mkyaffs2image工具拷贝到系统目录/usr/local/bin/下
book@book-desktop:/work/system/Development_util_ok/yaffs2/utils$ sudo cp mkyaffs2image /usr/local/bin/
4.加上可执行属性
book@book-desktop:/work/system/Development_util_ok/yaffs2/utils$ sudo chmod +x /usr/local/bin/mkyaffs2image
创建映像文件
book@book-desktop:/work/nfs_root$ ls first_fs fs_mini.jffs2 fs_mini_mdev.tar.bz2 fs_mini.yaffs2 fs_qtopia_ts.yaffs2 temp first_fs.jffs2 fs_mini_mdev fs_mini_mdev.yaffs2 fs_qtopia.jffs2 fs_qtopia.yaffs2 first_fs.yaffs2 fs_mini_mdev.jffs2 fs_mini.tar.bz2 fs_qtopia.tar.bz2 fs_xwindow.tar.bz2 book@book-desktop:/work/nfs_root$ mkyaffs2image mkyaffs2image: image building tool for YAFFS2 built Aug 3 2016 usage: mkyaffs2image dir image_file [convert] dir the directory tree to be converted image_file the output file to hold the image 'convert' produce a big-endian image from a little-endian machine book@book-desktop:/work/nfs_root$ mkyaffs2image first_fs first_fs.yaffs2
6.下载验证
book@book-desktop:/work/nfs_root$ ls first_fs fs_mini.jffs2 fs_mini_mdev.tar.bz2 fs_mini.yaffs2 fs_qtopia_ts.yaffs2 temp first_fs.jffs2 fs_mini_mdev fs_mini_mdev.yaffs2 fs_qtopia.jffs2 fs_qtopia.yaffs2 first_fs.yaffs2 fs_mini_mdev.jffs2 fs_mini.tar.bz2 fs_qtopia.tar.bz2 fs_xwindow.tar.bz2
将first_fs.yaffs2下载到开发板上验证动作。u-boot和DNW下载。
##### 100ask Bootloader for OpenJTAG ##### Download u-boot to Nand Flash [k] Download Linux kernel uImage [j] Download root_jffs2 image [y] Download root_yaffs image [d] Download to SDRAM & Run [z] Download zImage into RAM [g] Boot linux from RAM [f] Format the Nand Flash [s] Set the boot parameters [b] Boot the system [r] Reboot u-boot [q] Quit from menu Enter your selection: y USB host is connected. Waiting a download. Now, Downloading [ADDRESS:30000000h,TOTAL:10591690] RECEIVED FILE SIZE:10591690 (738KB/S, 14S) NAND erase: device 0 offset 0x260000, size 0xfda0000 Skipping bad block at 0x00960000 Skipping bad block at 0x031e0000 Skipping bad block at 0x03fc0000 Skipping bad block at 0x04a60000 Skipping bad block at 0x06e00000 Skipping bad block at 0x091c0000 Skipping bad block at 0x09a60000 Skipping bad block at 0x0d640000 Skipping bad block at 0x0e480000 Erasing at 0xffe0000 -- 100% complete. OK NAND write: device 0 offset 0x260000, size 0xa19dc0 Bad block at 0x960000 in erase block from 0x960000 will be skipped Writing data at 0xc6b000 -- 100% complete. 10591680 bytes written: OK
按b启动
VFS: Mounted root (yaffs filesystem). Freeing init memory: 140K init started: BusyBox v1.7.0 (2016-08-03 20:18:39 CST) Please press Enter to activate this console. starting pid 763, tty '/dev/console': '/bin/sh' # ls bin etc linuxrc sbin dev lib lost+found usr #
完善最小根文件系统
创建proc目录,挂载虚拟文件系统book@book-desktop:/work/nfs_root/first_fs$ mkdir proc
配置文件中设置挂载
book@book-desktop:/work/nfs_root/first_fs$ vi etc/inittab
添加配置脚本文件::sysinit:/etc/init.d/rcS
创建配置脚本,写入挂载内容
book@book-desktop:/work/nfs_root/first_fs$ mkdir etc/init.d book@book-desktop:/work/nfs_root/first_fs$ vi etc/init.d/rcS mount -t proc none /proc
加上可执行属性
book@book-desktop:/work/nfs_root/first_fs$ chmod +x etc/init.d/rcS
也可以在rcS中使用mount -a命令,该命令依赖于etc/fstab
book@book-desktop:/work/nfs_root/first_fs$ vim etc/fstab # device mount-point type options dump fsck order proc /proc proc defaults 0 0
此时
book@book-desktop:/work/nfs_root/first_fs$ cat etc/fstab # device mount-point type options dump fsck order proc /proc proc defaults 0 0 book@book-desktop:/work/nfs_root/first_fs$ cat etc/init.d/rcS #mount -t proc none /proc mount -a
生成映像文件,验证
book@book-desktop://$ cd /work/nfs_root/ book@book-desktop:/work/nfs_root$ mkyaffs2image first_fs first_fs.yaffs2
自动创建dev目录下的节点(udev,buybox中的简化版本mdev)
参考\busybox-1.7.0\docs\mdev.txtHere's a typical code snippet from the init script: [1] mount -t sysfs sysfs /sys [2] echo /bin/mdev > /proc/sys/kernel/hotplug [3] mdev -s Of course, a more "full" setup would entail executing this before the previous code snippet: [4] mount -t tmpfs mdev /dev [5] mkdir /dev/pts [6] mount -t devpts devpts /dev/pts
创建目录
book@book-desktop:/work/nfs_root/first_fs$ mkdir sys
添加挂载点
book@book-desktop:/work/nfs_root/first_fs$ vi etc/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 0
在rcS中添加配置内容
book@book-desktop:/work/nfs_root/first_fs$ vi etc/init.d/rcS #mount -t proc none /proc mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s
制作映像文件,下载验证
book@book-desktop:/work/nfs_root$ mkyaffs2image first_fs first_fs.yaffs2
VFS: Mounted root (yaffs filesystem). Freeing init memory: 140K init started: BusyBox v1.7.0 (2016-08-03 20:18:39 CST) starting pid 764, tty '': '/etc/init.d/rcS' Please press Enter to activate this console. starting pid 769, tty '/dev/console': '/bin/sh' # ls bin etc linuxrc proc sys usr dev lib lost+found sbin # # ls dev console ptyrf tty17 ttyq7 dsp ptys0 tty18 ttyq8 event0 ptys1 tty19 ttyq9 fb0 ptys2 tty2 ttyqa full ptys3 tty20 ttyqb
错误
第一次,总是报错无法挂载tmpfs,原因是,在添加挂载点时,拼写错误错误:
tmpfs /dev tempfs defaults 0 0
正确:
tmpfs /dev tmpfs defaults 0 0
相关文章推荐
- NAND FLASH制作YAFFS文件系统问题记录
- linux最小根文件系统制作简介
- #嵌入式Linux最小系统移植# yaffs2根文件系统移植出错记录
- 最小文件系统树的制作
- 最小文件系统树的制作
- FL2440移植linux-3.0全过程(3)制作initramfs最小文件系统
- 制作最小根文件系统
- 最小文件系统树的制作
- TQ2440制作最小根文件系统
- 最小文件系统树的制作
- busybox制作根文件系统配置记录及注意点
- 内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统
- 单片机最小系统制作记录
- 最小文件系统树的制作
- 基于嵌入式Linux平台的最小文件系统的制作
- 制作最小根文件系统
- 最小根文件系统制作
- 内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统
- 最小文件系统树的制作
- 最小文件系统树的制作