第5章 最简单的LED驱动程序
这是补录的视频,它的章节序号是6A,表示看下面的第六章之前先看第6A章。后面的LED驱动程序为了容易扩展,引入了很多数据结构。对C语言的要求有点高,所以我们基于Hello驱动程序先写出最简单的LED驱动程序。
5.1 LED操作方法_基于IMX6ULL
视频中的文档,放在GIT仓库中:
01_all_series_quickstart\
05_嵌入式Linux驱动开发基础知识\
doc_pic\pic\6A.最简单的LED驱动程序\03_IMX6ULL的LED操作方法.pptx
5.2 最简单的LED驱动程序编程_基于IMX6ULL
视频中的源码文档,放在GIT仓库中:
01_all_series_quickstart\
05_嵌入式Linux驱动开发基础知识\source\02_led_drv\00_led_simple\imx6ull
5.2.1 字符设备驱动程序框架
字符设备驱动程序的框架:

图 5.1 字符设备驱动框架
编写驱动程序的套路:
- 确定主设备号,也可以让内核分配
- 定义自己的file_operations结构体
- 实现对应的drv_open/drv_read/drv_write等函数,填入file_operations结构体
- 把file_operations结构体告诉内核:register_chrdev
- 谁来注册驱动程序啊?得有一个入口函数:安装驱动程序时,就会去调用这个入口函数
- 有入口函数就应该有出口函数:卸载驱动程序时,出口函数调用unregister_chrdev
- 其他完善:提供设备信息,自动创建设备节点:class_create, device_create
- 驱动怎么操作硬件?
- 通过ioremap映射寄存器的物理地址得到虚拟地址,读写虚拟地址。
- 驱动怎么和APP传输数据?
- 通过copy_to_user、copy_from_user这2个函数。
5.2.2 实现什么功能
先编写驱动程序:
- 实现led_open函数,在里面初始化LED引脚。
- 实现led_write函数,在里面根据APP传来的值控制LED。
- 再编写测试程序。