快速业务通道

超级DIY:制作运行在内存中的Linux系统

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-05
一般情况下,linux系统启动过程是,写在MBR上的bootloader加载内核,然后加载初启环境,即initrd;在initrd中,一般有个叫init或linuxrc的脚本(或ELF文件),该进程启动后,会先读取/etc/inittab下的内容,这是一个初始化表,用以确定执行/etc/rc.d下的哪个RC脚本,RC脚本执行完毕后,文件系统基本上就得到所有的硬件信息了,进而加载真正的根分区.现在要做的是——将initrd作为根分区,这样,要做的事情主要有四点:1.创建一个空间比较大的Ramdisk ,2.用busybox生成文件系统中必备的命令,用它的主要原因是占用空间小,3.添加或修改dev和etc下的文件,4.考虑添加一些应用程序,比如ssh等.
 
  操作系统:SlackWare12,内核版本:2.6.21.5-smp
 
  1.创建一个空间比较大的Ramdisk
 
  #dd if=/dev/zero of=/tmp/ramdisk bs=1k count=92160
 
  #losetup /dev/loop2 /tmp/ramdisk
 
  #mkfs.ext2 /dev/loop2
 
  #mount -t ext2 /dev/loop2 /mnt
 
  可以向/mnt下写东西了,然后
 
  #umount /mnt
 
  以后修改时,可以这样用
 
  #gunzip ramdisk.gz //将initrd解压
 
  #mount -o loop ramdisk /mnt //挂载
 
  …… …… //修改其中的内容
 
  #gzip -9 ramdisk //重新压缩
 
  2.用busybox生成文件系统中必备的命令
 
  下载一个比较新的busybox,需要修改源代码,否则会在编译时出现因未采用uclibc编译而产生的错误.打开applets/applets.c文件,注释掉“
 
  #if ENABLE_STATIC && defined(__GLIBC__) && !defined(__UCLIBC__)
 
  #warning Static linking against glibc produces buggy executables
 
  #warning (glibc does not cope well with ld ——gc-sections).
 
  #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
 
  #warning Note that glibc is unsuitable for static linking anyway.
 
  #warning If you still want to do it, remove -Wl,——gc-sections
 
  #warning from top-level Makefile and remove this warning.
 
  #endif“这段代码.
 
  执行#make menuconfig,根据网上的文章所说,主要需要注意两个地方,一是选中“将busybox编译成静态连接的可执行文件”,二是选中“不使用系统的usr目录”,另外还要留意一下,选中的默认SHELL是什么.然后执行make命令,就会在_install目录下生成一些文件,将它们拷贝到ramdisk中待用.
 
  3.添加或修改dev和etc下的文件
 
  在ramdisk下,
 
  mkdir dev etc root usr var tmp proc mnt
 
  先说说dev的,
 
  可以将编译环境的dev下所有文件拷贝过去,#cp -a /dev/* ramdisk/dev ;也可以采用busybox/examples/bootfloppy下的mkdevs.sh脚本生成设备文件.
 
  再说说etc下的文件,这个比较麻烦,我现在也没完全弄清楚,呵呵.我当前的办法是——将编译环境的etc下所有文件整体拷贝过去,然后用busybox/example/下的inittab覆盖ramdisk/etc下的inittab文件.这个新的inittab文件忽略了runlevel,也不需要用户登陆的用户名和密码,只需要一个rcS脚本(在busybox/examples/bootfloppy/etc中).修改/etc/fstab内容,改为:
 
  
/dev/ram0 / ext3 defaults 1 1

devpts /dev/pts devpts gid=5,mode=620 0 0

proc /proc proc defaults 0 0

 
  4.改写lilo
 
  在lilo.conf中添加
 
  image = /boot/vmlinuz
 
  initrd=/boot/test_kern/ramdisk.gz
 
  label = test
 
  append="mem=600M ramdisk=92160 root=/dev/ram0 rw"
 
  执行#lilo -v -C /etc/lilo.conf -s /boot
 
  至此,Ramdisk制作完成,具备基本运行环境,加载网卡驱动后能连接网络,但是还不能ssh登陆.
 
  5.考虑添加一些应用程序,比如ssh等
 
 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号