ARM Linux 2.6 及以上版本¶
請檢查 <ftp://ftp.arm.linux.org.uk/pub/armlinux> 以獲取更新。
核心編譯¶
為了編譯 ARM Linux,您需要一個能夠生成帶有 GNU 擴充套件的 ARM ELF 程式碼的編譯器。 據瞭解 GCC 3.3 是一個不錯的編譯器。 幸運的是,您無需猜測。 如果您的編譯器是公認的違規者,核心將報告錯誤。
要以本機方式構建 ARM Linux,您不必更改頂級 Makefile 中的 ARCH = 行。 但是,如果您沒有將 ARM Linux ELF 工具安裝為預設工具,則應按以下詳細資訊更改 CROSS_COMPILE 行。
如果要交叉編譯,請更改頂級 make 檔案中的以下行
ARCH = <whatever>使用
ARCH = arm和
CROSS_COMPILE=改為
CROSS_COMPILE=<your-path-to-your-compiler-without-gcc>例如。
CROSS_COMPILE=arm-linux-執行 ‘make config’,然後執行 ‘make Image’ 來構建核心 (arch/arm/boot/Image)。 可以透過執行 ‘make zImage’ 而不是 ‘make Image’ 來構建壓縮映像。
錯誤報告等¶
請將補丁傳送到補丁系統。 有關更多資訊,請參見 http://www.arm.linux.org.uk/developer/patches/info.php 始終包含對補丁所做工作以及需要該補丁的原因的說明。
錯誤報告應傳送至 linux-arm-kernel@lists.arm.linux.org.uk,或透過以下網址的網路表單提交:http://www.arm.linux.org.uk/developer/
傳送錯誤報告時,請確保其中包含所有相關資訊,例如,在問題之前/期間列印的核心訊息,您正在執行的操作等。
包含檔案¶
在 include/asm-arm 下建立了幾個新的 include 目錄,目的是減少頂級目錄中的混亂。 這些目錄及其用途如下所示
arch-*
特定於機器/平臺的標頭檔案
硬體
驅動程式內部 ARM 特定資料結構/定義
mach
通用 ARM 到特定機器介面的描述
proc-*
處理器相關的標頭檔案(目前只有兩類)
機器/平臺支援¶
ARM 樹包含對許多不同機器型別的支援。 為了繼續支援這些差異,有必要按目錄拆分特定於機器的部分。 為此,機器類別用於選擇包含哪些目錄和檔案(我們將使用 $(MACHINE) 來引用該類別)
為此,我們現在有 arch/arm/mach-$(MACHINE) 目錄,這些目錄旨在容納特定機器的非驅動程式檔案(例如,PCI、記憶體管理、體系結構定義等)。 對於所有將來的機器,都應有一個相應的 arch/arm/mach-$(MACHINE)/include/mach 目錄。
模組¶
儘管支援模組化(並且 FP 模擬器需要模組化),但在載入時,ARM2/ARM250/ARM3 機器上的每個模組都會佔用記憶體,直至下一個 32k 邊界(由於頁面大小)。 因此,在這些機器上進行模組化真的值得嗎?
但是,ARM6 及更高版本的機器允許模組佔用 4k 的倍數,因此,使用這些處理器的 Acorn RiscPC 和其他體系結構可以很好地利用模組化。
ADFS 映象檔案¶
您可以透過掛載 ADFS 分割槽,然後使用環回裝置驅動程式來訪問 ADFS 分割槽上的映象檔案。 您必須安裝 losetup。
請注意,PCEmulator DOS 分割槽在開頭有一個分割槽表,因此,您必須為 losetup 提供 ‘-o offset’。
對開發者的請求¶
編寫包含單獨彙編程式檔案的裝置驅動程式時,請將其包含在 C 檔案中,而不是 arch/arm/lib 目錄中。 這允許將驅動程式編譯為可載入模組,而無需將一半的程式碼編譯到核心映象中。
通常,除非確實有必要,否則請儘量避免使用匯程式設計序。 這使得驅動程式更難移植到其他硬體。
ST506 硬碟¶
ST506 硬碟控制器似乎工作正常(如果有點慢)。 目前,它們只能在 A4x0 主機板上的控制器上工作,但是要使其在 Podule 上工作,只需要有一個帶有 podule 的人將 IRQ 掩碼和 HDC 基本地址新增到原始碼中。
截至 96 年 3 月 31 日,它與兩個驅動器一起工作(您應該將 ADFS *configure 硬碟設定為 2)。 我有一個內部 20MB 和一個巨大的外部 5.25 英寸 FH 64MB 驅動器(誰還需要更多 :-) )。
我剛剛從它那裡獲得了 240K/s(一個 bs=128k 的 dd); 這大約是 RiscOS 獲得的一半; 但這比我上週獲得的 50K/s 好多了 :-)
已知錯誤:驅動器資料錯誤可能會導致掛起; 包括控制器已使用 ECC 修復錯誤的情況。 (可能僅在這種情況下……嗯)。
1772 軟盤¶
這似乎也可以正常工作,但最近沒有進行太多測試。 目前還沒有任何用於磁碟更改檢測的程式碼,這可能有點問題! 歡迎就正確的方法提出建議。
CONFIG_MACH_ 和 CONFIG_ARCH_¶
2003 年對新機器的宏名稱進行了更改。 歷史上,CONFIG_ARCH_ 用於真正的架構,例如 SA1100,以及架構的實現,例如 Assabet。 為了清楚起見,決定將實現宏更改為讀取 CONFIG_MACH_。 此外,由於這會使修補複雜化,因此沒有進行追溯修復。
以前的註冊可以在網上找到。
核心入口 (head.S)¶
透過 head.S 進入核心的初始入口,該入口使用機器無關的程式碼。 機器由入口處的 ‘r1’ 值選擇,該值必須保持唯一。
由於 Linux 的 ARM 埠提供了大量的機器,因此我們有一種管理它的方法,以確保我們最終不會重複大量的程式碼。
我們將機器(或平臺)支援程式碼分組到機器類中。 一個類通常基於一個或多個片上系統裝置,並充當實際實現的自然容器。 這些類被賦予目錄 - arch/arm/mach-<class> - 其中包含原始檔和 include/mach/ 以支援機器類。
例如,SA1100 類基於 SA1100 和 SA1110 SoC 裝置,並且包含支援如何使用板載和板外裝置,或如何設定裝置的程式碼,並提供該機器特定的“個性”。
對於支援裝置樹 (DT) 的平臺,機器選擇在執行時透過將裝置樹 blob 傳遞給核心來控制。 在編譯時,必須選擇對機器型別的支援。 這允許將單個多平臺核心構建用於多種機器型別。
對於不使用裝置樹的平臺,此機器選擇由機器型別 ID 控制,該 ID 既充當執行時程式碼選擇方法,又充當編譯時程式碼選擇方法。 您可以透過以下網址的網站註冊新機器
注意:請勿為僅 DT 平臺註冊機器型別。 如果您的平臺是僅 DT 平臺,則無需註冊機器型別。
---
Russell King (15/03/2004)