linux初学-内核编译以及文件系统3
以上2篇小结介绍了内核编译以及烧写,那么linux系统运行起来还需要文件系统的支持。我在这边就把我做的文件系统的移植以及busybox的编译介绍给大家。可能存在一些错误,还请大家指教指教:
Busybox已经有很多版本了,现在最新的版本是
Linux Module Utilities>
[ ] insmod
[ ] rmmod
[ ] lsmod
[ ] modprobe
等选项的时候,要编译
参考了网上人家的资料以及建议,本人现在采用busybox
# Make menuconfig
Busybox配置如下:
Busybox Settings >
General Configuration >
[*] Support for devfs /* 这个选项在
Build Options >
[*] Build BusyBox as a static binary (no shared libs)
[*] Do you want to build BusyBox with a Cross Compiler?
(/usr/local/arm/
/* 该交叉编译路径的修改在Config.in文件301行 */
Init Utilities >
[*] init
[*] Support reading an inittab file
/* 支持init读取/etc/inittab配置文件,一定要选上 */
Shells >
Choose your default shell (ash) >
/* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件
* 看看我们前头的linuxrc脚本的头一句:
* #!/bin/sh 是由bin/sh来解释执行的
*/
[*] ash
Coreutils >
[*] cp
[*] cat
[*] ls
[*] mkdir
[*] echo (basic SuSv3 version taking no options)
[*] env
[*] mv
[*] pwd
[*] rm
[*] touch
Editors >
[*] vi
Linux System Utilities >
[*] mount
[*] umount
[*] Support loopback mounts
[*] Support for the old /etc/mtab file
/* 注意不要选择支持2.4内核,选上的话,会出现编译错误 */
编译make
安装make install /* 这个时候在目录下可以看见_install目录,该目录就是我们所需要的 */
创建linuxrc文件
内容如下:
$ vi linuxrc
#!/bin/sh
echo "Hello linux !!!"
exec /sbin/init
然后修改权限:chmod 775 linuxrc
制作根文件系统:
(1)创建目录结构
# cd /work/fs
# mkdir dev etc lib mnt proc usr
(2)创建设备节点
# cd /work/fs/dev
# mknod console c 5 1
# mknod full c 1 7
# mknod kmem c 1 2
# mknod mem c 1 1
# mknod null c 1 3
# mknod port c 1 4
# mknod random c 1 8
# mknod urandom c 1 9
# mknod zero c 1 5
# for i in `seq 0 7`; do (特别注意,不是单引号,而是TAB健上边那个,下同)
# mknod loop$i b 7 $i
# done
# for i in `seq 0 9`; do
# mknod ram$i b 1 $i
# done
# ln -s ram1 ram
# mknod tty c 5 0
# for i in `seq 0 9`; do
# mknod tty$i c 4 $i
# done
# for i in `seq 0 9`; do
# mknod vcs$i b 7 $i
# done
# ln -s vcs0 vcs
# for i in `seq 0 9`; do
# mknod vcsa$i b 7 $i
# done
# ln -s vcsa0 vcsa
(3)添加busybox的应用程序
cp –af …./busybox
(4) 添加系统文件以及库文件
# cp a ./rootfs/etc/* ../fs/etc
# cp a ./rootfs/lib/* ./fs/lib
(5)制作ramdisk
# mkdir /mnt/initrd
# dd if=/dev/zero of=K92.img bs=1k count=8192
# mkfs.ext2 -F K92.img
# mount o loop K92.img /mnt/initrd
# cp a ./fs/* /mnt/initrd
# mount /mnt/initrd
# gzip –c –v9 K92.img > K92.img.gz
(5)配置应用程序自动启动
我们采用的是busybox进行启动,busybox会在linux内核刚刚完成加载后就立即进行启动,此后busybox会跳转到它自己的init进程开始执行:
。 为init进程设置信号处理进程
。 对控制台进行初始化
。 解西inittab文件 即/etc/inittab
。 在默认情况下,busybox会运行系统的初始化脚本/etc/init.d/rcS
。 运行导致init暂停的inittab命令
。 运行仅执行一次的inittab命令
所以我们在配置应用程序自动运行的情况下,就可以通过修改初始化脚本/etc/init.d/rcS来达到这个目的;
例如:
#!/bin/sh
/bin/mount –a
/sbin/route
/sbin/route add default gw 192.168.10.1
/linuxrc
/start-hello /* 自动运行的应用程序 */