(原文發表於
2005/01/17)
作者/陳俊宏
Copyright
(c) 2005 www.jollen.org
Last date: 2005/01/17
理論上,一個完整的 Embedded
Linux 系統開機過程可分成 3
個階段:
bootstrap loader
boot
loader
linux kernel
bootstrap loader 比較像是
PC 上的 BIOS,大部份的target
device,像是evaluation
board、reference
board等,都是在設計板子時由廠商設計完成並提供(ship)給終端使用者(end-user)。
Boot loader 則是像
desktop Linux 上的
LILO、GRUB
等,支援 ARM
的 boot loader 像是比較知名的
RedBoot 等都可以用在
ARM 板子上,一般
boot loader 都會提供
serial port 傳輸與 MTD
支援,讓我們可以燒錄資料到
ROM (flash) 裡。本文會以KS8695
(ARM9) 板子來當例子,這張板子上的
boot loader 還支援
ethernet 傳輸,可以讓我們透過網路將資料直接燒錄到
ROM 裡面。
* 可以參考筆者所著”Embedded
Linux 嵌入式系統—原理與實務 (2e),學貫”第6
章有關 Linux 在
PC (x86) 上的開機流程講解。
我們主要所要講解的部份為 linux
kernel 本身的 porting。再次,就理論上,對於linux
kernel本身的porting可以分為2個層面來討論:
Microprocessor architecture
level
Board support package (BSP) level
Microprocessor architecture
level 主要的工作是讓 Linux
kernel 能支援不同的處理器架構,例如:PowerPC、ARM、MIPS...等等。Microprocessor
又可分為 MMU 與
MMU-less 的架構,前者可使用標準的
Linux kernel 來
porting,後者可使用
uClinux 做為解決方案。Linux
kernel 本身 (包含
uClinux) 對於微處理器架構方面的
porting 工作都已經完成了!
所以我們沒有可以發揮的空間,因此
BSP level 的 porting
才是目前做 kernel
porting 最主要的工作。
我們以 KS8695
板子為例來做說明。Board
support package 故名思義就是要修改 kernel
讓 kernel
可以支援我們所設計的板子,我們所使用的板子採用
KENDIN KS8695 SoC,這顆
SoC 是 ARM9TDMI
的架構,因此我們要先對
Linux kernel 做 ARM
Linux 的 patch,讓
Linux kernel 能完整支援
ARM 微處理器。
接著,就要修改
patch 好的 Linux
kernel (ARM9) 讓 kernel
可以支援 KS8695 這顆
SoC。也就是基於支援
ARM9 (armv) 的 Linux
kernel 來加入 (porting)
對 KS8695 SoC 的支援,即進行
KS8695 的 board
support package level porting。
針對 ARM (with MMU) 的
BSP porting 工作,是存在一個標準的操作流程的!
在本文#2中將會介紹此
porting 流程。
--jollen