這篇主要是介紹如何porting Linux到不同platform的步驟,並且把該修改的檔案和kernel該選的選項稍微介紹一下,會順代提一下debug的方式
因為小弟最近在忙其它的專案,所以這篇HowTo我把它分成幾個部份分開發表,而我打算以NoMMU的QT2410 Linux做為此次移植的目標.
準備的工具我列如下
1. ELDK(Embedded Linux Development Kit): ftp://ftp.denx.de/pub/eldk/4.1/arm-linux-x86-uclibc/iso/arm-2007-01-22-uclibc-src.iso
2.uClinux 2.6.14:http://opensrc.sec.samsung.com/
3.Segger J-Link ICE
ELDK的安裝我在前一篇網誌中(u-boot porting guide)有提過,所以略過不提,而uClinux 2.6.14的patch方法請詳細的閱讀此網頁
至於ICE,其實國內有人在賣,用Google找一下都一卡車
以上三個工具都準備好後,就開始以下的步驟
1.新增arch number和name 至arch/arm/tools/mach-types
qt2410 ARCH_QT2410 QT2410 858
2.新增arch/arm/mach-qt2410和include/asm-arm/arch-qt2410/資料夾
3.把arch/arm/espd_4510b下的檔案複製到arch/arm/mach-qt2410,再把include/asm-arm/arch-espd_4510b/下的檔案複製到include/asm-arm/arch-qt2410/,我們會拿4510的移植檔當範本是有原因的,因為它夠簡單
4.修改arch/arm/mach-qt2410的Kconfig和arch/arm/mm/Kconfig以符合我們的架構和cpu type
5.把arch/arm/mach-qt2410下的檔案精簡化,去掉不必要的function,並把arch/arm/kernel/head-nommu.S這個檔案複製到arch/arm/mach-qt2410,並更名為head.S
6.因為我們要用ICE debug,所以要修改arch/arm/mach-qt2410/head.S,新增兩行如下
#define qttype 0x35a
__INIT
.type stext, %function
ENTRY(stext)
mov r0,#0
ldr r1,=qttype
編譯完後,開啟arm-elf-insight(arm-elf-insight與ICE的使用方法請看此網誌(u-boot porting guide),載入vmlinux檔案後,單步追縱到start_kernel即可
因為我們到目前為止的步驟只是幫我們新的架構建一個殼,其實還有一些跟平台有關的檔案要修改,例如irq,timer…等…待續
留言