网友通过本文主要向大家介绍了构建根文件系统,文件系统的类型是raw,文件系统的主要目的是,系统找不到指定的文件,u盘的文件系统等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
linux2.4.18----25.文件系统的构建
一. 文件系统的构建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库是最基础的任何程库就需要,是必需的
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程序创建的本身不要文件系统中
- cong@msi:/work/os/rootfs/ext2/etc$ cat fstab
- proc /proc proc defaults 0 0
- cong@msi:/work/os/rootfs/ext2/etc$ cat init.d/rcS
- #!/bin/sh
- mount -a
cong@msi:/work/os/rootfs/ext2$ cat creatext2.sh
- #!/bin/sh
- TOPDIR=`pwd`
- create_fs()
- {
- echo "cong: next create fs"
- #create filesystem
- cd /tmp/ext2
- #先创建系统目录
- sudo mkdir -pv dev/ tmp/ sys/ proc/
- sudo mknod ./dev/tty1 c 4 1
- sudo mknod ./dev/console c 5 1
- #sudo cp $TOPDIR/busybox ./bin/
- #sudo cp $TOPDIR/src/hello ./bin/sh
- sudo cp -arf $TOPDIR/lib ./
- sudo cp -arf $TOPDIR/bin ./
- sudo cp -arf $TOPDIR/sbin ./
- sudo cp -arf $TOPDIR/etc ./
- }
- mount_fs()
- {
- echo "cong: next losetup /dev/loop0"
- sudo losetup /dev/loop0 ./hdc.img
- #512*2048=1048576
- echo "cong: next losetup /dev/loop1"
- sudo losetup -o 1048576 /dev/loop1 /dev/loop0
- echo "cong: next show losetup all"
- sudo losetup -a
- echo "cong: next mount "
- mkdir /tmp/ext2
- sudo mount -t ext2 /dev/loop1 /tmp/ext2/
- }
- #fdisk hdc.img to ext2 83
- make_fs()
- {
- #64M
- dd if=/dev/zero of=./hdc.img bs=1M count=64
- fdisk ./hdc.img <<EOF
- n
- p
- 1
- 2048
- 131071
- t
- 83
- w
- EOF
- sleep 1
- fdisk -l ./hdc.img
- echo "cong: next losetup /dev/loop0"
- sudo losetup /dev/loop0 ./hdc.img
- #512*2048=1048576
- echo "cong: next losetup /dev/loop1"
- sudo losetup -o 1048576 /dev/loop1 /dev/loop0
- echo "cong: next show losetup all"
- sudo losetup -a
- echo "cong: next mkfs ext2 /dev/loop1"
- sudo mkfs.ext2 /dev/loop1
- echo "cong: next mount "
- mkdir /tmp/ext2
- sudo mount -t ext2 /dev/loop1 /tmp/ext2/
- create_fs
- }
- umount_fs()
- {
- sudo umount /tmp/ext2
- sudo losetup -d /dev/loop0
- sudo losetup -d /dev/loop1
- sudo losetup -a
- }
- clean_fs()
- {
- echo "cong: next umount /tmp/ext2"
- sudo umount /tmp/ext2
- echo "cong: next rm -rf /tmp/ext2"
- sudo rm -rf /tmp/ext2
- echo "cong: next losetup -d"
- sudo losetup -d /dev/loop0
- sudo losetup -d /dev/loop1
- echo "cong: next show losetup"
- sudo losetup -a
- echo "cong: next rm -rf ./hdc.img"
- rm -rf ./hdc.img
- }
- case "$1" in
- fs)
- make_fs
- ;;
- clean)
- clean_fs
- ;;
- mount)
- mount_fs
- ;;
- umount)
- umount_fs
- ;;
- *)
- make_fs
- ;;
- esac
- 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是不需要的