程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> linux2.4.18----25.文件系統的構建

linux2.4.18----25.文件系統的構建

編輯:JAVA綜合教程

linux2.4.18----25.文件系統的構建


一. 文件系統的構建
1.busybox的編譯
方法: 用虛擬機的redhat9.0進行編譯
版本: busybox-1.00 -->make menuconfig -->make -->make install
  1. cong@msi:/work/os/rootfs/busybox/busybox-1.00$ readelf -a ./busybox | grep "NEEDED"
  2. 0x00000001 (NEEDED) Shared library: [libm.so.6] -->所以文件系統中需要包含這兩個庫libm與libcrypt,是可選的
  3. 0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
  4. 0x00000001 (NEEDED) Shared library: [libc.so.6] -->libc庫是最基礎的任何程庫就需要,是必需的
不需要選擇 []Build BusyBox as a static binary (no shared libs)

2. 內核的修改
  1. init/main.c中L128
  2. //int root_mountflags = MS_RDONLY;
  3. int root_mountflags = 0
去掉根文件系統的只讀屬性,
其中這個root_mountflags會在mount_root-->read_super中設置/dev/hda1的屬性為MS_RDONLY

3.etc目錄下的文件
  1. cong@msi:/work/os/rootfs/ext2/etc$ tree
  2. .
  3. ├── fstab -->只需要fstab與rcS
  4. ├── init.d
  5. │ └── rcS -->只需要rcS與rcS
  6. └── mtab -->這個文件是mount程序創建的本身不要文件系統中
fstab的內容:掛載proc
  1. cong@msi:/work/os/rootfs/ext2/etc$ cat fstab
  2. proc /proc proc defaults 0 0
rcS的內容,mount all
  1. cong@msi:/work/os/rootfs/ext2/etc$ cat init.d/rcS
  2. #!/bin/sh
  3. mount -a
4.制作根文件系統的腳本
cong@msi:/work/os/rootfs/ext2$ cat creatext2.sh

  1. #!/bin/sh
  2. TOPDIR=`pwd`
  3. create_fs()
  4. {
  5. echo "cong: next create fs"
  6. #create filesystem
  7. cd /tmp/ext2

  8. #先創建系統目錄
  9. sudo mkdir -pv dev/ tmp/ sys/ proc/
  10. sudo mknod ./dev/tty1 c 4 1
  11. sudo mknod ./dev/console c 5 1
  12. #sudo cp $TOPDIR/busybox ./bin/
  13. #sudo cp $TOPDIR/src/hello ./bin/sh
  14. sudo cp -arf $TOPDIR/lib ./
  15. sudo cp -arf $TOPDIR/bin ./
  16. sudo cp -arf $TOPDIR/sbin ./
  17. sudo cp -arf $TOPDIR/etc ./
  18. }
  19. mount_fs()
  20. {
  21. echo "cong: next losetup /dev/loop0"
  22. sudo losetup /dev/loop0 ./hdc.img
  23. #512*2048=1048576
  24. echo "cong: next losetup /dev/loop1"
  25. sudo losetup -o 1048576 /dev/loop1 /dev/loop0
  26. echo "cong: next show losetup all"
  27. sudo losetup -a

  28. echo "cong: next mount "
  29. mkdir /tmp/ext2
  30. sudo mount -t ext2 /dev/loop1 /tmp/ext2/
  31. }
  32. #fdisk hdc.img to ext2 83
  33. make_fs()
  34. {
  35. #64M
  36. dd if=/dev/zero of=./hdc.img bs=1M count=64
  37. fdisk ./hdc.img <<EOF
  38. n
  39. p
  40. 1
  41. 2048
  42. 131071
  43. t
  44. 83
  45. w
  46. EOF
  47. sleep 1
  48. fdisk -l ./hdc.img

  49. echo "cong: next losetup /dev/loop0"
  50. sudo losetup /dev/loop0 ./hdc.img
  51. #512*2048=1048576
  52. echo "cong: next losetup /dev/loop1"
  53. sudo losetup -o 1048576 /dev/loop1 /dev/loop0
  54. echo "cong: next show losetup all"
  55. sudo losetup -a

  56. echo "cong: next mkfs ext2 /dev/loop1"
  57. sudo mkfs.ext2 /dev/loop1

  58. echo "cong: next mount "
  59. mkdir /tmp/ext2
  60. sudo mount -t ext2 /dev/loop1 /tmp/ext2/
  61. create_fs
  62. }
  63. umount_fs()
  64. {
  65. sudo umount /tmp/ext2
  66. sudo losetup -d /dev/loop0
  67. sudo losetup -d /dev/loop1
  68. sudo losetup -a
  69. }

  70. clean_fs()
  71. {
  72. echo "cong: next umount /tmp/ext2"
  73. sudo umount /tmp/ext2
  74. echo "cong: next rm -rf /tmp/ext2"
  75. sudo rm -rf /tmp/ext2
  76. echo "cong: next losetup -d"
  77. sudo losetup -d /dev/loop0
  78. sudo losetup -d /dev/loop1
  79. echo "cong: next show losetup"
  80. sudo losetup -a
  81. echo "cong: next rm -rf ./hdc.img"
  82. rm -rf ./hdc.img
  83. }

  84. case "$1" in
  85. fs)
  86. make_fs
  87. ;;
  88. clean)
  89. clean_fs
  90. ;;
  91. mount)
  92. mount_fs
  93. ;;
  94. umount)
  95. umount_fs
  96. ;;
  97. *)
  98. make_fs
  99. ;;
  100. esac
