在高通平台Android環境下編譯內核模塊【轉】


本文轉載自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei-he-mo-kuai/

高通Android環境中Linux內核會作為Android的一部分進行編譯,直接使用make即可一次性從頭編到尾。而有的平台比如Marvell,內核的編譯操作相對比較獨立,必須使用標准的內核編譯命令進行單獨編譯。一般來說,用高通的這種方式比較傻瓜化,一步到底的感覺;而用Marvell的方式用戶干預較多,靈活性也更大。當然這里不是比較他們孰優孰劣,對我來說這兩種方式各有千秋。在遇到具體問題時,有時還會覺得獨立編譯內核的方式比較方便,比如編譯內核模塊這一點上。

編譯內核模塊之前必須先編譯內核,編譯內核之前必須先指定內核配置。在獨立編譯內核情況下,編譯一遍內核后,可以直接使用 make module 來編譯內核模塊,如果修改了相應模塊文件,使用相同的命令也能很快的進行增量編譯。而在高通環境下,由於內核的編譯過程已經被集成到Android的編譯中,所以每次編譯內核或者內核模塊時,都必須通過Android的編譯環境進行啟用。雖然Android提供諸如 make bootimage 命令,可以只編譯bootimage相關內容,但是Android龐大的編譯體系在初始化時也會占用很多的時間。前段時間在調試一個獨立的內核模塊時就一直被這個問題困擾着,每次修改模塊代碼后都必須通過 make bootimage 來編譯。雖然只有一個文件,但是每次編譯都花費至少1min30sec,嚴重影響了開發進度。為此,自己參考內核模塊獨立編譯的Makefile和Android的環境特點寫了一個內核模塊編譯Makefile。

1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 
# Author: zhiqiang.xu # EMail: xeonxu@gmail.com CROSS_ARCH:=ARCH=arm CROSS_COMPILE="$(ARM_EABI_TOOLCHAIN)/arm-eabi-" KDIR:=$(ANDROID_PRODUCT_OUT)/obj/KERNEL_OBJ/ PWD:=$(shell pwd)  obj-m:= my_module.o .PHONY: modules package clean all:package modules:  @if [ "$(ANDROID_BUILD_TOP)_yes" = "_yes" ]; then echo "You have to run \". build/envsetup.sh\" to init enviroment first. \nAnd then you have to run \"choosecombo\" to setup the project."&&exit 1; fi  @if [ ! -d $(KDIR) ]; then echo "Build kernle first."&&cd $(ANDROID_BUILD_TOP)&&make bootimage&&cd -; fi  $(MAKE) $(CROSS_ARCH) -C $(KDIR) M=$(PWD) modules  package:modules  @mkdir -p ./package  @cp $(obj-m:.o=.ko) ./package  clean:  rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers package 

該Makefile默認會將當前目錄下的 my_module.c 文件編譯為內核模塊。同時,在編譯時會強制檢查Android的環境是否正確配置,如果沒有配置它會進行相應提示后退出編譯處理。編譯模塊時使用的內核配置是編譯Android時指定項目所配置的內核配置。如果內核還沒有編譯,則在編譯模塊之前會自動編譯內核主體。如果一切OK,則每次只會編譯修改過的模塊文件。編譯好后會將模塊文件單獨拷貝到當前目錄下的 package 目錄中,方便使用。

 

使用該編譯腳本后,模塊的編寫調試效率高了不少,至少每次編譯模塊都可以在5sec內搞定了。加上上機實測調試,也能在30sec內完成。生命很可貴,像我一樣當個懶人吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM