Linux Kernel Porting #1, 基本概念
(原文發表於 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 流程。