Friday, November 18, 2011

Android Ice Cream Sandwich kernel 3.0 on Pandaboard

好核心,不胖達嗎?

繼上一篇討論如何燒錄Android framework到Pandaboard後,這篇來教學如何燒錄Android kernel for OMAP-4430,再進行這裡的步驟之前,請先照著上一篇做一次,把必要的工具和環境建立出來

1. 下載Android kernel source for Pandaboard

由於Android的kernel source repository掛掉很久了,要檢視所有的branch變得非常困難,首先我們要用git下載Android kernel for OMAP,Pandaboard採用的核心版本為最新的krenel 3.0

$ mkdir kernel_ICS
$ cd kernel_ICS
$ git clone https://android.googlesource.com/kernel/omap.git
$ cd omap
$ git branch -r
$ git checkout -b android-omap-panda-3.0 origin/android-omap-panda-3.0

由於Panda是採用OMAP4430的CPU,當然要抓這個分支囉


2. 編譯kernel

$ export PATH=android_ICS/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:$PATH
$ export CROSS_COMPILE=arm-eabi-
$ cd kernel_ICS/omap/
$ make ARCH=arm panda_defconfig
$ make ARCH=arm -j4

要編譯kernel當然要先設定cross compiler, 從4.0原始碼裡面有提供編譯好的cross compiler binary,直接用他的就好


kernel config這邊選擇panda_defconfig,(我當初下載的是common kernel source,找半天沒有適合Panda的config)

到目前就算是初步完成囉,編譯好的kernel image會放在arch/arm/boot/zImage


3. 重建boot.img

網路上有很多人寫了方便的script,主要功能就是把原本要燒到SD卡上的boot.img拆開後,再把裡面原本的kernel image掉包成我們剛剛編譯好的zImage,這方法是比較有效率的,但是我太懶所以就請Android本身的makefile幫我們做這件事情囉

$ cd android_ICS/device/ti/panda/
$ mv kernel kernel.bak
$ cp kernel_ICS/omap/arch/arm/boot/zImage ./kernel
$ make -j4

簡單來說,Panda的kernel原本是以預先編譯好的方式存放在device資料夾裡面,我們做的事情就是單純的把他的image掉包成我們編譯的image(記得備份舊的)

重新編譯以後,會把新的kernel重新包入boot.img裡面,就算大功告成了

4. 燒錄kernel

燒錄時可以完全參考前一篇的作法,但是因為連整個system都重燒,會導致第一次開機非常久,

因此建議採用以下步驟來燒錄kernel

4.1 SD卡,USB線,UART線,HDMI線,電源線全部都接好,按住GPIO按鈕再按reset按鈕,直到u-boot進入fastboot模式

4.2 由於SD卡已經format好,而且我們只需要重燒boot.img的部分

$ sudo su
$ cd android_ICS/out/host/linux/bin
$ ./fastboot flash boot
$ ./fastboot reboot

如此一來重開機速度就會非常快了,附上一張修改kernel後顯示的kernel version

No comments:

Post a Comment