1. 程式人生 > >mt核心編譯,配置,執行的不成功經歷之一

mt核心編譯,配置,執行的不成功經歷之一

MTK核心原始碼包中都帶與kernel同層的mediatek目錄,這裡就是MTK的主要目錄了。但kernel也有對MTK目錄的呼叫,並且多數呼叫沒用加配置定義。

首先嚐試的是mt6732,下的是https://github.com/profglavcho/device_elephone_p6000.git的原始碼。編譯是通過了,但沒有這個型號的手機,改到TCL-p500m上做嘗試,直接重啟了。

MKT在編譯linux 核心,android原始碼時,全部的臨時檔案,在外部輸出目錄out中,其中out/target/product/{pojectname}/obj/KERNEL-OBJ/為核心的臨時目錄。核心的配置檔案.config也在這裡。

.config是生成程式碼生成的。perl程式碼與核心原有命令自動互動的結果。perl程式碼的依據就是mediatek/config/{platform SOC name}/autoconfig/kconfig/platform .改動這個檔案就直接影響核心的配置。但只改這裡,用makeMtk編譯時會報錯。

再需要改的地方:mediatek/config/{project name}/ProjectConfig.mk 這裡配的是一些android 最後生成的feature.因為MTK用的是一種使用者空間驅動的方法,所以這裡也要改才能與核心程式碼,在配置上對應上。具體的對應關係是一個煩心的事。這兩個地方刪去了MKT_FM_XX這個對收意機功能定義的程式碼。對不報錯的編譯通過,算是精簡了程式碼。

export PATH=/media/ququ/android/other-android/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin:$PATH
export CROSS_COMPILE=arm-linux-androideabi-

chmod 755 makeMtk
chmod 755 mk
cd kernel
chmod 755 build.sh
cd mediatek/dct
chmod 755 DrvGen

./makeMtk k01q_e new k

cd kernel
TARGET_PRODUCT=k01q_e make menuconfig
TARGET_PRODUCT=k01q_e make mrproper
TARGET_PRODUCT=k01q_e make oldconfig

./mk mrproper kernel
./makeMtk k01q_e r k

 

結論:經過多天的配置修改發現,如果不是手機配的原始碼的話,自改工作量比高通的大的多。因為MTK的硬體配置是在編譯時用配置檔案給出的,一但與實際硬體不要相符,就可通引起手機重啟。而MSM的核心在載入外設驗動時,會驗證一下,如果與核心的資料不一樣就不載入了,有些還會驗證一下硬體的實際資訊。MTK這方面可能為了加快啟動速度,做成硬配置了 ,在編譯時就配定了,如果不對,很有可有是核心重啟。如果有UART介面的話,還能看看輸出的資訊,沒有的話,這個啟動時期時沒有ADB介面的,所以對一個成器的,沒有串列埠接出的手機來說,做這個除錯,相當難。只能靠猜。或者深度修改原始碼,先去全部外設驅動,加一個個除錯加入。