佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: 詩魂

Linux 開機流程(x86版)

[复制链接]
发表于 21-5-2009 12:09 PM | 显示全部楼层

回复 40# 糯米鸡 的帖子

果然自大没人救。

就拿你的intel 的 specification

8.1.4

The address FFFFFFF0H is beyond the 1-MByte addressable range of the processor
while in real-address mode. The processor is initialized to this starting address as
follows. The CS register has two parts: the visible segment selector part and the
hidden base address part. In real-address mode, the base address is normally
formed by shifting the 16-bit segment selector value 4 bits to the left to produce a
20-bit base address. However, during a hardware reset, the segment selector in the
CS register is loaded with F000H and the base address is loaded with FFFF0000H. The
starting address is thus formed by adding the base address to the value in the EIP
register (that is, FFFF0000 + FFF0H = FFFFFFF0H).


看到吗, 开机时 A20 是被屏幕的。0xfffffff0 = 0xffff0

我也不想回复了, 一位自己是 debuger, 那就不会错?
回复

使用道具 举报


ADVERTISEMENT

发表于 21-5-2009 12:46 PM | 显示全部楼层
原帖由 onlylonly 于 21-5-2009 12:09 PM 发表

The address FFFFFFF0H is beyond the 1-MByte addressable range of the processor
while in real-address mode. The processor is initialized to this starting address as
follows. The CS register has two parts: the visible segment selector part and the
hidden base address part. In real-address mode, the base address is normally
formed by shifting the 16-bit segment selector value 4 bits to the left to produce a
20-bit base address. However, during a hardware reset, the segment selector in the
CS register is loaded with F000H and the base address is loaded with FFFF0000H. The
starting address is thus formed by adding the base address to the value in the EIP
register (that is, FFFF0000 + FFF0H = FFFFFFF0H).

我好意和你讲, 你还讲我自大。 你八成是没有看完整个文章。我就highlight你应该看的部分。
都已经讲了, 是在big real mode你还跟我讲real mode的东西。 我有错的话, 我一定直讲, 就像 我之前讲我说错的一样。
回复

使用道具 举报

发表于 21-5-2009 01:00 PM | 显示全部楼层
最近天气很热下。。。。。
回复

使用道具 举报

 楼主| 发表于 21-5-2009 01:44 PM | 显示全部楼层
抱歉我來晚了
抱歉我的文章讓各位有點不愉快.
糯米雞兄是站在cpu reset vector的角度來看,
cpu spec定義他認的第一個指令位址是在F000:FFF0,
然而在一開機一上電以後 (除非是warm boot)是處於real address mode,
且當時尚無法存取內部記憶體空間,
實際上F000:FFF0也是對映到FFFF:0000 ROM BIOS.

為免混淆,我當時是這麼寫的:
電腦開發者預先編好了供系統啟動使用的啟動程式,把它們存放在ROM中,並安排它到一個固定的位置,即FFFF:0000,CPU就從BIOS中獲得了啟動所需的指令集......

所以我指的並不是CPU抓取(cpu認)的第一個指令位址,
希望糯米雞兄暸解
也謝謝only兄的補充

有錯敬請指正

[ 本帖最后由 詩魂 于 21-5-2009 01:46 PM 编辑 ]
回复

使用道具 举报

发表于 21-5-2009 02:31 PM | 显示全部楼层
原帖由 詩魂 于 21-5-2009 01:44 PM 发表 抱歉我來晚了 抱歉我的文章讓各位有點不愉快.糯米雞兄是站在cpu reset vector的角度來看,cpu spec定義他認的第一個指令位址是在F000:FFF0,然而在一開機一上電以後 (除非是warm boot)是處於real address mo ...
你的FFFF:0000是指system memory location?
回复

使用道具 举报

发表于 21-5-2009 04:41 PM | 显示全部楼层

回复 44# 詩魂 的帖子

實際上F000:FFF0也是對映到FFFF:0000 ROM BIOS.


这个我在33 楼已经 prove 出来了, 不够却被否认。

有人却硬硬不承认
回复

使用道具 举报

Follow Us
发表于 21-5-2009 05:29 PM | 显示全部楼层
终于找到了

