一. 文件系统的构建
1.
busybox的编译
方法: 用虚拟机的redhat9.0进行编译
版本: busybox-1.00 -->make menuconfig -->make -->make install
-
cong@msi:/work/os/rootfs/busybox/busybox-1.00$ readelf -a ./busybox | grep "NEEDED"
-
0x00000001 (NEEDED) Shared library: [libm.so.6] -->所以文件系统中需要包含这两个库libm与libcrypt,是可选的
-
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
-
0x00000001 (NEEDED) Shared library: [libc.so.6] -->libc库是最基础的任何程库就需要,是必需的
不需要选择 []Build BusyBox as a static binary (no shared libs)
2. 内核的修改
-
init/main.c中L128
-
//int root_mountflags = MS_RDONLY;
-
int root_mountflags = 0
去掉根文件系统的只读属性,
其中这个root_mountflags会在mount_root-->read_super中设置/dev/hda1的属性为MS_RDONLY
3.etc目录下的文件
-
cong@msi:/work/os/rootfs/ext2/etc$ tree
-
.
-
├── fstab -->只需要fstab与rcS
-
├── init.d
-
│ └── rcS -->只需要rcS与rcS
-
└── mtab -->这个文件是mount程序创建的本身不要文件系统中
fstab的内容:挂载proc
-
cong@msi:/work/os/rootfs/ext2/etc$ cat fstab
-
proc /proc proc defaults 0 0
rcS的内容,mount all
-
cong@msi:/work/os/rootfs/ext2/etc$ cat init.d/rcS
-
#!/bin/sh
-
mount -a
4. 制作根文件系统的脚本
cong@msi:/work/os/rootfs/ext2$ cat creatext2.sh
5.用到的
-
cong@msi:/work/os/rootfs/ext2$ tree
-
.
-
├── bin -->会复制为根文件系统的bin目录
-
│ ├── busybox
-
│ ├── busybox_0.60.5
-
│ ├── cat -> busybox
-
│ ├── cp -> busybox
-
│ ├── df -> busybox
-
│ ├── dmesg -> busybox
-
│ ├── echo -> busybox
-
│ ├── grep -> busybox
-
│ ├── hostname -> busybox
-
│ ├── ln -> busybox
-
│ ├── ls -> busybox
-
│ ├── mkdir -> busybox
-
│ ├── mknod -> busybox
-
│ ├── mount -> busybox
-
│ ├── mv -> busybox
-
│ ├── netstat -> busybox
-
│ ├── ping -> busybox
-
│ ├── ps -> busybox
-
│ ├── pwd -> busybox
-
│ ├── rm -> busybox
-
│ ├── sh -> busybox
-
│ ├── sync -> busybox
-
│ ├── touch -> busybox
-
│ ├── umount -> busybox
-
│ └── vi -> busybox
-
├── creatext2.sh -->制作根文件系统的脚本
-
├── etc -->会复制为根文件系统的etc目录
-
│ ├── fstab
-
│ ├── init.d
-
│ │ └── rcS
-
│ └── mtab
-
├── lib -->会复制为根文件系统的lib目录
-
│ ├── ld-linux.so.2 //解释器
-
│ ├── libc-2.3.2.so //libc库,这是最基础的
-
│ ├── libcrypt-2.3.2.so //剩下的libcrypt与libm库单跑helloworld是不需要的
-
│ ├── libcrypt.so.1 -> libcrypt-2.3.2.so
-
│ ├── libc.so.6 -> libc-2.3.2.so //但这儿的busybox用到了,就添加上了
-
│ ├── libm-2.3.2.so
-
│ └── libm.so.6 -> libm-2.3.2.so
-
├── Makefile
-
├── sbin -->会复制为根文件系统的sbin目录
-
│ ├── ifconfig -> ../bin/busybox
-
│ ├── init -> ../bin/busybox
-
│ ├── insmod -> ../bin/busybox
-
│ ├── lsmod -> ../bin/busybox
-
│ ├── modprobe -> ../bin/busybox
-
│ └── rmmod -> ../bin/busybox
-
└── src -->一些测试程序的代码
-
├── as
-
│ ├── hello.s
-
│ └── Makefile
-
├── hello.c
-
├── Makefile
-
├── mycompile.sh
-
└── nasm
-
├── hello
-
├── hello.o
-
├── hello.s
-
├── hello.s_nasm
-
├── init.c_hello
-
└── Makefile
-
-
8 directories, 54 files
5.1 所用到的文件打包
ext2.rar(下载后改名为ext2.tar.gz)
二.linux-2.6.24可用的文件系统
如果出现如下:
-
version glibc_2.7 not found -->说明需要更新libc的版本
-
-
cong@msi:/work/os/rootfs/ext3$ mv libc-2.3.2.so libc-2.3.2.so_bak
-
cong@msi:/work/os/rootfs/ext3$ rm libc.so.6
-
cong@msi:/work/os/rootfs/ext3$ ln -s libc-2.9.so libc.so.6
如果出现如下:
-
/sbin/init: relocation error: /lib/libc.so.6: symbol _rtld_global_ro, version
-
GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference -->说明需要更新ld的版本
-
-
cong@msi:/work/os/rootfs/ext3/lib$ rm ld-linux.so.2
-
cong@msi:/work/os/rootfs/ext3/lib$ mv /tmp/ld-2.9.so .
-
cong@msi:/work/os/rootfs/ext3/lib$ ln -s ld-2.9.so ld-linux.so.2
阅读(3040) | 评论(0) | 转发(0) |