注册设备
注册设备使用的结构体platform_device,该结构体在头文件 “include/linux/platform_device.h” 中,结构体成员如下:
- 在平台文件中(Linux的arm平台代码在arch/arm中)定义结构体并把结构体加入到一个platform_device类型的指针数组中,系统会自动注册这个指针数组中的所有结构体,不用去调用注册设备的函数。
- 在Kconfig文件中添加编译设备的宏定义。
- 配置menuconfig中的宏定义,生成新的.config文件并生成新的zImage。
- 注册完之后在虚拟平台总线下可以查到注册的设备:
– ls /sys/devices/platform/
注册驱动
- 驱动注册结构体platform_driver成员如下:
struct platform_driver hello_driver = {
.probe//驱动调用的初始化函数指针
.remove//移除驱动函数指针
.shutdown//驱动关闭函数指针
.suspend//驱动休眠函数指针
.resume//驱动休眠后恢复启动函数指针
.driver = {
.name//与注册设备名称一致
.owner//驱动所属模块
}
}
- 驱动注册头文件
#include <linux/platform_device.h> - 驱动注册函数
platform_driver_register (platform_driver); - 驱动卸载函数
platform_driver_unregister (platform_driver);
生成设备节点
- 头文件
#include <linux/miscdevice.h> //注册杂项设备头文件
#include <linux/fs.h> //注册设备节点的文件结构体
- 结构体
struct miscdevice { //杂项设备结构体
.minor //设备号,MISC_DYNAMIC_MINOR(自动分配)
.name //设备节点名
.fops //设备节点文件操作结构体,数据类型file_operations
}
struct file_operations { //文件操作结构体
.owner
.open //文件打开函数指针
.release //关闭文件函数指针
.unlocked_ioctl //应用向驱动传值函数指针
}
- 设备节点函数
misc_register (struct miscdevice); //设备节点生成函数
misc_deregister (struct miscdevice); //设备节点删除函数