文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>另眼观潮 打开软盘里的Linux小世界(转)

另眼观潮 打开软盘里的Linux小世界(转)

时间:2006-07-07  来源:wwling2001

 笔者在测试AMD的64位CPU时,插入含有AMD官方测试软件Maxpower64的软盘后,系统提示不能引导。关于这个软件AMD公司提供的信息很少,只知道它必须在Linux环境下执行。笔者打开软盘,发现里面只有syslinux.cfg和Maxpower64两个文件。 显然,靠这两个文件是无法引导进入Linux系统的,更不用说执行Maxpower64。于是笔者自己制作了一张可以引导进入Linux环境的软盘。该软盘必须由两部分组成,即内核和根文件系统。下面介绍制作的方法。 内核的编译 要把内核放到一张1.44MB的软盘上去,通常要对内核进行压缩。压缩内核的最好方法是重新编译,将一些不必要的支持去掉,比如对网络和其它周边设备的支持。注意,内核必须支持RAM Disk和ext2,否则系统不能正常引导。 编译之前首先请确认是以root的身份在进行操作,否则会返回“Permission Denied”的错误提示。然后进入合适的编译路径,一般是在/usr/src/Linux-xx下,比如,Red Hat 9.0的编译路径是在/usr/src/Linux-2.4下。只有在正确的路径下编译命令才会生效。否则会显示如下提示: make: *** No rule to make target 'config'   如果以前编译过内核,则应当先执行“make mrproper”命令删除以前编译的痕迹。接下来执行“make menuconfig”命令开始配置内核,把不需要的东西去掉,并保存为.config文件。随后,依次执行以下命令(括号中是关于命令的解释):  #make dep (设置依赖关系)
 #make clean (准备要构建的源码树)
 #make bzImage (构建内核)
 #make modules (配置模块)
 #make modules_install (使用配置的模块)
 #make install (编译新内核)
  执行完这些命令后,在/boot目录下会看到一个名字为vmlinuz-2.4.22custom的文件,这就是编译所得到的内核。如果该文件大于1.44MB,就得重新编译,再去掉一些不必要的东西,直到它小于1.44MB为止。为了便于记忆,不妨将它重新命名为newkernel。 根文件系统的制作
一个根文件系统要实现基本的功能,必须包括一些常用工具,比如,sh、ls、cd及cat等。但是这些常用的工具会占用很多空间,即使只用原系统中的这些命令,即全部用静态编(不用动态连接库),大概也要有2MB~3MB。<BR><BR>使用BusyBox工具可以解决此问题。BusyBox包含了70多种Linux上的标准工具程序,而且只需要几百KB空间,在嵌入式系统上常用到它(比如Linux Router Project和Debian Boot Floppy)。
1.建立 BusyBox 从官方网站上下载BusyBox的最新版本busybox-1.00-rc3.tar.gz,使用如下命令解压缩:  #tar zxvf busybox-1.00-rc3.tar.gz 为了节省空间,采用静态编译,修改Makefile中的DOSTATIC参数为true:
DOSTATIC=true
然后修改BusyBox中的init.c文件,设定系统要执行的第一个程序为/etc/rc.d/rc.sysinit:
 #define INIT_SRCIPT "/etc/rc.d/rc.sysinit" 使用如下命令编译BusyBox:    #make  #make install 编译完成后,就得到了可执行命令busybox。
2.制作根文件系统
首先为根文件系统建一个floppy-Linux目录:
 # mkdir floppy-Linux
 # cd floppy-Linux ================3>>>>>>>>>>>>>>> 然后为根文件系统建立一些标准的目录:  # mkdir dev etc etc/rc.d bin proc mnt tmp var  # chmod 755 dev etc  etc/rc.d bin mnt tmp var  # chmod 555 proc  # ln -s sbin bin
接着进入/dev目录创建根文件系统必需的一些设备文件。
建立终端机设备:  # mknod tty c 5 0  # mkdir console c 5 1  # chmod 666 tty console 建立VGA Display虚拟终端机设备:  # mknod tty0 c 4 0  # chmod 666 tty0 建立RAM Disk设备:  # mknod ram0 b 1 0  # chmod 600 ram 建立Floppy设备:  # mknod fd0 b 2  # chmod 600 fd0 建立Null设备:  # mknod null c 1 3  # chmod 666 null 到此为止就有了一个初步的小型根文件系统,但是还需要编辑一些Shell Script来完善它。 =============4>>>>>>>>>>>> 3.编辑Shell Script 首先到/floppy-Linux/etc/目录下编辑inittab、rc.sysinit和fstab三个文件,内容分别如下:  # vi inittab  ::sysinit:/etc/rc.d/rc.sysinit  ::askfirst:/bin/sh    # vi rc.sysinit  #!/bin/sh  mount -a  # vi fstab  proc /proc proc defaults 0 0 然后修改这三个文件的权限:  # chmod 644 inittab  # chmod 755 rc.sysinit  # chmod 644 fstab 注意,这些Shell Script会使用一些/bin目录下的命令。但是/bin目录下是空的。现在就需要使用BusyBox来制作这些常用命令。
4.使用BusyBox制作常用命令
 将文件busybox复制到软盘的/bin目录下,并且改名为init:
 
 # cp busybox /floppy-Linux/bin/init
