Chinaunix首页 | 论坛 | 博客
  • 博客访问: 635486
  • 博文数量: 121
  • 博客积分: 8469
  • 博客等级: 中将
  • 技术积分: 1065
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 10:32
文章分类

全部博文(121)

文章存档

2013年(1)

2012年(15)

2010年(2)

2009年(8)

2008年(95)

我的朋友

分类: LINUX

2008-07-22 16:30:16

Linux Kernel Porting #1, 基本概念

(原文發表於 2005/01/17)
作者/陳俊宏
Copyright (c) 2005
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

Linux Kernel Porting #2, 基本流程與方法

Copyright (c) 2005
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 平臺的大原則與方法。

--jollen

阅读(3155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~