這篇主要是介紹如何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…等…待續

最後修改日期: 3 6 月, 2022

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。