然后创建常用命令的链接,具体的工作原理请参阅BusyBox的官方说明。  # ln -s init ls
 
 # ln -s init cp
 # ln -s init mount  # ln -s init umount  # ln -s init more  # ln -s init ps  # ln -s init sh  这样根文件系统就制作完成了。
 
5.压缩根文件系统
 和内核一样,要把根文件系统放到一张1.44MB的软盘上也要进行压缩。一般采取RAM Disk方式实现根文件系统的压缩,即将准备好的根文件系统压缩成为RAM Disk的镜像文件。当用软盘启动时,会把镜像文件解压到内存中,形成一个虚拟盘,通过该虚拟盘可以控制系统启动。
 依次执行如下命令,制作RAM Disk的镜像文件:  # dd if=/dev/zero of=/tmp/tmp_loop bs=1k count=2048  # losetup /dev/loop0 /tmp/tmp_loop  # mke2fs -m 0 /dev/loop0# mount -t ext2 /dev/loop0 /mnt  # cp -a /floppy-Linux /mnt  # umount /mnt  # losetup -d /dev/loop0  # dd if=/tmp/tmp_loop | gzip -9 > /tmp/Image.gz  # rm -f /tmp/tmp_loop  # sync
这样就得到了压缩过的根文件系统文件Image.gz。
===========6>>>>>>>>>> 整合内核和根文件系统
目前为止已经有了内核和压缩过的根文件系统,现在剩下的就是把它们整合到一张软盘里。根据引导方式的不同,有三种整合方案。
1.用GRUB引导首先依次执行如下命令:  # mke2fs /dev/fd0  # mount /dev/fd0 /mnt/floppy  # mkdir /mnt/floppy/boot  # mkdir /mnt/floppy/boot/grub  # cp /boot/grub/stage1 /mnt/floppy/boot/grub  # cp /boot/grub/stage2 /mnt/floppy/boot/grub  #grub 然后在grub>提示符处输入如下命令:    grub> root (fd0)  grub> setup (fd0)  grub> quit 随后将内核和根文件系统拷贝到软盘中:
 #cp newkernel /mnt/floppy/boot
 #cp Image.gz /mnt/floppy/boot
 
 #cp /boot/grub/grub.conf /mnt/floppy/boot/grub
编辑grub.conf,内容如下:  timeout 10  default 0  title My little Linux  root (fd0)  kernel /boot/newkernel ro  initrd /boot/ Image.gz 最后,制作完grub.conf的Link文件menu.lst就实现了整合:  #ln -s /mnt/floppy/boot/grub/grub.conf /mnt/floppy/boot/grub/menu.lst  #umount /mnt/floppy =======7>>>>>>>>>> 2.用sysLinux引导 首先依次执行如下命令:  # mkdosfs /dev/fd0  # sysLinux /dev/fd0 然后编辑文件sysLinux.cfg,内容如下:
 TIMEOUT 20
 DEFAULT Linux  LABEL Linux  KERNEL newkernel  APPEND root=/dev/ram0 ro initrd=Image.gz 最后将sysLinux.cfg、newkernel和Image.gz拷贝到软盘中即完成了整合:  # mount /dev/fd0 /mnt/floppy  # cp newkernel /mnt/floppy  # cp Image.gz /mnt/floppy  # cp sysLinux.cfg /mnt/floppy  #umount /mnt/floppy 3.直接引导 首先依次执行如下命令:  # dd if=newkernel of=/dev/fd0 bs=1k 252+1 records in 252+1 records out 在这个例子中,dd命令写入了252个完整记录(Record)和1个Partial Record。因此内核占用了253个软盘Blocks。这个数字被称为KERNEL_BLOCKS。 然后执行如下命令:  #rdev /dev/fd0 /dev/fd0  #rdev -R /dev/fd0 0  #rdev -r /dev/fd0 <Value> 第三条命令中,Value的值应为16384+KERNEL_BLOCKS。因此该例中为16637。
最后执行如下命令即可完成整合:
 #dd if= root system file of=/dev/fd0 bs=1k seek=<KERNEL_BLOCKS> KERNEL_BLOCKS就是上一步dd命令所产生的数值(253)。 小结 现在就拥有了一张可以自动激活到Linux环境的软盘。想要执行AMD官方测试软件Maxpower64,只要将该文件复制到/bin目录即可。也可以在使用BusyBox制作常用命令时完成该操作:  # cp Maxpower64 /floppy-Linux/bin 如果希望一进入系统就直接执行Maxpower64,则需要在编辑Shell Script时,修改rc.sysinit文件为如下内容:
 #!/bin/sh
 mount -a  /bin/Maxpower64 这样软盘引导进入Linux后就会直接执行Maxpower64,而不再显示“#”命令提示符。 除了以上方法,还可以将内核和根文件系统分别放置在不同的软盘上,通过引导器给内核传递参数来实现以上功能。这样内核就可以再大一些,支持的功能也就多些。总之,制作一张包含小型Linux系统的软盘并不困难,关键是要细心和耐心。 此外,了解BusyBox和RAM Disk的工作原理对于更好地完善系统有很大帮助。
相关阅读 更多 +
排行榜 更多 +
龙珠格斗火柴人

龙珠格斗火柴人

飞行射击 下载
荒野恐龙猎手安卓版

荒野恐龙猎手安卓版

飞行射击 下载
超凡坦克英雄

超凡坦克英雄

飞行射击 下载