字符设备的注册与注销实现
2023-12-20 20:20:43
一. 简介
前面文章学习了 编写字符设备驱动框架,并加载驱动模块。了解了 一组注册与注销设备的函数。
了解了字符设备号的组成以及如何分配。文章地址如下:
本文在之前 1_chrdevbase工程代码的基础上,来学习如何注册与注销字符设备。
二.? 字符设备的注册与注销实现
1.? 注册函数与注销函数
对于字符设备驱动而言,当驱动模块加载成功以后需要注册字符设备,同样,卸载驱动模块的时候也需要注销掉字符设备。
字符设备的注册和注销函数原型如下所示
:
static inline int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)
static inline void unregister_chrdev(unsigned int major, const char *name)
函数参数这里不做介绍,之前已经做过介绍。
2.? 选定设备号与设备名
(1)选定设备号
这里使用静态分配的方式,实现字符设备的注册与注销,也就是我自己给设备设置一个设备号。
静态分配设备号需要我们检查当前系统中所有被使用了的设备号,然后挑选一个目前开发板上系统中没有使用的设备号。
所以,这里需要查看开发板上所有设备已经使用过设备号。开发板上电后进入根文件系统,查看系统上所以已使用的设备号:
/ # cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
5 /dev/tty
5 /dev/console
5 /dev/ptmx
7 vcs
10 misc
13 input
29 fb
81 video4linux
89 i2c
90 mtd
116 alsa
128 ptm
136 pts
180 usb
189 usb_device
207 ttymxc
226 drm
250 ttyLP
251 watchdog
252 ptp
253 pps
254 rtc
以上列出了开发板系统中已使用的所有设备号。
可以看出,使用 "cat /proc/devices" 命令可以查看系统上所以已使用的设备。上面信息可以看到字符设备已经列出,第一列数字表示主设备号。
除了上面字符设备的设备号,可以选择任何一个设备号作为这里设备的主设备号。例如,可以设置主设备号为 200,可以在 chrdevbase.c文件中设置 一个宏表示主设备号。
(2) 设置设备名
注册设备需要设置一个设备名,所设置的设备名不要与开发板系统上现有设备名重复。例如,可以设置设备名为 chrdevbase。可以在 chrdevbase.c 文件中设置 一个宏表示设备名。
(3) 定义 struct file_operations结构体
结构体 file_operations 类型指针,指向设备的操作函数集合变量。
字符设备驱动的编写,主要就是驱动对应的open、close、read等功能的实现,当应用程序调用 open,read,write,或 close函数时,对应的就是 这里结构体 file_operations对应的函数成员变量里面。
文章来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/135111708
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!