1
hal程式必須要乙個hal-module-info——sym(hw_module_t)變數,有了這個才能被android系統呼叫。類似於(c函式的main()和linux驅動程式的init()函式)
2 hal程式設計是三個關鍵結構體:
struct hw_module_t; (hal模組 中)
struct hw_module_methods_t; (入口函式 小)
struct hw_device_t; (hal裝置 大)
這幾個資料結構是在android工作目錄/hardware/libhardware/include/hardware/hardware.h檔案中定義.
3 源程式
3.1 leds_hal.h
#include
#include
#include
struct led_module_t
;struct led_control_device_t
;#define led_hardware_module_id "led_hal"
3.2 leds_hal.c
#include "leds_hal.h"
int dev_file = 0;
int led_on(struct led_control_device_t *dev, int32_t led)
int led_off(struct led_control_device_t *dev, int32_t led)
int led_device_close(struct hw_device_t* device)
close(dev_file);
return 0; }
static int led_device_open(const struct hw_module_t* module, const char* name,
struct hw_device_t** device)
else
//leds_init_gpm();
return 0; }
static struct hw_module_methods_t led_module_methods = ;
struct led_module_t hal_module_info_sym =
};4 android.mk檔案與分析
第一步:
ln -s /root/drivers/ch09/leds_hal/ /working/android2.3.4_src/hardware/leds_hal
第二步 採用mm命令編譯
android.mk檔案如下:
local_path := $(call my-dir) //返回當前路徑
include $(clear_vars) //清楚...變數
local_prelink_module := false
local_module_path := $(target_out_shared_libraries)/hw
//編譯出來的.so檔案存放地方
local_shared_libraries := liblog //本次編譯要鏈結動態庫檔案liblog.so檔案
local_src_files := leds_hal.c
local_module :=led_hal.default //編譯生成led_hal.default.so
local_module_tags := eng
include $(build_shared_library) //編譯器負責
第三步:把生成的led_hal.default.so傳入開發板的/system/lib/hw中。
Android底層開發之Audio HAL
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!android底層開發之audio hal 在android音訊底層除錯 基於tinyalsa中以 拋開android的天生複雜,回歸嵌入式linux的本質 的方式介紹如何除錯linux核心中的音訊驅動。這裡向上再伸展一下進入hal層,看是如何將t...
《Android底層開發技術》學習總結
android底層開發技術實戰詳解 核心 移植和驅動 學習總結 整本書看的比較粗,了解個大概,以後需要的時候,可以針對性的學習!android與linux的關係 linux kernel的版權是gpl general public license 它要求對源 的任何修改都必須開源。android的k...
《Android底層開發技術》學習總結
android底層開發技術實戰詳解 核心 移植和驅動 學習總結 整本書看的比較粗,了解個大概,以後需要的時候,可以針對性的學習!android與linux的關係 linux kernel的版權是gpl general public license 它要求對源 的任何修改都必須開源。android的k...