第九章
HAL(硬件抽象层)是建立在Linux驱动上的一套程序库,这套程序并不属于Linux内核,而是属于Linux内核之上的应用层。HAL的作用除了尽量避免应用程序直接访问Linux驱动之外,还有就是保护“私人财产”。
编写一款支持HAL的linux驱动程序:1、在为linux驱动添加HAL,要想尽量保护敏感数据。Linux驱动的代码就要尽量简洁,尽可能将业务逻辑放到HAL library中。2、HA类就是普通的linux Library文件 ,但这类库文件有一个接口。通过HAL_MODULE_INFO_SYM变量实现。3、service Library也是Linux Library,也就是说service Library就是JNI Library,service manager会调用service library,而APK程序会调用servicemanager类来访问service library。编写调用LED驱动的HAL模块,在这个HAL模块中包含了LED驱动的所有业务逻辑,实际上HAl模块也是普通的linux共享库(.so文件),可以被android系统自动装载,任何被系统自动调用的程序都会有一个接口,而所有的HAL程序都必须有一个HAL_MODULE_INFO_SYM变量。具体编写HAL模块的步骤:1、定义两个新的结构体,这两个结构体的第一个变量的数据类型必须是hw_module_t和hw_device_t。还要为HAL模块定一个ID,这步等于是编写leds_hal.h头文件的代码。2、编写HAL模块的open函数,open函数是HAL模块的入口点,该函数的作用:初始化hw_device_t的字结构体;打开设备文件;初始化寄存器。3、定义hw_module_methods_t结构体变量。4、定义HAL_MODULE_INFO_SYM变量。5、编写HAL模块的close函数。6、编写控制LED的函数。最后测试led驱动。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)