發表於 January 17, 2005 4:11 PM

(原文發表於 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 boardreference board,都是在設計板子時由廠商設計完成並提供(ship)給終端使用者(end-user)

Boot loader 則是像 desktop Linux 上的 LILOGRUB ,支援 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 能支援不同的處理器架構,例如:PowerPCARMMIPS...等等。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

Linux Kernel Porting #2, 基本流程與方法
Copyright (c) 2005 www.jollen.org
Last date: 2005/01/17
在將 Linux kernel porting 到其它的 ARM 平臺之前, 必須先取得標準 Linux kernel,然後再做 ARM Linux patch
下載以下檔案:
ftp://ftp.arm.linux.org.uk/pub/armlinux/source/kernel-patches/v2.4/patch-2.4.26-vrs1.gz
ftp://ftp.nsysu.edu.tw/Linux/Kernel/linux/kernel/v2.4/linux-2.4.26.tar.bz2
安裝 Linux kernel patch:
# bzip2 -dc linux-2.4.26.tar.bz2 | tar xf -
# mv linux-2.4.26 linux-2.4.26-vrs1
# cd linux-2.4.26-vrs1
# gzip -dc ../patch-2.4.26-vrs1.gz | patch -p1 -
本文以 KS8695 板子為實例,說明如何將 kernel 2.4.26 (vrs1) porting 到其它的 ARM 平臺。對於所有的 ARM 平臺而言,我們可以歸納出 3 個基本的 porting 流程如下:
1.
登錄一個 Machine ID
2.
編輯 config.in 設定檔與 Makefile.
linux/arch/arm/config.in
arch/arm/Makefile
arch/arm/boot/Makefile
arch/arm/mach-XXX/Makefile
3.
修改原始檔如下.
arch/arm/kernel/entry-armv.S
arch/arm/kernel/debug-armv.S
arch/arm/mach-XXX/arch.c
arch/arm/mach-XXX/irq.c
arch/arm/mach-XXX/mm.c
include/asm/arch/dma.h
include/asm/arch/hardware.h
include/asm/arch/io.h
include/asm/arch/irq.h
include/asm/arch/irqs.h
include/asm/arch/keyboard.h
include/asm/arch/memory.h
include/asm/arch/param.h
include/asm/arch/system.h
include/asm/arch/timex.h
include/asm/arch/uncompress.h
include/asm/arch/vmalloc.h
以上是 porting Linux 到其它 ARM 平臺的大原則與方法。
[i]--jollen[/i]