intel 的 reference guide



8.8 SOFTWARE INITIALIZATION FOR PROTECTED-MODE OPERATION
The processor is placed in real-address mode following a hardware reset. At this point in the initialization process, some basic data structures and code modules must be loaded into physical memory to support further initialization of the processor, as described in Section 8.7, “Software Initialization for Real-Address Mode Operation.”

25.2 SYSTEM MANAGEMENT INTERRUPT (SMI)
The only way to enter SMM is by signaling an SMI through the SMI# pin on the
processor or through an SMI message received through the APIC bus.
回复

使用道具 举报

发表于 21-5-2009 05:30 PM | 显示全部楼层
是 real mode, 不是 big real mode
回复

使用道具 举报


ADVERTISEMENT

发表于 21-5-2009 05:37 PM | 显示全部楼层
有人更天才, amd 和 intel 里面的specification 已经写到一清二楚, 就是要以自己的理论来否认人家specification里面写的东西。 然后要以在os 里面看到的东西来辨,却不晓得从reset vector到os loading之间已经跑了多少code。我也从不否认dos legacy address range里面会有bios的code。有人会通过os来查看memory的资料, 却没想到, 更好的方法, 是直接用更好的仪器, 直接在reset vector里面看处理器的cs和eip。
我敢以这样讲, 是因为我在这行业打滚了6年。这个问题, 我之前已经问过了我公司里面的senior technical engineer和bios engineer。我敢讲是因为我有足够的自信, 有人却不爽然后讲我自大, 也不知道他是干什么行业的。
回复

使用道具 举报

发表于 21-5-2009 06:06 PM | 显示全部楼层
凳子,汽水,爆米花。。。有戏看。
回复

使用道具 举报

发表于 21-5-2009 06:49 PM | 显示全部楼层
原帖由 onlylonly 于 21-5-2009 05:30 PM 发表 是 real mode, 不是 big real mode
在intel的spec里面, 你是找不到big real mode。 如果你以为real mode只可以读取1MB或以下的memory, 那你就错了。在real mode里, 如果你知道的话, 你是能打开一些设定读取1MB以上的memory,这个模式, 就是所谓big real mode。在real mode里面的操作方式, 是和real mode一样, 除了可以读取更多memory address(4GB)。所以, 有些人, 都把它和real mode归成一类。 Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1 Table 8.1已经写到一清二楚了。 我也highlight了 8.1。4的要点。
回复

使用道具 举报

发表于 21-5-2009 06:49 PM | 显示全部楼层
原帖由 chfl4gs_ 于 21-5-2009 06:06 PM 发表 凳子,汽水,爆米花。。。有戏看。
表这样, 来,发表意见
回复

使用道具 举报

发表于 21-5-2009 06:56 PM | 显示全部楼层
虽然我菜鸟看不懂你们在争什么 ,不过两位大大也未免太激了吧。来来来,握个手 ,大家有话好好讲。
回复

使用道具 举报

发表于 21-5-2009 09:58 PM | 显示全部楼层

回复 49# 糯米鸡 的帖子

对对对, 只有你会对。 起他人都是错的。

bios 的位置一定只有是在 reset vector 那里的,一定是的。 bios 的memory location 只有你说的那个罢了, 其他影印在那里的都是错的.

FFFF:0000 肯定不等于 F000:FFF0 的, BIOS 的位置当然不是 FFFF:0000

IBM 的 technical doc 错的, wiki 当然也是错的。 一定是的。

OS 看的BIOS location时候也是错的。

好好好, 你对,你对, 不跟你争, 都是你对 , 你打滚的了六年啊, 哪里会错的、?

