22.从框架看HAL和Linux驱动开发

Android HAL(Hardware Abstract Layer,硬件抽象层)Linux驱动开发是Android系统开发中的重要部分。 ### Android HAL Android HAL的引入主要是为了保护硬件厂商的利益。由于Linux Kernel需要遵循GPL开源协议,而设备驱动程序包含硬件的重要参数,驱动开源会使硬件厂商蒙受损失。Google在Android系统中加入了HAL层,该层不必遵循GPL协议,代码可以封闭。如果硬件驱动愿意开源,可写在Kernel里供Framework直接调用;若不愿意开源,则写在HAL层实现闭源[^1]。 HIDL(HAL Interface Definition Language)的目标是无需重新构建HAL即可替换Android框架HAL由供应商或SOC制造商构建,并放在设备的/vendor分区中,使得Android框架在其自己的分区中无需重新编译HAL就能通过OTA进行替换[^2]。 ### Linux驱动开发Linux Kernel层框架提供了多个结构体,如module、file、file_operations、cdev等,可以对这些结构体进行扩展或直接使用,这部分被称为Linux Kernel Stub。编写此部分代码的步骤如下: 1. 创建myFile实例。 2. 设定file_operations指针给myFile。 3. 编写file_operations函数表中函数的实现代码,即开源部分代码。 4. 创建myDeviceModule装配cdev与myFile[^3]。 在开发过程中,在刷机前可以重新构建AOSP,同时不要忘记替换Linux内核文件'Image.gz - dtb'[^4]。 ```python # 这里只是一个示意,并非实际的Android HALLinux驱动开发代码 # 假设这是一个简单的函数表示创建myFile实例 def create_myFile(): myFile = {} return myFile # 设定file_operations指针给myFile def set_file_operations(myFile, file_operations): myFile['file_operations'] = file_operations return myFile # 示例file_operations函数表 file_operations = { 'read': lambda: print('Reading...'), 'write': lambda: print('Writing...') } myFile = create_myFile() myFile = set_file_operations(myFile, file_operations) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021、小林子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值