一、代碼講解
1、 編寫HAL層代碼
一般來說HAL moudle需要涉及的是三個關鍵結構體:
struct hw_module_t;
struct hw_module_methods_t;
struct hw_device_t;
下面結合代碼說明這3個結構的用法
檔案:/hardware/modules/include/weiyan/led.h
檔案:led.c
2.JNI層檔案:/frameworks/base/service/com_mokoid_server_LedService.cpp
3.Framework層的service,檔案:/frameworks/base/service/java/com/weiyan/server
4.APP 測試程式 (屬於APP層)
APP層兩種調用模式
(1)Android的app可以直接通過service調用.so格式的jni
(2)經過Manager調用service
Manager (屬於Framework層)
因為LedService和LedManager在不同的進程,所以要考慮到進程通訊的問題。Manager通過增加一個aidl檔案來描述通訊介面
檔案:weiyan/frameworks/base/core/java/weiyan/hardware/ILedService.aidl
package mokoid.hardware;
interface ILedService
{
boolean setOn(int led);
boolean setOff(int led);
}
系統的aidl工具會將ILedService.aidl產生ILedService.java檔案,實現IledService
SystemServer (屬於APP層)檔案:
/apps/LedTest/src/com/weiyan/LedTest/LedSystemServer.java
二、APP 測試程式
檔案:weiyan/apps/LedTest/src/com/weiyan/LedTest/LedTest.java
載入方法
1、把光碟片提供的weiyan.tar.gz解壓到/opt/ android_froyo_smdk
$ cd /opt/ android_froyo_smdk
$ tar -jxvf weiyan.tar.bz2
2、修改build/core/config.mk檔案防止編譯找不到led.h標頭檔
$cd /opt/ android_fsroyo_smdk
$gedit build/core/config.mk
找到SRC_HEADERS := \
$(TOPDIR)system/core/include \
在後面加入
$(TOPDIR)weiyan/hardware/modules/include
3、編譯工程
$ source /opt/android_froyo_smdk/build/envsetup.sh
$ export TARGET_PRODUCT=sec_smdkv210
$mmm /opt/android_froyo_smdk/weiyan
編譯成功後會如下路徑產生apk檔案,庫檔案,jar包等
/opt/android_froyo_smdk/out/target/product/smdkv210/system/app/LedClient.apk
/opt/android_froyo_smdk/out/target/product/smdkv210/system/app/LedTest.apk
/opt/android_froyo_smdk/out/target/product/smdkv210/system/framework/ledctl.jar
/opt/android_froyo_smdk/out/target/product/smdkv210/system/lib/hw/led.smdkv210.so
/opt/android_froyo_smdk/out/target/product/smdkv210/system/lib/libled.so
/opt/android_froyo_smdk/out/target/product/smdkv210/system/lib/libmokoid_runtime.so
把LedClient.apk, LedTest.apk放到android的system/app目錄,把ledctl.jar放到system/framework目錄,把led.smdkv210.so放到system/lib/hw目錄,把ibled.so,
libmokoid_runtime.so放到system/lib目錄下
4、為了android案頭能顯示我們的LedClient.apk, LedTest.apk程式,把weiyan/frameworks/base/service/com.weiyan.server.xml放到android的
system/etc/permissions目錄下
5、載入led驅動模組
把leds.ko複製到android 的system目錄下,執行
#insmod leds.ko
#chmod 666 /dev/leds
6、運行LedClient.apk, LedTest.apk