字符设备注册函数与注销函数

一.  简介

前面文章学习了 编写字符设备驱动框架,并加载驱动模块。地址如下:

字符设备驱动框架的编写-CSDN博客

字符设备驱动模块的编译-CSDN博客

字符设备驱动的加载与卸载前工作-CSDN博客

字符设备驱动的加载与卸载-CSDN博客

本文继之前的学习。本文在此基础上,添加字符设备注册与注销。

二.  字符设备注册与注销

1.    字符设备注册与注销函数

对于字符设备驱动而言,当驱动模块加载成功以后需要注册字符设备,同样,卸载驱动模块的时候,也需要注销掉字符设备。

注册字符设备函数

注册字符设备函数与注销字符设备函数是 Linux内核提供的。字符设备的注册如下所示:

static inline int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)

可以在 Linux 内核源码中,搜索 这两个的基本用法。因为Linux内核源码涉及驱动的地方会调用到这两个函数。打开NXP官方提供的 Linux内核源码,搜索 有调用 register_chrdev()函数的代码。

major 主设备号, Linux 下每个设备都有一个设备号,设备号分为主设备号和次设备号两部分。
name :设备名字,指向一串字符串。
fops 结构体 file_operations 类型指针,指向设备的操作函数集合变量。

注销字符设备函数

当我们卸载驱动时,需要注销掉前面注册的字符设备,使用 unregister_chrdev()函数。注销函数原型如下:

static inline void unregister_chrdev(unsigned int major, const char *name)
major 要注销的设备对应的主设备号。
name 要注销的设备对应的设备名。

register_chrdev()函数与 unregister_chrdev()函数的缺点:两个函数都只输入了主设备号,没有传入次设备号。这样会导致会将主设备号下面的所有次设备号也使用了。

所以,现在编写字符设备驱动时,可能不使用 这两个函数,而是使用其他注册与注销字符设备驱动的函数。

注意:其实另外还有其他的注册或注销字符设备的函数,可以输入主设备号+次设备号,甚至有向Linux内核申请设备号的函数,这里开始只是学习 register_chrdev() 函数与 unregister_chrdev()函数来注册与注销字符设备。

你可能感兴趣的:(Linux驱动学习,linux,arm开发)