modkoid工程提供了一個LedTest示例程序,是臺灣的Jollen用於培訓的。android
對於理解android層次結構、Hal編程方法都很是有意義。編程
下載方法:#svn checkout http://mokoid.googlecode.com/svn/trunk/mokoid-read-onlyapp
在android源碼中單獨編譯modkoid工程時報錯,具體操做以下:svn
將modkoid工程拷貝到android源碼的根目錄下,而後進入到android源碼的根目錄下,執行以下命令:ui
$ source mydroid/build/envsetup.shgoogle
$mmm mydroid/modkoiddebug
錯誤日誌以下:日誌
make:進入目錄'/mnt/bak/mydroid'code
build/core/base_rules.mk:78: *** Module name: led.goldfishcomponent
build/core/base_rules.mk:79: *** Makefile location: mokoid/hardware/modules/led
build/core/base_rules.mk:80: *
build/core/base_rules.mk:81: * Each module must use a LOCAL_MODULE_TAGS in its
build/core/base_rules.mk:82: * Android.mk. Possible tags declared by a module:
build/core/base_rules.mk:83: *
build/core/base_rules.mk:84: * optional, debug, eng, tests, samples
build/core/base_rules.mk:85: *
build/core/base_rules.mk:86: * If the module is expected to be in all builds
build/core/base_rules.mk:87: * of a product, then it should use the
build/core/base_rules.mk:88: * "optional" tag:
build/core/base_rules.mk:89: *
build/core/base_rules.mk:90: * Add "LOCAL_MODULE_TAGS := optional" in the
build/core/base_rules.mk:91: * Android.mk for the affected module, and add
build/core/base_rules.mk:92: * the LOCAL_MODULE value for that component
build/core/base_rules.mk:93: * into the PRODUCT_PACKAGES section of product
build/core/base_rules.mk:94: * makefile(s) where it's necessary, if
build/core/base_rules.mk:95: * appropriate.
build/core/base_rules.mk:96: *
build/core/base_rules.mk:97: * If the component should be in EVERY build of ALL
build/core/base_rules.mk:98: * products, then add its LOCAL_MODULE value to the
build/core/base_rules.mk:99: * PRODUCT_PACKAGES section of
build/core/base_rules.mk:100: * build/target/product/core.mk
build/core/base_rules.mk:101: *
build/core/base_rules.mk:102: *** user tag detected on new module - user tags are only supported on legacy modules。 中止。
make:離開目錄「/mnt/bak/mydroid」
經過此次編譯,總結了一點經驗,要學會看日誌。
日誌明白的告訴了錯誤所在: Makefile location: mokoid/hardware/modules/led
查找緣由 ,是由於led文件下的Android.mk文件裏面,LOCAL_MODULE_TAGS變量設置的有問題。
LOCAL_MODULE_TAGS定義了當前模塊的類型,編譯器在編譯時會根據類型的不一樣會有些差異,LOCAL_MODULE_TAGS能夠被定義爲如下類型:
user: 指該模塊只在user版本下才編譯
eng: 指該模塊只在eng版本下才編譯
tests: 指該模塊只在tests版本下才編譯
optional:指該模塊在全部版本下都編譯
若是設置不正確,tags的module不會被編譯至系統中。
將工程下的全部Android.mk的LOCAL_MODULE_TAG設置爲:
LOCAL_MODULE_TAGS :=optional
這樣設置好之後,從新編譯,編譯經過。
編譯成功後會以下路徑生成apk文件,庫文件,jar包等
out/target/product/smdkv210/system/app/LedClient.apk
out/target/product/smdkv210/system/app/LedTest.apk
out/target/product/smdkv210/system/framework/ledctl.jar
out/target/product/smdkv210/system/lib/hw/led.smdkv210.so
out/target/product/smdkv210/system/lib/libled.so
out/target/product/smdkv210/system/lib/libmokoid_runtime.so
本文歡迎轉載,轉載請註明出處與做者
出處:http://blog.sina.com.cn/staratsky
做者:流星