register_chrdev()与unregister_chrdev()
来源:互联网 发布:python ascii转字符 编辑:程序博客网 时间:2024/05/22 04:53
Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序看来,硬件设备只 是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。
Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则以整个数据缓冲区的形式进行。字符设备的驱动相对比较简单。
下面我们来假设一个非常简单的虚拟字符设备:这个设备中只有一个4个字节的全局变量int global_var,而这个设备的名字叫做"gobalvar"。对"gobalvar"设备的读写等操作即是对其中全局变量global_var的操作。
驱动程序是内核的一部分,因此我们需要给其添加模块初始化函数,该函数用来完成对所控设备的初始化工作,并调用register_chrdev() 函数注册字符设备:
static int __init gobalvar_init(void)
{
if (register_chrdev(MAJOR_NUM, " gobalvar ", &gobalvar_fops))
{
//…注册失败
}
else
{
//…注册成功
}
}
其中,register_chrdev函数中的参数MAJOR_NUM为主设备号,"gobalvar"为设备名,gobalvar_fops为包含基 本函数入口点的结构体,类型为file_operations。当gobalvar模块被加载时,gobalvar_init被执行,它将调用内核函数 register_chrdev,把驱动程序的基本入口点指针存放在内核的字符设备地址表中,在用户进程对该设备执行系统调用时提供入口地址。
与模块初始化函数对应的就是模块卸载函数,需要调用register_chrdev()的"反函数" unregister_chrdev():
static void __exit gobalvar_exit(void)
{
if (unregister_chrdev(MAJOR_NUM, " gobalvar "))
{
//…卸载失败
}
else
{
//…卸载成功
}
}
随着内核不断增加新的功能,file_operations结构体已逐渐变得越来越大,但是大多数的驱动程序只是利用了其中的一部分。对于字符设备来 说,要提供的主要入口有:open ()、release ()、read ()、write ()、ioctl ()、llseek()、poll()等
Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则以整个数据缓冲区的形式进行。字符设备的驱动相对比较简单。
下面我们来假设一个非常简单的虚拟字符设备:这个设备中只有一个4个字节的全局变量int global_var,而这个设备的名字叫做"gobalvar"。对"gobalvar"设备的读写等操作即是对其中全局变量global_var的操作。
驱动程序是内核的一部分,因此我们需要给其添加模块初始化函数,该函数用来完成对所控设备的初始化工作,并调用register_chrdev() 函数注册字符设备:
static int __init gobalvar_init(void)
{
if (register_chrdev(MAJOR_NUM, " gobalvar ", &gobalvar_fops))
{
//…注册失败
}
else
{
//…注册成功
}
}
其中,register_chrdev函数中的参数MAJOR_NUM为主设备号,"gobalvar"为设备名,gobalvar_fops为包含基 本函数入口点的结构体,类型为file_operations。当gobalvar模块被加载时,gobalvar_init被执行,它将调用内核函数 register_chrdev,把驱动程序的基本入口点指针存放在内核的字符设备地址表中,在用户进程对该设备执行系统调用时提供入口地址。
与模块初始化函数对应的就是模块卸载函数,需要调用register_chrdev()的"反函数" unregister_chrdev():
static void __exit gobalvar_exit(void)
{
if (unregister_chrdev(MAJOR_NUM, " gobalvar "))
{
//…卸载失败
}
else
{
//…卸载成功
}
}
随着内核不断增加新的功能,file_operations结构体已逐渐变得越来越大,但是大多数的驱动程序只是利用了其中的一部分。对于字符设备来 说,要提供的主要入口有:open ()、release ()、read ()、write ()、ioctl ()、llseek()、poll()等
0 0
- register_chrdev()与unregister_chrdev()
- register_chrdev()与unregister_chrdev()
- register_chrdev()与unregister_chrdev()
- register_chrdev()与unregister_chrdev()
- register_chrdev & unregister_chrdev
- register_chrdev & unregister_chrdev
- Linux字符设备驱动的register_chrdev()与unregister_chrdev()
- Linux字符设备驱动的register_chrdev()与unregister_chrdev()
- Linux字符设备驱动的register_chrdev()与unregister_chrdev()
- register_chrdev()与register_chrdev_region()
- register_chrdev()与register_chrdev_region()
- register_chrdev()与register_chrdev_region()
- register_chrdev()与register_chrdev_region()
- register_chrdev()与register_chrdev_region()
- register_chrdev
- 关于unregister_chrdev
- register_chrdev_region与register_chrdev和alloc_chrdev_region区别
- register_chrdev,class_create()
- 降低UIViewController切换的耦合
- 查找占用磁盘最多的10个文件夹
- PostMessage与PostThreadMessage的区别
- win7下显示系统的后缀名
- ios--UIActionSheet的使用
- register_chrdev()与unregister_chrdev()
- 页面中文字不被选中
- 单例模式
- 线程间如何进行消息传递
- Qt 中使用全局变量
- 使用oracle 的 PL/Sql 定时执行一个存储过程
- 【JMLR’03】Latent Dirichlet Allocation (LDA)- David M.Blei
- 简化delegate写法
- CentOS 6.3设置静态IP教程