Chinaunix首页 | 论坛 | 博客
  • 博客访问: 522071
  • 博文数量: 252
  • 博客积分: 6057
  • 博客等级: 准将
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-21 10:17
文章分类

全部博文(252)

文章存档

2013年(1)

2012年(1)

2011年(32)

2010年(212)

2009年(6)

分类:

2010-10-21 13:19:55

(84.76 KB)

赵炯博士、LGJ及各位LINUX专家:
我一直对操作系统的内部机理充满兴趣,总想搞懂它,可能是由于基础薄弱、天资有限,我花了很多的时间,总算把UNIX level six(John Lions)的源代码、linux 0.0.1的源代码、linux 2.0.40的大部分的源代码搞清楚。
     
看了Linux的源代码后,觉得还是太复杂了!
能有一个运行在386保护模式下的、单任务的、类似DOS的操作系统,该有多好!
我就努力了一把,写了一个自己的“超级DOS”。
在写的过程中,我发现程序规模大了,连接就会不成功。虽然能得到连接后的结果,但当做成启动盘后,总是重启动。
     很苦恼!
附件中有我编写的两个版本的“超级DOS”。
《 实现键盘、显示功能的超级DOS 》,这个程序是能正常工作的。能接受键盘字符,在显示器上显示出来。
《 最新的超级DOS(有重启动问题) 》,这是我最近写的程序。老是重启动!
我分析了一下,似乎是ld连接不成功的缘故。
连接后段地址翻译不正确。
分析head.s中的开始一段:
.text
.globl idt,gdt,pg_dir,startup_32
pg_dir:
startup_32:
movl $0x10,%eax
mov  %ax,%ds
mov  %ax,%es
mov  %ax,%fs
mov  %ax,%gs
//the_here:
//jmp  the_here
lss stack_start,%esp
//the_here:
//  jmp  the_here
call setup_idt
call setup_gdt
movl $0x10,%eax
mov  %ax,%ds
mov  %ax,%es
mov  %ax,%fs
mov  %ax,%gs
lss  stack_start,%esp
     
如果前一个    //the_here:
//jmp  the_here
去掉注释,启动盘运行到此就停住,这是很正常的。
如果后一个  //the_here:
//jmp  the_here
去掉注释,启动盘就总是重启动。
这是在    Red Hat Linux Release 9 (Shrike)
Kernel 2.4.20-8下实验的。
Gcc是该系统自带的。
但你不能怀疑HEAD.S会有什么错误,因为《 实现键盘、显示功能的超级DOS 》中的HEAD。S和《 最新的超级DOS(有重启动问题) 》的几乎是一样的。为什么前者的head.s能正常运行呢?
二者的连接顺序也是相同的:
  boot + ( head.o + main.o + …….)
  请各位高明指点!
  你可以用以下的安装:
1.在LINUX下建一个目录
2.把《 实现键盘、显示功能的超级DOS 》下的文件cp到该目录下
如果是实验《 最新的超级DOS(有重启动问题) 》,则当CP后,
还要运行 MAKE  DOINSTALL,生成子目录
3.MAKE  CLEAN
4.MAKE  ALL
5.MAKE  DOWRITE
6.得到启动软盘!
  杭州电子科技大学 计算机学院 俞岳军 2005-10-24 晚
阅读(636) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~