Linux Kernel 0.01 的编译和运行

Linux Kernel 0.01 的编译和运行
本文操作环境均在 Linux 系统中实现。
==================================================================================
一、准备工作
下面说明的内容要使用 bochs 模拟器和Linux 0.11作为开发平台。
1. 取得Linux 0.11开发平台文件,下载地址是:http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040923.zip
2. 解压缩 linux-0.11-devel-040923.zip,修改其 bochs 配置文件 bochsrc-hd.bxrc,添加如下行:
ata0-slave: type=disk, path=./B4M, cylinders=100, heads=5, spt=17, translation=none
3. 创建一空文件作为 bochs 模拟磁盘映像:
$ dd if=/dev/zero of=./B4M bs=512 count=8500
4. 对模拟磁盘 B4M 分区:
$ su
# losetup /dev/loop0 ./B4M
# fdisk /dev/loop0 -C 100 -H 5 -S 17
  进入 fdisk 后使用 "n"命令添加第一主分区(primary 1),占模拟盘的最大尺寸,分区标志为81(Minix),然后用"w"命令保存退出。
# losetup -d /dev/loop0
# exit
5. 进入 Linux 0.11开发平台,对模拟盘制作 Minix 文件系统,在Linux 0.11中,执行命令:
# mkdir /mnt/hd6
# mkfs /dev/hd6 4241
# sync
# mount /dev/hd6 /mnt/hd6
# cd /mnt/hd6
# mkdir root
# cp -R /bin .
# cp -R /dev .
# cd /
# sync
# umount /dev/hd6
# exit
    退出 Linux 0.11 环境。

二、编译 Linux Kernel 0.01
1. 先修改 0.01 源码,修改内容包括:
   1) 修改 ./Makefile 中部分编译命令,删除 ./{fs,kernel,lib}/Makefile 的CFLAGS选项中的 "-mstring-insns";
   2) 修改 ./boot/boot.s ,把注释符由 "|" 改为 "!" ;
   3) 修改 ./kernel/system_call.s ,把 _hd_interrupt 中断向量的开中断命令后移。
   这里有一个 patch 文件,下载后执行以下命令完成上面的修改内容:
$ tar xzf patch-0.01.tgz
$ cd linux
$ patch -p0 < ../patch-0.01
2. 把修改后的源码复制到 Linux 0.11 环境中。下面将使用模拟软盘作为Linux 0.11环境和系统的数据交换区,请先对相应文件作好备份。
$ cd linux-0.11-devel-040923
$ mkdir tmp
$ su
# mount -o loop bootimage-0.11-hd ./tmp
# cd tmp
# rm -fr *
# cp -R ../linux . 
# umount ./tmp
# exit
3. 进入 Linux 0.11开发平台,复制并编译 Kernel 0.01:
# mkdir /fd0
# mount /dev/fd0 /fd0
# cp -R /fd0/linux /usr/src/linux-0.01
# cd /usr/src/linux-0.01
# make
# cp Image /fd0/Image-0.01
# sync
# exit
4. 把编译好的 Kernel 0.01 复制出来,作为模拟启动软盘。
$ su
# mount -o loop bootimage-0.11-hd ./tmp
# cp ./tmp/Image-0.01 .
# umount ./tmp
# exit

三、运行 Linux 0.01
1. 把前面第一和第二阶段得到的两个文件复制到目录 linux-0.01-dev 中
$ cp B4M Image-0.01 ~/linux-0.01-dev
2. 在目录 linux-0.01-dev 建立 bochs 配置文件,其中的硬盘和软盘参数如下:
ata0-master: type=disk, path=./B4M, cylinders=100, heads=5, spt=17, translation=none
floppya: 1_44=Image-0.01, status=inserted
3. 启动bochs,现在可以看到提示符 "bash#" 了。

猜你喜欢

转载自blog.csdn.net/csshuke/article/details/83346350