如何从DOS下直接引导另一个操作系统?

lidah 2000-08-28 10:14:00
我想在DOS下用C语言编程实现直接引导硬盘上的另外一个操作系统(比如Linux)而不重新启动电脑,除了要激活相应的分区外还需做那些操作?具体如何实现呢?
...全文
236 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_qing 2000-09-03
  • 打赏
  • 举报
回复
还没有,我的书找不到了,正在找,太老的东西罗
SCUM 2000-09-03
  • 打赏
  • 举报
回复
To lidah:

从 BIOS 映射的方法很低级,需要 I/O 存储 BIOS 的 CMOS 芯片,具体方法不详,可查询有关的硬件资料。

折衷一点的办法是:第一次启动后将 BIOS RAM 保存起来。以后要 BOOT 别的 OS 时,先
恢复它就行了,不过有一些内容需要你的程序做更新,如时间计数器等。另外,如果修改
了 BIOS 设置,也要重新保存 BIOS RAM。

这个问题相当有兴趣,希望能同你继续讨论下去。
stoneboy 2000-09-01
  • 打赏
  • 举报
回复
关注
lidah 2000-09-01
  • 打赏
  • 举报
回复
to Kevin_qing: 谢谢您的答复,您查到详细资料了吗?
lidah 2000-09-01
  • 打赏
  • 举报
回复
to SCUM: 如何从BIOS映射rom-map呢?地址是多少,多少字节?
lidah 2000-08-30
  • 打赏
  • 举报
回复
Kevin_qing:谢谢你的答复。如何才能知道有程序覆盖了高端内存的ROM代码呢?怎样恢复?恢复成什么样子?对不起,我的问题可能很幼稚。希望能得到您的指点。
Kevin_qing 2000-08-30
  • 打赏
  • 举报
回复
to lidah:
待我找找书看看了,以前我有这方面的资料的,好久没有用了,都忘的差不多了。
可用的办法是,改写引导区,起动时将0xc000:0-0xffff:ffff的内存内容保存到预先保留的硬盘扇区里面,并且也要保存所有中断向量,然后再载如真正的引导代码,進行引导。
重起时,要关掉中断,恢复0xc0000-oxffff:ffff 和 中断向量,在载入新的引导程序。

其实这和引导病毒挺像了 :)

SCUM 2000-08-30
  • 打赏
  • 举报
回复
我有一个方法:
1。确定要引导的OS的Pre-Loader的位置(如 dos, win9x 是在引导盘的首扇区)。
2。恢复内存中的 rom-map,即从 BIOS 内重新映射(包括最初的int9,int13等)。
3。将OS的 Pre-Loader 读入内存。(位置很重要,最好从 7c00 处开始放置)
4。jmp 到 7c00 处。

注:1。如果不重新启动就没有必要刻意激活分区。
2。针对不同OS所在分区的文件系统,代码应作相应调整。

Kevin_qing 2000-08-29
  • 打赏
  • 举报
回复
另外,这样在V86模式下是不可以用得。
idlecat 2000-08-29
  • 打赏
  • 举报
回复
loadlin做的就是从dos下引导linux,不过我感觉它的做法不具有通用性,因为还需要内核文件.但对于linux是够用了!
Kevin_qing 2000-08-28
  • 打赏
  • 举报
回复
先CLI,关所有中断,将所有中断向量设回,然后自己读引导区的数据,
jmp到引导代码,应该就ok 了!

另外,如果有程序覆盖了高端内存的ROM代码(有一部分是可以覆盖的,其实这不示真的rom,是引导用的),也要向办法副原。


69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