5.用到的
  1. cong@msi:/work/os/rootfs/ext2$ tree
  2. .
  3. ├── bin -->會復制為根文件系統的bin目錄
  4. │ ├── busybox
  5. │ ├── busybox_0.60.5
  6. │ ├── cat -> busybox
  7. │ ├── cp -> busybox
  8. │ ├── df -> busybox
  9. │ ├── dmesg -> busybox
  10. │ ├── echo -> busybox
  11. │ ├── grep -> busybox
  12. │ ├── hostname -> busybox
  13. │ ├── ln -> busybox
  14. │ ├── ls -> busybox
  15. │ ├── mkdir -> busybox
  16. │ ├── mknod -> busybox
  17. │ ├── mount -> busybox
  18. │ ├── mv -> busybox
  19. │ ├── netstat -> busybox
  20. │ ├── ping -> busybox
  21. │ ├── ps -> busybox
  22. │ ├── pwd -> busybox
  23. │ ├── rm -> busybox
  24. │ ├── sh -> busybox
  25. │ ├── sync -> busybox
  26. │ ├── touch -> busybox
  27. │ ├── umount -> busybox
  28. │ └── vi -> busybox
  29. ├── creatext2.sh -->制作根文件系統的腳本
  30. ├── etc -->會復制為根文件系統的etc目錄
  31. │ ├── fstab
  32. │ ├── init.d
  33. │ │ └── rcS
  34. │ └── mtab
  35. ├── lib -->會復制為根文件系統的lib目錄
  36. │ ├── ld-linux.so.2 //解釋器
  37. │ ├── libc-2.3.2.so //libc庫,這是最基礎的
  38. │ ├── libcrypt-2.3.2.so //剩下的libcrypt與libm庫單跑helloworld是不需要的
  39. │ ├── libcrypt.so.1 -> libcrypt-2.3.2.so
  40. │ ├── libc.so.6 -> libc-2.3.2.so//但這兒的busybox用到了,就添加上了
  41. │ ├── libm-2.3.2.so
  42. │ └── libm.so.6 -> libm-2.3.2.so
  43. ├── Makefile
  44. ├── sbin -->會復制為根文件系統的sbin目錄
  45. │ ├── ifconfig -> ../bin/busybox
  46. │ ├── init -> ../bin/busybox
  47. │ ├── insmod -> ../bin/busybox
  48. │ ├── lsmod -> ../bin/busybox
  49. │ ├── modprobe -> ../bin/busybox
  50. │ └── rmmod -> ../bin/busybox
  51. └── src -->一些測試程序的代碼
  52. ├── as
  53. │ ├── hello.s
  54. │ └── Makefile
  55. ├── hello.c
  56. ├── Makefile
  57. ├── mycompile.sh
  58. └── nasm
  59. ├── hello
  60. ├── hello.o
  61. ├── hello.s
  62. ├── hello.s_nasm
  63. ├── init.c_hello
  64. └── Makefile

  65. 8 directories, 54 files
5.1 所用到的文件打包
ext2.rar(下載後改名為ext2.tar.gz)


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved