簡體   English   中英

x86 和 ArmV6-M 啟動/復位過程的比較

[英]Comparison of x86 and ArmV6-M Boot/Reset Process

查看ARMv6-M 技術參考手冊,定義了重置/啟動過程。 簡單地說,它加載從SP 0x00000000和PC從0x00000004

對於 x86,我試圖找到類似的信息。 從一般的谷歌搜索中,我可以看到,如果最后兩個字節是0x550xAA ,我可以簡單地看到 CPU 首先加載 BIOS,然后加載引導設備並將執行傳遞給它。 我有一些與此過程相關的問題:

  1. 我假設 x86 CPU 的重置向量將指向 BIOS 代碼?
  2. x86 CPU 的復位向量地址記錄在哪里? 我似乎無法在Intel® 64 和 IA-32 架構軟件開發人員手冊的組合卷集找到它。
  3. 當我谷歌搜索 x86 啟動程序時,為什么包括 BIOS 而不是像 ArmV6M 那樣簡單的重置向量地址? 我知道這很愚蠢,但我不能在理論上使用 x86 CPU 創建一個微控制器並且沒有 BIOS,然后像典型的 ArmV6M 微控制器一樣從 ROM 中的代碼開始執行嗎? 因此,BIOS 不是與 x86 分開的,只是賦予某些旨在收集連接硬件信息的代碼的名稱嗎? 也就是說,Armv6M 系統不能也有 BIOS 嗎? 因此,像 BIOS/UEFI 和 MBR/GPT 這樣的技術不是與 x86 本質上沒有關系,而是經常與 x86 一起出現以促進許多 x86 計算機的通用性質嗎? (所以0xAA55是 x86 BIOS 特有的?)

處理器就是處理器,架構是由不同的人設計的,所以沒有理由假設任何兩個以相同的方式工作。

請注意,您正在查看非正常 ARM 啟動。 cortex-m 使用(傳統的)向量表。 全尺寸 ARM,ARMv1 到 ARMv6 或 7-A 使用指令表,而不是地址表。 然后 ARMv8(cortex-a 不是 m)有自己的方案(這是 64 位 ARM,是之前的全新設計)。 然后是你發現的 cortex-ms,armv6m-8m。

如果你回到開頭,英特爾(搜索 iapx 88 book)清楚地記錄了 CS 設置為 FFFFh 和指令指針 0000h。 它開始在那里執行代碼(有點像全尺寸的 ARM)。 然后從前有一個中斷向量表(我發現有人從英特爾的 bitavers 中標記數字版本令人不安,向量是正確的術語和/或不混淆也不需要替換)我認為從地址開始零。 現在很明顯,arm 和 x86 在內核/芯片中都有一個(或兩個,也許三個)硬件中斷並不能擴展到今天,因此其他解決方案已經發展(好吧,更多的中斷)。

如果您考慮這兩種架構或任何架構(msp430 類似於 x86,在內存空間頂部附近有一個向量表),您理想情況下需要一些非易失性內存(rom/flash)和一些 ram(sram/dram 通常需要一些 sram 來運行代碼以初始化 dram 控制器)。 根據架構的規則,電路板/芯片設計者需要配置地址解碼器,將一些地址空間指向非易失性,一些指向 ram。 並且非易失性必須至少覆蓋芯片/核心啟動的位置。

在 arm 的情況下,芯片設計人員可以在限制范圍內綁定不同的地址,我認為在一些舊的帶有單個表帶的地址上,您可以選擇高或低的起始地址(0x00000000 和 0xFFFF0000 或類似的東西,您可以輕松查找) . cortex-ms 規則更加嚴格。 一些體系結構將中斷/異常解決方案放在 rom 地址空間中並帶有復位,而有些體系結構離它足夠遠以暗示它應該在 ram 中。 MCU 通常希望它在 rom 空間中,但在某個地方的 ram 中是通用的,因為操作系統將希望在加載驅動程序時選擇中斷運行時的位置,而不是您希望在編譯時全部解決的裸機 MCU 解決方案。

請注意,您可能需要查看所有 Intel 文檔,大約在 486 年左右,他們將硬件和軟件開發人員手冊分開,上面的文檔在合並時又回來了。

現在為什么我們沒有 pre-bios 詳細信息? 或者至少不要談論它們。 無論好壞,IBM、英特爾和微軟都讓我們走上了這條道路,主要是英特爾。 直到今天,PC 克隆的東西仍然存在,幾十年后,我們仍然從 BIOS 和插入卡與 bios/boot 一起添加東西的方式中看到許多殘余。你當然可以買一個 x86 處理器和嘗試在不使用庫存 BIOS 的情況下制作自己的主板,只需從重置代碼編寫自己的引導。