[ 本帖最后由 onlylonly 于 21-5-2009 10:34 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 21-5-2009 10:43 PM | 显示全部楼层
對於糯米雞兄,弟尊重您的專業,
弟的工作領域以嵌入式系統為主,
對於X86仍有許多需向您學習的。

然而這裡我們討論的是ROM Bios,而非Intel CPU reset vector
一定是我的文章沒有寫得很清楚,才會讓您誤會。
對於文中沒有清楚說明,在此向各位致歉

對於only兄,雖然只是個學生,但很感佩他的學習態度。
我在念大學時絕對沒有這麼認真過
ONLY兄實事求事的精神和態度,讓我深深地感覺到,
大馬也有如此優秀的學子,你未來的成就是備受肯定的,
希望你再接再勵,因為我希望大馬也能有像Jserv,PCMAN,
甚至Linus這類優秀的人材
回复

使用道具 举报

 楼主| 发表于 21-5-2009 10:47 PM | 显示全部楼层

回复 51# 糯米鸡 的帖子

我想,only說不是big real mode是指,
系統power on 或 reset當時並非處於big real mode,
而是real mode的意思。並非不知big real mode。。。

就我的認知,real mode要轉到big real mode,
需先轉到protect mode再轉成big real mode才行,
但我也有一陣子沒碰X86了,若有更變,還請指正
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 21-5-2009 10:50 PM | 显示全部楼层

回复 46# onlylonly 的帖子

这个我在33 楼已经 prove 出来了,

哈。。我知道啊,所以我很謝謝您幫我補充了這麼多,
基本上您補充的資料已經非常詳盡和清楚,
我後來也只是結論一下
回复

使用道具 举报

发表于 22-5-2009 12:27 AM | 显示全部楼层
原帖由 onlylonly 于 21-5-2009 09:58 PM 发表
对对对, 只有你会对。 起他人都是错的。

bios 的位置一定只有是在 reset vector 那里的,一定是的。 bios 的memory location 只有你说的那个罢了, 其他影印在那里的都是错的.

FFFF:0000 肯定不等于 F000:FFF ...

你在哪里发什么鬼唠叨? 你知道什么叫reset vector吗? 那就是当处理器在power up或reset时, 第一个指令所在的地方。也就是说, 如果你的处理器, 第一个停在的地方, 是12345, 那么, 你的reset vector, 就是在12345。
原帖由 詩魂 于 21-5-2009 10:43 PM 发表
對於糯米雞兄,弟尊重您的專業,
弟的工作領域以嵌入式系統為主,
對於X86仍有許多需向您學習的。

然而這裡我們討論的是ROM Bios,而非Intel CPU reset vector
一定是我的文章沒有寫得很清楚,才會讓您誤會。
...

你应该是从事embedded的, 是不是? embedded所用的处理器和整个平台, 我不便给意见, 因为我在这一方面没有idea。我讲的是,关于普通用户所用的电脑平台。 我和你所讲的, 可能所讲的东西, 是两个不同东西。 所以, 你根本没有错, 何来的道歉?
但是, 他很明显的是, 就是针对我所讲的东西。连physical address都算出来了, 你还要我怎么讲?
我只是叫他去参考我建议的两个specification,我都不知道他有没有看好来, 就来这里copy and paste里面的资料,然后就highlight里面的东西。Ok,好, 那么我就highlight里面的重点, 就连那个however, 我也放大给他看。为什么?就是因为这是特殊的例子。ok, 他坚持不是big real mode, 好, 那就real mode咯。 我就在51#那里解释。
他在linux里面用软件看到是事实, 我在bios还没有跑第一个指令,用jtag来停住,然后看到的东西不是事实。 他在xyz地方看到的article,是事实, 我建议他看的两个specification(intel 和amd publish的),是假的。
回复

使用道具 举报

发表于 22-5-2009 12:29 AM | 显示全部楼层
原帖由 詩魂 于 21-5-2009 10:47 PM 发表
我想,only說不是big real mode是指,
系統power on 或 reset當時並非處於big real mode,
而是real mode的意思。並非不知big real mode。。。

就我的認知,real mode要轉到big real mode,
需先轉到protect mo ...

ok这个你们认为不是big real mode,是real mode, 我没问题。  我只能讲的是在我这里, 那是指big real mode。
回复

使用道具 举报

发表于 22-5-2009 09:21 AM | 显示全部楼层
悲哀阿, 诗魂兄已经重复了这么多次。 这里讲的是 BIOS 的 位置, 不是 reset vector 跑的第一个指令。

可有人偏偏就是要扭去 reset vector。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 28-3-2024 06:01 PM , Processed in 0.076107 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表