WinXP下打造自己的linux 0.11简易编译环境(原创)

来源:互联网 发布:全军战备值班部队 知乎 编辑:程序博客网 时间:2024/06/05 10:16

http://caiwei8888.blog.163.com/blog/static/3017424120101913353856/



学习赵炯博士的《linux 0.11 内核完全注释》,在搭建实验环境时发现没有WinXP下bochs建立linux 0.11 编译环境的文章,都是直接用的赵博的linux-0.11-devel-040329.zip直接进行的实验。有鉴于此,我花费了2周时间打造了自己的linux0.11简易编译环境。

  开始制作前,需要XP系统已经安装了WinRAR,UltraEdit,Bochs 2.1.1 ,WinImage8.0

还有把sls-0.99pl.tar.bz2解压到一个单独得文件夹sls-0.99pl下。

  我们开始吧! :)

  首先需要编辑sls-0.99pl文件夹的bochsrc文件,先做个备份,然后把bochsrc的文件名改为“sls.bxrc”(文件名可以随意,后缀必须是bxrc),然后编辑它(如果不修改可能会出现ROM: couldn't open ROM image file 'C:\Program Files\Bochs-2.1.1/bios/BIOS-bochs-latest'.信息,提示不能运行bochs),把文件第12行和36行的“$BXSHARE/bios/*”改为“BXSHARE/*”即删除bios目录,因为安装2.1.1默认应该是没有这个目录的。OK,存盘,双击sls.bxrc打开SLSLinux,按“空格”选择显示模式。出现“softland login:”字样时按回车输入“root”进入系统。关闭SLSLinux系统。按照《内核》中14.3.1节的流程,创建一个256M的硬盘镜像。做好后把镜像从bochs 安装目录剪切到sls-0.99pl目录下。编辑sls.bxrc文件ata0-master一行下加入“ata0-slave:type=disk,path=.\hdc.img,cylinders=520,heads=16,spt=63”,存盘退出UE文本编辑器。按照《内核》中14.5.2节在硬盘镜像中创建minix文件系统。和sls-0.99pl同一个目录下建立linux0.11文件夹,将256M的硬盘镜像从sls-0.99pl目录移动到linux0.11目录,将sls.bxrc文件 “ata0-slave:type=disk,path=.\hdc.img,cylinders=520,heads=16,spt=63”一行去掉,存盘退出UE文本编辑器。 接着按照《内核》中14.5.3节内容建立根文件系统。直到第14.6节,以上是建立linux0.11编译环境的前提。

WinXP下打造自己的linux 0.11简易编译环境(原创) - 蔡伟 - 蔡伟的博客

  这时你应该已经得到了一个最简单的linux0.11操作系统(如上图所示),我们需要向里面加入工具,才能使它能够自己编译内核。

 

  一个关于bochs linux0.11系统和WinXP系统文件传输的方法(小于1.44M的文件):

   ------ 用bochs自带的Disk Image Creation Tools 建立一个空的1.44M软盘镜像,这个镜像是为了在linux0.11根文件系统没有安装mtools时使用的文件传输载体(注意:第一次使用这个文件前,即执行命令mount前需要用 “mkfs /dev/fd1 1440”命令创建文件系统)。因为WinImage不认非DOS盘,而linux0.11在没有安装mtools时也不认DOS盘,这时就需要用SLSLINUX做中间转换,注意这里dos盘不支持长文件名,需要在SLSLinux下改名。

 

  第一个软件先安装gcc-1.40,这是因为linux是开源的,所以一些工具是需要在机器上编译才能运行。

这里开始安装工具之前,先分别用bochs自带工具和WinImage建立两个镜像文件(fnull.img,b.img)b.img为dos格式是WinImage工具建立的。然后编辑sls.bxrc添加” floppyb: 1_44=b.img, status=inserted”,使用WinImage工具将gcc-1.40.taz加入到b.img中。打开SLSlinux,进入系统后,用“mdir b:”查看有没有 gcc-1.40.taz文件,然后在根目录建一个文件夹lin-ext用于转换文件到linux0.11系统。使用命令 “ mcopy b:* /lin-ext”将gcc1.40安装文件拷贝到SLSLinux系统中(如下图)。

WinXP下打造自己的linux 0.11简易编译环境(原创) - 蔡伟 - 蔡伟的博客

  拷贝完成后,点“config”按钮,然后在调试的窗口中将软驱B中的镜像转换为fnull.img

(如下图)

WinXP下打造自己的linux 0.11简易编译环境(原创) - 蔡伟 - 蔡伟的博客

当出现“continue simulation”字样时返回到SLSLINUX系统中,用“mount /dev/fd1 /mnt”命令加载到/mnt目录。如果出现(mount:unknown error 26240),这时需要用“mkfs /dev/fd1 1440”创建文件系统后才能正常使用。然后用命令”cp gcc-lib~1.taz /mnt”把安装文件拷贝到fnull.img镜像中。在XP系统中,把fnull.img文件拷贝到linux-0.11目录中,添加“floppyb: 1_44=fnull.img, status=inserted”到linux0.11配置文件中,双击打开linux-0.11 ,在命令提示符下输入“mkdir /mnt”建立/mnt节点,使用”mount /dev/fd1 /mnt”加载软驱,“cp /mnt/gcc-lib~1.taz /tmp”拷贝文件到tmp目录下,运行“tar –zxvf gcc-lib~1.taz”解压缩文件

得到gcclib目录,接着在/usr节点下建立include目录,local/bin目录,local/lib目录。然后“cd /tmp/gcclib”进入gcclib目录,使用“cp –r include /usr”“cp –r local /usr”将文件拷贝过去,拷贝结束后执行“gcc –s –o hello hello.c”如果执行成功会生成hello这个可执行程序。

执行它,屏幕出现“hello,world”证明安装成功。运行“gcc -v”显示“gcc version 1.40”。到此gcc1.40安装完毕。(在/tmp节点删除gcclib目录和taz文件命令是“rm gcc-lib~1.taz”“rm –rf gcclib”)。如下图所示

WinXP下打造自己的linux 0.11简易编译环境(原创) - 蔡伟 - 蔡伟的博客

  第二个软件安装utils.tar.Z,其中主要是make工具。同样,先将文件利用WinImage加载到b.img镜像中,在SLSlinux系统中拷贝到lin-ext目录,然后换fnull.img镜像(以上步骤请参看gcc1.40的安装。这里需要先将fnull.img里的数据清空就是到软盘目录里用“rm *”命令),将文件拷贝到fnull.img,再将文件fnull.img拷贝到linux-0.11目录。打开linux-0.11系统。加载fnull.img 。将utils.tar.Z拷贝到/tmp目录,“tar –zxvf utils~1.z”解压文件(这里的utils~1.z可视具体的情况而定)。解压后,会生成一个usr目录将里面的bin目录拷贝到/usr目录,make工具就安装成功了。安装完成后如下图。

WinXP下打造自己的linux 0.11简易编译环境(原创) - 蔡伟 - 蔡伟的博客

  第三个软件安装 mtools2.05,用于读写DOS软盘,同上将mtools压缩包拷到linux0.11的/tmp目录,然后解压缩到mtools目录里,先不要编译,需要修改Makefile,device.c以及mread.c这三个文件,首先将Makefile 6-10行改为

CC      = gcc

cc      = gcc

CFLAGS = -O -Wall

LDFLAGS      = -s

LD   = gcc

去掉原来的“LINT=lint”这一行。

修改device.c 在文件头下面添加

 

#define MYDEVICE

 

#ifdef MYDEVICE

struct device device[] = {

       {'A', "/dev/fd0", 0L, 12, 0, (int (*)()) 0, 80, 2, 18},

       {'B', "/dev/fd1", 0L, 12, 0, (int (*)()) 0, 80, 2, 18},

       {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}

};

#endif/*MYDEVICE*/

上面这些是为了mtools命令添加的设备,其实就是两个软盘。

 

修改mread.c 在第19行也就是”#else /* BSD */“这一行下面添加

“#include <utime.h>”

全部修改完毕,运行命令“make install”正常执行后如下图所示

 WinXP下打造自己的linux 0.11简易编译环境(原创) - 蔡伟 - 蔡伟的博客

  第四个软件安装 gccbin.tar.Z,里面有gas,gld等以及lib库

  第五个软件安装 as86.tar.gz ,里面有as86,ld86两个二进制执行程序

 

  第四和五软件安装比较简单,主要是一些编译内核的工具,如:gas,gld,等执行程序。具体的安装可以参考前三个软件的安装。(我开始时没有找到gas的可执行程序,就把网上的源代码拷到linux0.11系统里进行编译,如果大家对编译gas源代码感兴趣,请给我留言)

  然后把linux 0.11内核代码拷贝到linux根文件系统中

开始编译。。。

  Good Luck!

  希望这篇文章能对您有所帮助。有任何问题给我写留言或者发邮件都可以。

 

本文所需要的软件

-------WinRAR

-------UltraEdit

-------Bochs 2.1.1

-------WinImage8.0.8000

-------sls-0.99pl.tar.bz2

(下载地址http://www.oldlinux.org/Linux.old/bochs/sls-0.99pl.tar.bz2)

-------gcclib-1.40.taz

(可以在linux-0.11-devel-040329.zip压缩包中找到)

-------mtools-2.0.5.tar.Z

(下载地址http://www.oldlinux.org/Linux.old/bin-src/mtools-2.0.5.tar.Z)

-------utils.tar.Z

(下载地址http://www2.oldlinux.org/Linux.old/Linux-0.12/binaries/usr.bin/utils.tar.Z)

-------gccbin.tar.Z

(下载地址http://www.oldlinux.org/Linux.old/Linux-0.12/binaries/compilers/gccbin.tar.Z)

-------as86.tar.gz

(下载地址http://ftp.sunet.se/pub/os/Linux/funet/bin/as86.tar.gz,这个网站也有as86,ld86源代码)

------- gas-1.38.1.tar.bz2

(下载地址http://www.oldlinux.org/Linux.old/gnu/gas/gas-1.38.1.tar.bz2)

-------bootimage-0.11.Z

(下载地址http://www.oldlinux.org/Linux.old/Linux-0.11/images/bootimage-0.11.Z)

-------rootimage-0.11.Z

(下载地址 http://www.oldlinux.org/Linux.old/Linux-0.11/images/rootimage-0.11.Z)


0 0
原创粉丝点击