|
首先使用 bximage 创建磁盘镜像文件,然后对镜像文件进行分区处理。这里打算将整个根文件系统全部塞在一个分区里。具体做法见:
http://www.groad.net/bbs/read.php?tid-3008.html
当上面的工作完成后,会生成一个名 hda 的,大小为 500M 的磁盘镜像文件。根文件系统的制作在后头描述。
一个系统需要有 bootloader 的引导。这里,我们采用 grub 作为 bootloader ,这个 bootloader 放在软盘中。引导软盘的制作参考:
http://www.groad.net/bbs/read.php?tid-2956.html
上面的链接里,我们并没有加载 stage1_5 文件,这也是可以的。但最好还是放在里面,因为已经决定磁盘镜像文件系统为 ext2 格式,所以 stage1_5 只拷贝 e2fs_stage1_5 到 grub 目录中即可。
下面制作根文件系统。制作根文件系统,采用 Debian 的 debootstrap 工具,它能帮你建立一个基本的系统。但这个系统并不能马上就拿来使用,需要经过一些配置。
假设现在已经将制作好的磁盘镜像文件通过 /dev/loop0 并 mount 到了 /mnt/img 下(mount 一个磁盘镜像文件的方法参考:http://www.groad.net/bbs/read.php?tid-3008.html)
接着用 debootstrap 把文件系统下载到 /mnt/img 下:$sudo debootstrap --arch i386 lenny /mnt/img
下载完后,我们 chroot 进到 /mnt/img 里( chroot 相当于将新的目录当成是根目录):# LANG=C chroot /mnt/img /bin/bash
接着,设置终端:# export TERM=xterm-color
因为 debootstrap 下载下来的设备文件只是很少的一部分,其中还不包含有 hda,sda 等,所以这里要创建通用的设备文件:# cd /dev
# MAKEDEV generic 这时会看到 dev 目录下新增了许多设备文件。
修改 /etc/fstab 文件,因为我们的根文件系统只放在一个分区中,所以很简单,我的内容为:/dev/hda1 / ext2 defaults 0 1
proc /proc proc defaults 0 0
接下来要将 /etc/fstab 里指定的文件系统 mount 起来,这一步很简单也重要:
配置时区 (TimeZone),不是必须,需要编辑的文件为 /etc/default/rcS ,我的内容如下:TMPTIME=0
SULOGIN=no
DELAYLOGIN=no
UTC=no
VERBOSE=no
FSCKFIX=no
RAMRUN=no
RAMLOCK=no 然后运行下面命令进行配置:dkpg-reconfigure 命令很好用,如果你的配置坏了,可以用它来修复。
下面配置网络(如果你的bochs用不到网络也可以不用配置):
1. 修改 /etc/network/interfaces 文件,我的内容如下:auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
2. 修改 /etc/resolv.conf 文件:192.168.1.1 是我的网络里的路由 IP 。
3. 修改 /etc/hostname 文件,设置机器名:# echo Debian > /etc/hostname
4. 或许日后你想在 bochs 里 update,所以配置一下源配置文件,我的内容为:
下面配置键盘与地区,这两项不是必须:
1. 配置地区:# aptitude install locales
# dpkg-reconfigure locales
2. 配置键盘:# aptitude install console-data
# dpkg-reconfigure console-data
经过上面的一番配置之后,终于到了最重要的一环,安装内核。
你可能会想到用 Debian 的
# apt-cache search linux-image
找出你要安装的内核,然后 # aptitude install 安装它,并希望它能够马上为你工作。如果是这样,你可能会陷入许多苦恼和迷惑,然后是烦躁的在鼓捣这鼓捣那,最终无法进入系统而放弃。
这里,我建议将Debian 2.6.26 的内核下载下来,自己 make menuconfig 过,然后重新编译。配置的过程,把那些不需要的驱动和模块都去掉,这样会大大减少你的编译时间。对于磁盘的驱动部分,最好是将它们都编译进内核,而不是以模块的方式出现。在编译完内核后,我们将 bzImage 和 System.map 两个文件复制到 /boot/ 目录下。接着顺便把宿主系统里 /boot/grub/ 下的 e2fs_stage1_5 menu.lst stage1 stage2 三个文件也同样的放到 /boot/grub 下面。这里,我的 menu.lst 内容为:default 0
timeout 5
color cyan/blue white/blue
title Debian GNU/Linux, kernel 2.6.26-2-686
kernel /boot/bzImage root=/dev/hda1 我们这里不需要 initrd 。
这样弄完之后,工作已经完成了。你可能会在运行 bochs 里看到一些加载错误信息,但那都不是致命的,仍然可以保证你进入系统,如果愿意花些时间,可以逐一将这些启动时警告的,甚至是 FATAL 的提示修复。
下面是启动后的一个截图:
这个镜像的制作过程,走了许多弯路,以致花费了不少时间。所走的弯路竟然就出现在内核的配置上,之前因为都是用直接下载的内核,里面的配置并不符合要求,所以在启动时,要么老是提示找不到根文件系统盘,要么就是发出 kernel panic 等等,许多现象不一而足。 |
|