快速业务通道

修改initrd,创建一个微型的linux系统

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-02

创建一个MiniLinux:

通过对RamDisk(Initrd)分析,现在了解了initrd的主要原理及工作流程,为了加深对该过程的理解,下面使用initrd创建一个微型的linux系统,也更加深对linux开机过程的原理性了解:并用脚本实现该过程;

环境:宿主机:RedHat 5.4 内核:2.6.18

要求:实现最基本的启动,正常启动后给用户一个shell;后期拓展,需要实现将根文件系统挂载为RW,实现命令:mount、umount、vi、ls、touch、mkdir等.也可以后期按照需求添加各项功能,逐渐丰富;

1. 配置所需的环境:新增硬盘/dev/sdb(大小512M~1G绰余)、建立所需目录(这里假定新增的硬盘为sdb)

  1. # mkdir -v /mnt/sysroot
  2. # mkdir -v /mnt/boot
  3. # mkdir -v /tmp/init

注:在虚拟机里面添加硬盘时将硬盘放到自己容易找到的位置,最好不用默认位置;

2. 对新硬盘分区,格式化后挂载到/mnt目录下的适当位置

  1. # fdisk /dev/sdb (将硬盘分为两个区,第一个100M作为boot分区,第二个作为根分区)
  2. # partproble /dev/sdb
  3. # mkfs -t ext3 /dev/sdb1
  4. # mkfs -t ext3 /dev/sdb2
  5. # mount /dev/sdb1 /mnt/boot
  6. # mount /dev/sdb2 /mnt/sysroot
  7. # mount (查看挂载是否成功)

3. 拷贝内核文件到相应的位置,并且解包initrd

  1. # cp /boot/vmlinuz-`uname -r`.img /mnt/boot/vmlinuz
  2. # cd /tmp/init
  3. # zcat /boot/initrd.2.6.18-164.el5.img | cpio -id &> /dev/null

4. 修改RamDisk内容:

  1. # sed -i s/(mkrootdev.*ro[[:space:]]).*/1sda2/g /tmp/init

上步骤中将RanDisk解压出来init文件中的”mkrootdev -t ext3 -o defaults,ro Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 /dev/VolGroup00/LogVol00”项修改为”mkrootdev -t ext3 -o defaults,ro sda2”;并且可以根据实际需求,将该文件中不需要加载的dm-mirror、dm-zero、dm-snapshrot项注释或删掉;当然为了更加精简镜像文件的大小,可以到对应的/lib文件夹下删除相应的文件;

initrd文件修改后示例:

  1. #!/bin/nash
  2. mount -t proc /proc /proc
  3. setquiet
  4. echo Mounting proc filesystem
  5. echo Mounting sysfs filesystem
  6. mount -t sysfs /sys /sys
  7. echo Creating /dev
  8. mount -o mode=0755 -t tmpfs /dev /dev
  9. mkdir /dev/pts
  10. mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
  11. mkdir /dev/shm
  12. mkdir /dev/mapper
  13. echo Creating initial device nodes
  14. mknod /dev/null c 1 3
  15. mknod /dev/zero c 1 5
  16. mknod /dev/systty c 4 0
  17. mknod /dev/tty c 5 0
  18. mknod /dev/console c 5 1
  19. mknod /dev/ptmx c 5 2
  20. mknod /dev/rtc c 10 135
  21. mknod /dev/tty0 c 4 0
  22. mknod /dev/tty1 c 4 1
  23. mknod /dev/tty2 c 4 2
  24. mknod /dev/tty3 c 4 3
  25. mknod /dev/tty4 c 4 4
  26. mknod /dev/tty5 c 4 5
  27. mknod /dev/tty6 c 4 6
  28. mknod /dev/tty7 c 4 7
  29. mknod /dev/tty8 c 4 8
  30. mknod /dev/tty9 c 4 9
  31. mknod /dev/tty10 c 4 10
  32. mknod /dev/tty11 c 4 11
  33. mknod /dev/tty12 c 4 12
  34. mknod /dev/ttyS0 c 4 64
  35. mknod /dev/ttyS1 c 4 65
  36. mknod /dev/ttyS2 c 4 66
  37. mknod /dev/ttyS3 c 4 67
  38. echo Setting up hotplug.
  39. hotplug
  40. echo Creating block device nodes.
  41. mkblkdevs
  42. echo "Loading uhci-hcd.ko module"
  43. insmod /lib/uhci-hcd.ko
  44. echo "Loading ohci-hcd.ko module"
  45. insmod /lib/ohci-hcd.ko
  46. echo "Loading ehci-hcd.ko module"
  47. insmod /lib/ehci-hcd.ko
  48. mount -t usbfs /proc/bus/usb /proc/bus/usb
  49. echo "Loading jbd.ko module"
  50. insmod /lib/jbd.ko
  51. echo "Loading ext3.ko module"
  52. insmod /lib/ext3.ko
  53. echo "Loading scsi_mod.ko module"
  54. insmod /lib/scsi_mod.ko
  55. echo "Loading sd_mod.ko module"
  56. insmod /lib/sd_mod.ko
  57. echo "Loading scsi_transport_spi.ko module"
  58. insmod /lib/scsi_transport_spi.ko
  59. echo "Loading mptbase.ko module"
  60. insmod /lib/mptbase.ko
  61. echo "Loading mptscsih.ko module"
  62. insmod /lib/mptscsih.ko
  63. echo "Loading mptspi.ko module"
  64. insmod /lib/mptspi.ko
  65. echo "Loading dm-mod.ko module"
  66. insmod /lib/dm-mod.ko
  67. echo Waiting for driver initialization.
  68. stabilized --hash --interval 250 /proc/scsi/scsi
  69. echo Making device-mapper control node
  70. mkdmnod
  71. mkblkdevs
  72. echo Creating root device.
  73. mkrootdev -t ext3 -o defaults,ro /dev/sda2 (这里一定要修改好)
  74. echo Mounting root filesystem.
  75. mount /sysroot
  76. echo Setting up other filesystems.
  77. setuproot
  78. echo Switching to new root and running init.
  79. switchroot

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号