嵌入式驱动视频2019.03.24

时间:2023-01-17 20:25:15

愿自己每天都有更新。

字符设备驱动程序之概念介绍

u-boot:启动内核

内核:启动应用

 

应用层,调用c库,产生中断

系统调用接口,接收中断,调用不同处理函数。

VFS,虚拟文件系统。

 

驱动程序框架,就是把应用程序中的open,read和write对应

驱动中的open,read和write

【我有个疑惑,为什么不把open去掉。只用读写不就行了吗???】

 

写驱动的路程

1.写出open、read、write等功能函数

2.告诉内核我已写出:定义file_operations结构体,然后填充它。

3.把file_operations告诉内核,register_chrdev,即注册函数。注册驱动程序。

4.驱动的入口函数。 first_drv_init(),,还可以有好几个。它调用了register_chrdev

5.修饰入口函数,用宏实现。module_init(first_drv_init),实际上是个函数指针。

【其实感觉过程有点复杂,还不如,直接指到函数???】

 

主设备号,次设备号。(注册的时候有主设备号。)

根据设备类型,和主设备号来找到驱动程序。

内核数组中chrdev,根据设备类型和主设备号major,找到file_operation。这是通过register_chrdev注册到数组中的。

有注册就有卸载。

 

有入口函数,就有出口函数

first_drv_exit

unregister_chrdev

需要修饰,用宏定义结构体,有指针指向first_drv_exit。

 

除此之外还要创建设备节点。

 

之后程序的改进,led点灯,,

【这里我想到可以把灯的函数,也就是板子上的操作写到一个地方。】

单片机是操作物理地址,但这里是操作虚拟地址。

ioremap进行映射到虚拟地址。

【还有一点,为什么要使用虚拟地址呢???】

《字符设备驱动之LED驱动程序_操作LED》

次设备号是自己规定怎么用的。

比如用次设备号,点亮不同的灯。

 

自动创建设备点。