文件系统的"构建"
.类型
1.windows系统
ntfs fat32
2.linux系统
ext2/3/4
3.net file system
nfs
4.virt file system
romdisk / ramdisk
5.嵌入式文件系统(flash)
cramfs / jffs/jffs2/jffs3 / yaffs/yaffs2/yaffs3
.基本结构(vfs子系统)
init进程分析
init_main
console_init();
......
parse_inittab(); // 解析inittab脚本
inittab
::sysinit:/etc/init.d/rcS<span style="white-space:pre"> </span>//先启动这个文件
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init
rcS文件<span style="white-space:pre"> </span>//一开始的环境变量等
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
ifconfig eth0 192.168.1.176
进入busybox目录
一、修改 Makefile 中的体系结构 ARCH 和交叉编译器前缀 CROSS_COMPILE
# vim Makefile
把 164 行修改为:
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
把 190 行修改为:
ARCH = arm
二、配置BusyBox
BusyBox 的配置程序和 linux 内核菜单配置方式简直一模一样。 熟悉用 make menuconfig
方式配置 linux 内核的朋友很容易上手。
# make menuconfig
选上以下几项:
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
这个选项是一定要选上,这样才能把BusyBox 编译成静态链接的可执行文件,
运行时才独立于其他函数库,否则需要其他库文件才能运行 BusyBox。
Busybox Library Tuning --->
[*] vi-style line editing commands
选上 VI 风格的行编辑器命令。
[*] Fancy shell prompts
Linux Module Utilities --->
[ ] Simplified modutils
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
[*] depmod
取消选中 Simplified modutils,使用完整的模块工具命令:insmod、rmmod……
确保支持 mdev(mdev 是 udev 设备文件系统的精简版),确保以下几项被选中:
Linux System Utilities ---> [*] mdev
[*] Support /etc/mdev.conf
[*] Support subdirs/symlinks
[*] Support regular expressions substitutions when renaming dev
[*] Support command execution at device addition/removal
[*] Support loading of firmwares
其它选项都是一些 linux 基本命令选项,自己需要哪些命令就编译进去,一般用默认的
就可以了,配置好后退出并保存。
# vim Makefile
把 164 行修改为:
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
把 190 行修改为:
ARCH = arm
二、配置BusyBox
BusyBox 的配置程序和 linux 内核菜单配置方式简直一模一样。 熟悉用 make menuconfig
方式配置 linux 内核的朋友很容易上手。
# make menuconfig
选上以下几项:
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
这个选项是一定要选上,这样才能把BusyBox 编译成静态链接的可执行文件,
运行时才独立于其他函数库,否则需要其他库文件才能运行 BusyBox。
Busybox Library Tuning --->
[*] vi-style line editing commands
选上 VI 风格的行编辑器命令。
[*] Fancy shell prompts
Linux Module Utilities --->
[ ] Simplified modutils
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
[*] depmod
取消选中 Simplified modutils,使用完整的模块工具命令:insmod、rmmod……
确保支持 mdev(mdev 是 udev 设备文件系统的精简版),确保以下几项被选中:
Linux System Utilities ---> [*] mdev
[*] Support /etc/mdev.conf
[*] Support subdirs/symlinks
[*] Support regular expressions substitutions when renaming dev
[*] Support command execution at device addition/removal
[*] Support loading of firmwares
其它选项都是一些 linux 基本命令选项,自己需要哪些命令就编译进去,一般用默认的
就可以了,配置好后退出并保存。
三、编译make
四、安装make install以前的版本可能默认安装到根目录,这样就跟原来系统的目录冲突,所以尽量指明路径,高版本的就是在本目录下_install目录里。
这里就可以进去查看有一些bin目录,但还不能用,最起码需要加上个etc引导让文件系统启动。
虽然启动了,但因为没有其他目录等,可能执行其他不成功。
如:执行reboot 会出现reboot: can't open '/proc': No such file or directory。
所以需要创建/proc等其他目录,还有
导入C库是让系统可以执行C程序等。
当然可以加上其他目录,创建成一个满足基本需求的最小文件系统。
参考:
http://blog.chinaunix.net/uid-30254565-id-5044374.html
http://blog.sina.com.cn/s/blog_7943319e01018g5w.html
当然实际上使用的话,可能还需要添加其他的一些东西,根据需求。
添加
mkyaffs2image工具
将mkyaffs2image拷贝到PC机的/bin目录下,执行如下操作
mkyaffs2image /rootfs/ rootfs.img创建出文件镜像。
就可以进行烧写了。
附:
在制作文件系统的时候,如果感觉nand flash烧写这样操作麻烦, 可以使用nfs直接挂载过去。
可自行搜索参考内核上的nfs配置。
错误:
1、request_module: runaway loop modprobe binfmt-464c
http://blog.csdn.net/ab198604/article/details/5755391
http://blog.sina.com.cn/s/blog_740ccd0401011ivx.html