編譯 HTC Android kernel 和自製 kernel module

Kernel

這部分參考 HTC kernel source code 隨附的 Readme

首先把 compiler 抓下來

git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6

指定環境變數

export TOP= [where you installed the toolchain or top of android AOSP code base]
export PATH=$TOP/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH (use corresponding arm-eabi bin path)
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-

套用 defconfig 設定檔

make k2_u_defconfig

真正編譯,可以調整平行編譯數

make -j8

Kernel Module

kernel module 需要已經編譯好的 kernel 才能編譯。Makefile 參考這邊

obj-m 指定編譯出的 object 檔名,應該要與 .c 原始檔同名(如果要編 feng.c ,object 檔就要寫 feng.o)
KERNELDIR 是已經編譯好的 kernel 的目錄

CROSS_COMPILE 指定 toolchain 的目錄

然後 make 就可以了。

5 thoughts on “編譯 HTC Android kernel 和自製 kernel module

  1. 你好,我想請問一下指定環境變數那邊,我在/etc/profile的檔案追抓這五行,我的export top打我用git下載的aarch64(我的手機是826)資料夾,大概是這樣
    export TOP=~
    export PATH=$TOP/aarch64-linux-android-4.9/bin:$PATH
    export ARCH=arm64
    export SUBARCH=arm64
    export CROSS_COMPILE=aarch64-linux-android

    make defconfig
    make clean
    就出現Makefile:791: *** multiple target patterns. Stop.
    因為我在猜應該是我環境變數沒有輸入對,所以出錯
    想請問大大的環境變數是怎麼設定的?

    • 你給的資訊太少了,那個訊息也太 generic ,沒辦法判斷是哪裡出問題,需要給我完整的訊息(貼在 pastebin 不要貼在這邊)

      `CROSS_COMPILE` 變數是指定 cross compiler 執行檔名的前綴,以我來說,我的 `CROSS_COMPILE=arm-eabi-` 所以實際上使用的 compiler 會是 `arm-eabi-gcc` ,你的 `CROSS_COMPILE` 變數實在看起來不像前綴。另外還要你有裝 `arm-eabi-gcc` (或是你的其他 compiler)才行,而且感覺應該不可能是 aarch64-linux-android ,因為 arm 的 cross compiler 名字應該都叫 arm-eabi-gcc (這我不確定)。

      還有你根本就沒有真的 make 啊,你應該知道吧?

  2. 你好,我是照這份Readme(http://pastebin.com/GFM3AFtH)做的,我跟大大一樣方式用git把compiler抓下來,抓完我又看到家目錄底下多了一個aarch64-linux-android-4.9的資料夾,然後我用gedit /etc/profile在最底下加入Readme要求的環境變數,然後把他要我改的部分改成剛剛我提問的那樣,之後我到從htcDev下載下來的手機kernel資料夾,直接打make defconfig,在打make clean就出現那樣的結果了,終端機的結果(http://pastebin.com/sf6FG9Az)給大大看.

    • 你應該不能打 `make defconfig` ,應該是 `make a52dtul_defconfig` 才對(我不確定)。

      然後請問你知道 defconfing, make clean, arm-eabi-gcc 這些是什麼東西嗎?如果你不知道的話建議你先去查查資料。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s