作者:雷凯 来源:赛迪网技术天地-开放系统世界
笔者在测试AMD的64位CPU时,插入含有AMD官方测试软件Maxpower64的软盘后,系统提示不能引导。关于这个软件AMD公司提供的信息很少,只知道它必须在Linux环境下执行。笔者打开软盘,发现里面只有sys linux.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。
hfangrong 于 2007-03-23 11:07:23发表:
。BusyBox 包含了
七十多种 Linux 上标准的工具程序,仅需要几百 k 磁盘空间,在嵌入式系统上常用到它。下载了
BusyBox的源代码包后可以按照如下的步骤操作:
DOSTATIC=true
然后修改 BusyBox 中的 init.c,设定系统要执行的第一个程序为: /etc/rc.d/rc.sysinit
#define INIT_SRCIPT "/etc/rc.d/rc.sysinit"
开始编译BusyBox
#make
#make install
到这一步我们就得到了可执行命令busybox
将busybox 复制到/mnt/initrd/bin目录下
# cp busybox /mnt/initrd/bin
然后创建常用命令的link,具体的工作原理请参阅busybox的官方说明。
我们可以使用 ./busybox --help 来查看busybox中都有哪些工具。常用的工具及busybox
的用法如下:
# ln -s busybox ls
# ln -s busybox cp
# ln -s busybox mount
# ln -s busybox umount
# ln -s busybox more
# ln -s busybox ps
# ln -s busybox sh
现在我们就有了所需的常用命令。
hfangrong 于 2007-03-23 11:06:21发表:
。BusyBox 包含了
七十多种 Linux 上标准的工具程序,仅需要几百 k 磁盘空间,在嵌入式系统上常用到它。下载了
BusyBox的源代码包后可以按照如下的步骤操作:
DOSTATIC=true
然后修改 BusyBox 中的 init.c,设定系统要执行的第一个程序为: /etc/rc.d/rc.sysinit
#define INIT_SRCIPT "/etc/rc.d/rc.sysinit"
开始编译BusyBox
#make
#make install
到这一步我们就得到了可执行命令busybox
将busybox 复制到/mnt/initrd/bin目录下
# cp busybox /mnt/initrd/bin
然后创建常用命令的link,具体的工作原理请参阅busybox的官方说明。
我们可以使用 ./busybox --help 来查看busybox中都有哪些工具。常用的工具及busybox
的用法如下:
# ln -s busybox ls
# ln -s busybox cp
# ln -s busybox mount
# ln -s busybox umount
# ln -s busybox more
# ln -s busybox ps
# ln -s busybox sh
现在我们就有了所需的常用命令。
fulijun5858 于 2005-10-23 15:41:48发表:
不错我也试一试
eoboot 于 2005-10-06 00:38:42发表:
不错
thej 于 2005-09-20 00:11:36发表:
支持,不错
zz123 于 2005-09-19 22:56:42发表:
2.用sysLinux引导
首先依次执行如下命令:
obr>
# 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的值应为16384+KERNEL_BLOCKS。因此该例中为16637。
最后执行如下命令即可完成整合:
#dd if= root system file of=/dev/fd0 bs=1k seek=
KERNEL_BLOCKS就是上一步dd命令所产生的数值。
zz123 于 2005-09-19 22:56:02发表:
整合内核和根文件系统
目前为止已经有了内核和压缩过的根文件系统,现在剩下的就是把它们整合到一张软盘里。根据引导方式的不同,有三种整合方案。
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
zz123 于 2005-09-19 22:55:31发表:
然后创建常用命令的链接,具体的工作原理请参阅BusyBox的官方说明。
nobr>
# 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。
zz123 于 2005-09-19 22:54:56发表:
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
zz123 于 2005-09-19 22:54:19发表:
然后为根文件系统建立一些标准的目录:
th="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
# 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来完善它。
zz123 于 2005-09-19 22:53:39发表:
根文件系统的制作
一个根文件系统要实现基本的功能,必须包括一些常用工具,比如,sh、ls、cd及cat等。但是这些常用的工具会占用很多空间,即使只用原系统中的这些命令,即全部用静态编 译(不用动态连接库),大概也要有2MB~3MB。
使用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