但是對於今天的 x86 芯片,幸運的是有一些部落知識,這使得從硬件和軟件的角度來看都非常困難。 幾十年來,只有少數 BIOS 供應商一直在這樣做。 您決定進入主板業務(非常糟糕的主意),您基本上必須支付他們要求的任何價格,假設您可以找到可以設計 pcb 並使其實際工作的人。

我們所稱的 BIOS(名稱使用不當,但無論如何,這就是我們所說的)位於閃存/ROM 上,並且是處理器啟動運行的代碼,它的作者知道這些細節(或者他們知道並且他們只是重復使用)那個代碼在知道退休/去世的人很久之后)。 根據那台 PC 設計的主板和插入式卡解決方案的組合,用於進行通用 BIOS/EFI 調用集,其中硬件供應商隱藏了詳細信息(讀取存儲介質的第一個扇區,請不要讓我必須擁有代碼適用於數十/數千種不同的解決方案。在屏幕緩沖區上打印一些文本字符,請不要讓我知道如何在每個可能的視頻卡上寫入像素),這至少可以讓您通過一個眾所周知的和進化的引導過程來如果不是完全進入您的操作系統,那么今天的內核驅動程序會檢測並確實為每個(受支持的)不同/不兼容的硬件外圍設備提供代碼。

環顧四周,您會看到無數人試圖以操作系統或引導加載程序使用 bios/efi 調用、某些媒體上的已知地址/偏移量等方式引導 x86。但閃存/ROM 代碼如何工作是另一回事。 它肯定是記錄在案的。 畢竟這是英特爾(即使是 AMD),現在如果這是一份 NDA 文件,或者只是一個很少下載的文件,很難找到。 但它被記錄在案。 您可能會在虛擬機/模擬器中找到信息,但我想知道它們是否有 bios 或僅夠一個來啟動流行的操作系統和/或他們作弊。

根據歷史的發展歷程,如果地址的 msbits 中沒有很多地址,我會假設有一個高地址,當前的 x86 處理器會進行第一次讀取,然后由電路板設計人員和軟件決定人們從那里拿走它。

歸根結底,所有處理器都必須有第一個獲取地址解決方案和理想的中斷/異常解決方案。 硬件人員必須設置他們的解碼器來處理第一個獲取地址,並為軟件開發人員提供一種將第一條指令放入該路徑的方法。 除非您為目標受眾記錄下來,否則您不會出售很多芯片。 現在對於 MCU 而言,理想的目標受眾是數萬/數十萬/數百萬的個人客戶。 對於現代 x86,該列表相對較小,軟件只有少數人,硬件有成百上千的客戶。 x86 和 pc 標准,如果你真的要走這條路,蘋果有點偏離,但在不久的將來他們可能會停止使用 x86 並堅持他們的新解決方案,將 x86 留給 pc 模型。

  1. 是的,我們所說的 BIOS(具有類似 OS 功能的精美引導加載程序)確實具有引導處理器的代碼,即包含第一條提取指令的閃存。

  2. 繼續尋找。 SO 不是一個 google this for me 網站。

  3. 絕對地。 任何(通用)處理器都可以有一個引導加載程序,它提供抽象的低級服務以隱藏細節並提供通用接口。 但是,例如 armv6m 可能會在不需要支持無數不兼容插件產品的 MCU 中找到(在 USB 之外,這是它自己的噩夢),該內核的目標市場,和/或者您通常會在 MCU 中找到它,在那里外圍設備已知且資源稀缺,理想情況下您不會出現層層膨脹,只是專門用於該芯片的舊裸機硬編碼軟件。

    我們知道蘋果(他們不是第一個)有一台帶有非 x86 的“PC”,它至少支持一小部分外圍設備(視頻芯片/卡等),但這是蘋果,列表很短,不是單數,而是短的(每個外圍類型)。 所以它已經完成了,但是像 PCIe 這樣的東西是由基於 x86 的電腦創建的/為基於 x86 的電腦創建的,並且那里仍然有一些你可能需要處理的 pc-isms(我工作的卡都沒有,但我不知道如何例如,今天的 bios 可以使用視頻卡,我認為它只是從第一個 PC 解決方案緩慢演變而來)。

如果你真的覺得有需要,你最好購買一些舊的 8086 或 80186 部件並弄亂它們。 如果您想購買當前的 x86 芯片,祝您好運。 通過觀察硬件人員的做法,我會推薦 AMD 而不是 Intel,你會有更好的機會。 但是 AMD 會作為一個沒有大牌客戶的個人與您交談,並且沒有足夠大的芯片年消費量嗎? 我不知道。

從技術上講,是否可以購買任何一代 x86 處理器並將其放在板上並編寫自己的代碼,而不使用某人的 BIOS,絕對不使用您自己的 BIOS。 從技術上講,每個 x86 板都是處理器、閃存/ROM,以及該閃存/ROM 上的第一個提取指令。 在那個級別上,根據定義,它是裸機代碼,就像您在 mcu 上看到/編寫的一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM