分享
 
 
 

创建自己的操作系统开发环境

王朝other·作者佚名  2006-08-09
窄屏简体版  字體: |||超大  

对于进行操作系统开发的爱好者而言,最困难的事情之一就是不知道从何处下手开发。很多书籍对操作系统的原理进行了深入的阐述,但是似乎没有人一步一步地教爱好者如何由浅入深地了解这些概念。

前几期中,已经有文章就这一问题进行了探讨,在此我想尽量不用面向编程的叙述方式,而只是向那些想要开发操作系统的爱好者介绍一些相关的工具和技巧。有兴趣的读者可以轻松获取想知道的资源,并且开始自己的设计和编程。

你也许可能没有意识到,操作系统的开发实际上并不是从头开始的。编写一个可靠的引导装载程序(bootloader)本身就是一个非常系统的项目,因此我不建议初学者自己开发一个操作系统的引导装入程序,很多可靠的引导装载程序(例如Grub、LILO、ppcboot等)都是免费的。如果一定要坚持自己开发这一部分的内容,我建议把它推迟到项目的后期进行。在本文中,我将使用GNU Grub。

开发环境

为了使操作系统开发过程更加轻松,需要构建一个开发环境,这个环境应该满足以下几个要求:

◆ 可以很快地对自己修改后的新内核进行编译;

◆ 不用重新启动用于开发的机器;

◆ 不需要使用软盘作为操作系统的存储介质。

本文将介绍很多可以满足上面这三个需求的环境。它由一台从事开发的机器和一台测试的机器组成,两个机器都位于同一网络之上。用于开发的机器应该装配有一套用于开发的编程工具:汇编和C编译器、一个连接器和“make”工具。还有一个我认为特别有用的工具就是模拟器,它可以帮助调试内核,并且允许很快对新加入的代码行进行测试。接下来,还需要一个TFTP服务器。该工具将允许通过具有TFTP能力的引导装载程序通过网络从开发的机器上下载新开发的内核。

测试用的机器,这台机器所需要的只是一个网卡和一个支持TFTP的引导装载程序。

设置开发环境

1.开发用的机器

选择的编程工具是:

◆ gcc 2.95.4

◆ ld 2.13.90.0.10

Bochs 1.4.1是一个x86模拟器。注意要使其支持调试模式,就要对其进行一些特定的编译。命令如下:

$ ./configure --enable-x86-debugger

$ make

为了正确地使用Bochs,需要创建一个磁盘映像,它要有引导装载程序和文件系统。具体方法可参见《Linux上古典仍在流行》之Bochs。

TFTP服务器我选择的是atftpd,使用基于Linux的TFTP服务器是一件非常简单的事情。

2.测试用的机器

我选择的引导装载程序是GNU Grub 0.92,这里需要注意的是要让Grub的TFTP终端具有和网卡通信的能力。我用作测试的机器使用的是一个NE2000 ISA网卡,通过以下命令来实现这一目的:

$ ./configure --enable-ne --enable-ne-scan=0x220

$ make

请注意,如果使用的是即插即用PCI卡的话,配置起来要容易得多。现在你可以把Grub映像安装至测试用的机器MBR之上,或者是一个用于启动测试机器的软盘之上。我喜欢使用后者,因为用于测试的机器还要用于其它用途,所以不想将其安装于硬盘之上。操作如下:

$ cat ./stage1/stage1 ./stage2/stage2 > /dev/fd0

然后,把软盘插入到测试用的机器中,并且看一看网卡是否能够被识别,可以通过手工配置或者使用dhcp服务器。

grub> dhcp

Probing... [NE*000]

NE2000 base 0x220, addr 00:C0:A8:4E:5A:76

Address: 192.168.22.14

Netmask: 255.255.255.0

Server: 192.168.22.1

Gateway: 192.168.22.1

到此已经配置好用于测试的机器。

测试开发环境

正如我前面提到的,主要的编程工作都要在这台机器上完成。所以,为了测试配置需要使用GNU Grub自带的内核例程,这些例程位于/docs目录之下。

内核来自三个源程序文件:boot.S、kernel.c和multiboot.h,可以通过以下命令来编译内核:

$ gcc -I. -c ./boot.S

$ gcc -I. -c ./kernel.c

$ ld ./kernel.o ./boot.o -o kernel -Ttext 100000

下面做一简单的解释,multiboot是一个标准的定义向引导装载程序传递信息的途径。boot.S接收这些信息,然后配置一个堆栈,接着调用“cmain”函数。该函数会对VGA的显示进行设置,读取传递过来的信息,输出一些信息后退出该函数。接着boot.s会得到控制权,输出信息的过程终止,然后进入一个无限循环中。这是一个很简单的程序,读者如果有兴趣可以对这些代码进入深入的研究。

使用Bochs

我的计划是首先挂载磁盘映像,然后拷贝内核的文件系统,随后卸载它,接着运行Bochs。具体命令如下:

# /sbin/losetup -o 32256 /dev/loop1 ./c.img

# /bin/mount -t ext2 /dev/loop1 /mnt/osdev/

# cp /docs/kernel /mnt/osdev

# umount /mnt/osdev/

# /sbin/losetup /dev/loop1 -d

$ bochs

这个过程也可以由makefile自动完成。在Grub中,使用下面的命令可实现这一功能:

grub> kernel (hd0,0)/kernel

grub> boot

使用测试环境

首先配置TFTP服务器,使得端可以获取所编写的内核:

# /usr/sbin/atftpd --daemon /home/bono/src/grub-0.92/docs

启动机器,按如上所示配置网络连接。接下来指定TFTP服务器的IP地址,并且定位内核映像。请注意,该选项可以通过dhcp服务器来设置。

grub> tftpserver 192.168.22.36

Address: 192.168.22.14

Netmask: 255.255.255.0

Server: 192.168.22.36

Gateway: 192.168.22.1

grub> kernel (nd)/kernel

[Multiboot-elf, <0x100000:0x807:0x0>, <0x101808:0x0:0x4018>,

shtab=0x106190, entry=0x100568]

grub> boot

这时,一个类似于Bochs的界面就会出现在测试用的机器上。

现在已经准备好了开发自己操作系统的环境,更多的信息可查阅相关的资料。下面是一些有着操作系统开发的资源:操作系统资源中心

[url=http://www.nondot.org/sabre/os/articles;Intel]http://www.nondot.org/sabre/os/articles体系结构软件开发人员手册
;Intelftp://download.intel.com/design/PentiumII/manuals/24319202.pdf

from: http://www.eeblog.org/user1/sohonas/archives/2006/476.asp

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有