编写Linux驱动程序的步骤:

第1步:建立Linux驱动骨架(装载和卸载Linux驱动)

任何类型的程序都有一个基本的结构,例如,C语言需要有一个入口函数main。Linux驱动程序也不例外。Linux内核在使用驱动时首先需要装载驱 动。 在装载过程中需要进行一些初始化工作,例如,建立设备文件,分配内存地址空间等。当Linux系统退出时需要卸载Linux驱动,在卸载的过程中需要释放 由Linux驱动占用的资源,例如,删除设备文件、释放内存地址空间等。在Linux驱动程序中需要提供两个函数来分别处理驱动初始化和退出的工作。这两 个函数分别用module_init和module_exit宏指定。Linux驱动程序一般都都需要指定这两个函数,因此包含这两个函数以及指定这两个 函数的两个宏的C程序文件也可看作是Linux驱动的骨架。

第2步:注册和注销设备文件

任何一个Linux驱动都需要有一个设备文件。否则应用程序将无法与驱动程序交互。建立设备文件的工作一般在第1步编写的处理Linux初始化工作的函数 中 完成。删除设备文件一般在第1步编写的处理Linux退出工作的函数中完成。可以分别使用misc_register和misc_deregister函 数创建和移除设备文件。

第3步:指定与驱动相关的信息

驱动程序是自描述的。例 如,可以通过modinfo命令获取驱动程序的作者姓名、使用的开源协议、别名、驱动描述等信息。这些信息都需要在驱动源代码中指定。通过 MODULE_AUTHOR、MODULE_LICENSE 、MODULE_ALIAS 、MODULE_DESCRIPTION等宏可以指定与驱动相关的信息。

第4步:指定回调函数

Linux 驱动包含了多种动作,也可称为事件。例如,向设备文件写入数据时会触发“写”事件,Linux系统会调用对应驱动程序的write回调函数,从设备文件读 数据时会触发“读”事件,Linux系统会调用对应驱动程序的read回调函数。一个驱动程序并不一定要指定所有的回调函数。回调函数会通过相关机制进行 注册。例如,与设备文件相关的回调函数会通过misc_register函数进行注册。

第5步:编写业务逻辑

这 一步是Linux驱动的核心部分。光有骨架和回调函数的Linux驱动是没有任何意义的。任何一个完整的Linux驱动都会做一些与其功能相关的工作,如 打印机驱动会向打印机发送打印指令。COM驱动会根据传输数率进行数据交互。具体的业务逻辑与驱动的功能有关。业务逻辑可能有多个函数、多个文件甚至是多 个Linux驱动模块组成。具体的实现读者可以根据实际情况而定。

第6步:编写Makefile文件

Linux内核源代码的编译规则是通过Makefile文件定义的。因此编写一个新的Linux驱动程序必须要有一个Makefile文件。

第7步:编译Linux驱动程序

Linux驱动程序可以直接编译进内核,也可以作为模块单独编译。

第8步:安装和卸载Linux驱动

如果将Linux驱动编译进内核,只要Linux使用该内核,驱动程序就会自动装载。如果Linux驱动程序以模块单独存在,需要使用insmod或modprobe命令装载Linux驱动模块,使用rmmod命令卸载Linux驱动模块。

上面8步中的前5步是关于如何编写Linux驱动程序的,通过后3步可以使Linux驱动正常工作。

http://www.cnblogs.com/z378560707/

转载于:https://www.cnblogs.com/z378560707/p/5517076.html

《Android深度探索》(卷1)HAL与驱动开发 第六章心得体会相关推荐

  1. Android深度探索(卷1)HAL与驱动开发第六章总结

    操作系统是通过各种驱动程序赖家与硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式.设备驱动程序是操作系统最基本的组成部分之一,在Linux内核源程序中也 ...

  2. Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记

    Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记     本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.A ...

  3. Android深度探索(卷1)HAL与驱动开发第五章总结

    开发板是开发和学习嵌入式技术的主要硬件设备,开发板的型号和种类很多,目前流行的是基于S3C6410 ARM11架构的开发板,S3C6410是由三星公司推出的一款低功耗,高性价比的RISC处理器,它基于 ...

  4. ANDROID深度探索(卷1)HAL与驱动开发 第四章

    配置android源代码下载环境 (1)创建一个用于存放下载脚本文件(repo)的目录(可将该脚本文件一放到任何目录中,在这里使用~/bin).#mkdir ~/bin    #PATH=~/bin: ...

  5. Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术

    Android深度探索(卷1)HAL与驱动开发 心得体会 第十章  嵌入式Linux的调用技术 对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点,逐步跟踪代码. ...

  6. Android深度探索(卷1)HAL与驱动开发学习笔记(8)

    Android深度探索(卷1)HAL与驱动开发学习笔记(8) 第八章 蜂鸣器驱动   L i n u x驱动的代码重用有很多种方法.可以采用标准C程序的方式.将要重用的代码放在其他的文件(在头文件中声 ...

  7. Android深度探索(卷1)HAL与驱动开发--读书笔记(第一章)

    Android系统架构是由四层构成,第一层为Linux内核,主要包括Linux驱动程序以及内存管理.进程管理.电源管理的等程序.并且不同的Android的版本的驱动可能并不通用.第二层为C/C++代码 ...

  8. Android深度探索(卷1)HAL与驱动开发读后感---第四章

    第4章  源代码的下载和编译 4.1  下载.编译和测试Android源代码     主要学习了:配置源代码的下载环境,Android源代码目录结构解析,下载Android源代码中的一部分,编译And ...

  9. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

最新文章

  1. 2022-2028年中国复膜胶行业发展现状调查及市场前景趋势报告
  2. 激光雷达与摄影测量相结合如何提高点云质量?
  3. Hadoop streaming 排序、分桶参数设置
  4. C++类型转换(翻译自cplusplus)
  5. ReSharper 配置及用法(转)
  6. springcloud微服务总结四 负载均衡
  7. python list转换成array_一文掌握Python【不定期更新】
  8. sklearn的train_test_split
  9. java发送QQ群邮件,简单两步使用node发送qq邮件
  10. 组复制官方翻译六、Upgrading Group Replication
  11. xhtml html
  12. Springboot+idea的一个bug(Unregistering JMX-exposed beans on shutdown)
  13. Mysql数据类型TINYINT(1)与BOOLEAN踩坑记
  14. 二十六岁,博士考入团中央选调生,前途如何?
  15. WINDOWS上传文件到LINUX中文乱码
  16. 开发工程师需要知道的网站
  17. checkbox选中与取消选择
  18. row_number() over 相同日期不同序号_怡丽丝尔护肤品生产日期怎么看?怡丽丝尔护肤品保质期多久?...
  19. 国内OA办公自动化系统现状
  20. 计算机文件及文件夹管理实验报告,计算机实验报告

热门文章

  1. 清华大学成立听觉智能研究中心,要解决可解释和鲁棒性问题
  2. 1000米感知能力?!图森无人车说这是他们的最新突破
  3. AI与中国未来就业白皮书发布:70%职业受冲击,江浙机器换人大潮汹涌
  4. 当,程序员突然想画画,AI+机器人就该登场了
  5. 这些互联网巨头,明年可能会纷纷杀入AI芯片战局
  6. HTTP请求解析过程 (简单概括)
  7. 根据Dockerfile构建镜像
  8. 洛谷——P1100 高低位交换
  9. hive SQL Standard Based Hive Authorization 权限自定义(二)
  10. ANT安装与测试和简明教程