首先,在Linux下,從Android Open Source Project取得Linux 2.6.27 kernel for Android:
Using Repo and Git
$ cd $(andkernel)
$ git clone git://android.git.kernel.org/kernel/common.git
ATMEL的Linux kernel patch其實就在'AT91CAP9-STK Linux Software Package'中,
還沒下載過的請按此ATMEL原廠下載。
解壓縮之後,在linux-at91cap9stk-source/patch/linux中有三個Patch檔:
0001_CAP9-STK_linux-2.6.27-at91.patch
0002_CAP9-STK_linux-2.6.27-at91-exp-cap9-dk.patch
0003_CAP9-STK_linux-2.6.27-at91-exp-cap9-stk.patch
STK板需要0001+0003,DK板需要0001+0002。
把需要的Patch檔移動到$(andsrc)/kernel下,使用以下指令對kernel做patch:
$ patch -p1 < patch-file-name-here
有關patch的使用與功能,請參考這裡。
(注意:在patch 0003的時候,會有Hunk #1 FAILED at 18. 出現在ads7846.c。
是這因為檔案已經修改過,不須再做patch。)
Patch成功後,還有kernel選項需要調整,
在$(andkernel)/common/arch/arm/configs/內有各種開發板的default設定值,
我們先套用at91cap9-stk的設定:
$ cp $(andkernel)/common/arch/arm/configs/at91cap9stk_defconfig $(andkernel)/common/.config
$ make ARCH=arm menuconfig
在這裡我們先不修改設定,直接Exit並儲存設定。
為了編譯ARM CPU可用的kernel,我們使用CodeSourcery的
Sourcery G++ Lite 2008q3-66 for ARM EABI
以下我們以下載IA32 GNU/Linux Installer為例:
$ ./arm-2008q3-66-arm-none-eabi.bin
安裝完成之後,把compiler加入PATH:
$ export PATH=$PATH:$(codesourcery)/Sourcery_G++_Lite/bin
修改$(andkernel)/common底下的Makefile:
CROSS_COMPILE ?= arm-none-eabi-
接著就可以編譯kernel了!
$ make ARCH=arm
OK,現在我們有了kernel,不過U-Boot只吃uImage,
所以要把產生出來的Image改成uImage:
$ cd $(andkernel)/common/arch/arm/boot
$ gzip -9 Image
$ mkimage -A arm -O linux -T kernel -C gzip -a 0x70008000 -d Image.gz uImage
uImage就是我們要的kernel囉。
(待續...)
留言列表