Intel Assabet (SA-1110 評估) 主機板

請參閱: http://developer.intel.com

另請參閱 John G Dorsey <jd5q@andrew.cmu.edu> 的一些說明: http://www.cs.cmu.edu/~wearable/software/assabet.html

構建核心

使用當前預設設定構建核心

make assabet_defconfig
make oldconfig
make zImage

生成的核心映象檔案應位於 linux/arch/arm/boot/zImage。

安裝引導載入程式

一些能夠在 Assabet 上啟動 Linux 的引導載入程式可用

BLOB (http://www.lartmaker.nl/lartware/blob/)

BLOB 是 LART 專案中使用的引導載入程式。一些貢獻的補丁已合併到 BLOB 中,以增加對 Assabet 的支援。

康柏的 Bootldr + John Dorsey 為 Assabet 支援提供的補丁 (http://www.handhelds.org/Compaq/bootldr.html) (http://www.wearablegroup.org/software/bootldr/)

Bootldr 是康柏為 iPAQ Pocket PC 開發的引導載入程式。John Dorsey 提供了附加補丁,以增加對 Assabet 和 JFFS 檔案系統的支援。

RedBoot (http://sources.redhat.com/redboot/)

RedBoot 是 Red Hat 基於 eCos RTOS 硬體抽象層開發的引導載入程式。它支援 Assabet 以及許多其他硬體平臺。

RedBoot 目前是推薦的選擇,因為它是唯一支援網路功能的,並且是維護最活躍的。

下面顯示瞭如何使用 RedBoot 啟動 Linux 的簡要示例。但首先,您需要在快閃記憶體中安裝 RedBoot。一個已知的、可工作的預編譯 RedBoot 二進位制檔案可從以下位置獲取

查詢 redboot-assabet*.tgz。一些安裝資訊在 redboot-assabet*.txt 中提供。

RedBoot 初始配置

這裡使用的命令在 RedBoot 使用者指南中進行了解釋,該指南線上地址為 http://sources.redhat.com/ecos/docs.html。請參考它以獲取詳細說明。

如果您有 CF 網絡卡(我的 Assabet 套件包含一張 Socket Communications Inc. 的 CF+ LP-E),您應該強烈考慮將其用於 TFTP 檔案傳輸。您必須在 RedBoot 執行之前插入它,因為它無法動態檢測到。

初始化快閃記憶體目錄

fis init -f

要初始化非易失性設定,例如是否要使用 BOOTP 或靜態 IP 地址等,請使用此命令

fconfig -i

將核心映象寫入快閃記憶體

首先,核心映象必須載入到 RAM 中。如果您的 TFTP 伺服器上有 zImage 檔案

load zImage -r -b 0x100000

如果您更願意透過序列埠使用 Y-Modem 上傳

load -m ymodem -r -b 0x100000

寫入快閃記憶體

fis create "Linux kernel" -b 0x100000 -l 0xc0000

啟動核心

核心仍然需要檔案系統才能啟動。Ramdisk 映象可以按如下方式載入

load ramdisk_image.gz -r -b 0x800000

同樣,可以透過將檔名替換為 ‘-y ymodem’ 來使用 Y-Modem 上傳而不是 TFTP。

現在可以從快閃記憶體中檢索核心,如下所示

fis load "Linux kernel"

或按前述方式載入。要啟動核心

exec -b 0x100000 -l 0xc0000

Ramdisk 映象也可以儲存到快閃記憶體中,但如後所述,對於快閃記憶體上的檔案系統有更好的解決方案。

使用 JFFS2

使用 JFFS2(第二代日誌快閃記憶體檔案系統)可能是將可寫檔案系統儲存到快閃記憶體中最便捷的方式。JFFS2 與 MTD 層結合使用,MTD 層負責低階快閃記憶體管理。有關 Linux MTD 的更多資訊,可線上訪問:http://www.linux-mtd.infradead.org/。關於建立 JFFS/JFFS2 映象的 JFFS 操作指南可從同一網站獲取。

例如,可以從下面提到的與預編譯 RedBoot 映象相同的 FTP 站點檢索示例 JFFS2 映象。

載入此檔案

load sample_img.jffs2 -r -b 0x100000

結果應如下所示

RedBoot> load sample_img.jffs2 -r -b 0x100000
Raw file loaded 0x00100000-0x00377424

現在我們必須知道未分配快閃記憶體的大小

fis free

結果

RedBoot> fis free
  0x500E0000 .. 0x503C0000

上述值可能因檔案系統大小和快閃記憶體型別而異。請將它們作為示例,並在使用時注意進行適當替換。

我們必須確定一些值

size of unallocated flash:      0x503c0000 - 0x500e0000 = 0x2e0000
size of the filesystem image:   0x00377424 - 0x00100000 = 0x277424

我們當然希望安裝檔案系統映象,但我們也希望將其所有剩餘的快閃記憶體空間都分配給它。要寫入它

fis unlock -f 0x500E0000 -l 0x2e0000
fis erase -f 0x500E0000 -l 0x2e0000
fis write -b 0x100000 -l 0x277424 -f 0x500E0000
fis create "JFFS2" -n -f 0x500E0000 -l 0x2e0000

一旦 Linux 在啟動過程中發現了 MTD “分割槽”,檔案系統就會與它關聯。在 RedBoot 中,‘fis list’ 命令會顯示它們

RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0x50000000  0x50000000  0x00020000  0x00000000
RedBoot config    0x503C0000  0x503C0000  0x00020000  0x00000000
FIS directory     0x503E0000  0x503E0000  0x00020000  0x00000000
Linux kernel      0x50020000  0x00100000  0x000C0000  0x00000000
JFFS2             0x500E0000  0x500E0000  0x002E0000  0x00000000

然而 Linux 應該顯示類似以下內容

SA1100 flash: probing 32-bit flash bus
SA1100 flash: Found 2 x16 devices at 0x0 in 32-bit mode
Using RedBoot partition definition
Creating 5 MTD partitions on "SA1100 flash":
0x00000000-0x00020000 : "RedBoot"
0x00020000-0x000e0000 : "Linux kernel"
0x000e0000-0x003c0000 : "JFFS2"
0x003c0000-0x003e0000 : "RedBoot config"
0x003e0000-0x00400000 : "FIS directory"

這裡重要的是我們感興趣的分割槽位置,它是第三個。在 Linux 中,這對應於 /dev/mtdblock2。因此,要在快閃記憶體中使用核心及其根檔案系統啟動 Linux,我們需要這個 RedBoot 命令

fis load "Linux kernel"
exec -b 0x100000 -l 0xc0000 -c "root=/dev/mtdblock2"

當然,除了 JFFS 之外,還可以使用其他檔案系統,例如 cramfs。您可能希望透過 NFS 等方式啟動根檔案系統。此外,也可以在從 ramdisk 或 NFS 啟動 Linux 後,直接從 Linux 內部刷寫檔案系統,這有時更方便。Linux MTD 倉庫也有許多處理快閃記憶體的工具,例如擦除快閃記憶體。然後 JFFS2 可以直接掛載到剛擦除的分割槽上,檔案也可以直接複製過去。等等...

RedBoot 指令碼

如果每次 Assabet 重啟時都必須輸入上述所有命令,那它們就不是那麼有用了。因此,可以使用 RedBoot 的指令碼功能來自動化啟動過程。

例如,我使用此命令來啟動 Linux,其中核心和 ramdisk 映象都從網路上的 TFTP 伺服器獲取

RedBoot> fconfig
Run script at boot: false true
Boot script:
Enter script, terminate with empty line
>> load zImage -r -b 0x100000
>> load ramdisk_ks.gz -r -b 0x800000
>> exec -b 0x100000 -l 0xc0000
>>
Boot script timeout (1000ms resolution): 3
Use BOOTP for network configuration: true
GDB connection port: 9000
Network debug at boot time: false
Update RedBoot non-volatile configuration - are you sure (y/n)? y

然後,重啟 Assabet 只需要等待登入提示符即可。

Nicolas Pitre nico@fluxnic.net

2001年6月12日

-rmk 樹中外設的狀態 (2001年10月14日更新)

Assabet
序列埠
無線電: TX, RX, CTS, DSR, DCD, RI
  • 電源管理 (PM): 未測試。

  • COM: TX, RX, CTS, DSR, DCD, RTS, DTR, 電源管理 (PM)

  • 電源管理 (PM): 未測試。

  • I2C: 已實現,未完全測試。

  • L3: 已完全測試,透過。

  • 電源管理 (PM): 未測試。

影片
  • LCD: 已完全測試。電源管理 (PM)

(連線 neponset 時 LCD 不喜歡被清屏)

  • 影片輸出: 未完全測試

音訊

UDA1341: - 播放: 已完全測試,透過。- 錄音: 已實現,未測試。- 電源管理 (PM): 未測試。

UCB1200: - 音訊播放: 已實現,未充分測試。- 音訊錄製: 已實現,未充分測試。- 電信音訊播放: 已實現,未充分測試。- 電信音訊錄製: 已實現,未充分測試。- POTS 控制: 否 - 觸控式螢幕: 是 - 電源管理 (PM): 未測試。

其他
  • PCMCIA

  • LPE: 已完全測試,透過。

  • USB: 否

  • IRDA

  • SIR: 已完全測試,透過。

  • FIR: 已完全測試,透過。

  • 電源管理 (PM): 未測試。

Neponset
序列埠
  • COM1,2: TX, RX, CTS, DSR, DCD, RTS, DTR

  • 電源管理 (PM): 未測試。

  • USB: 已實現,未充分測試。

  • PCMCIA: 已實現,未充分測試。

  • CF: 已實現,未充分測試。

  • 電源管理 (PM): 未測試。

更多內容可以在 -np (Nicolas Pitre 的) 樹中找到。