Linux字符设备驱动组成-加载,卸载day01

本文介绍了Linux设备驱动的基本原理,强调字符设备驱动的加载和卸载过程,包括设备号申请、cdev注册与释放、注销。通过理解设备驱动如何作为内核与硬件间的接口,以及在用户进程调用时涉及的file_operations结构体,为后续学习字符设备驱动的其他部分奠定基础。
摘要由CSDN通过智能技术生成

作者: kiki
参考资料:<linux设备驱动开发详解-宋宝华>
http://ask.wosoni.com/q/6167521.html
转载请注明出处!

day01
摘要: linux设备驱动原理, 字符设备加载卸载函数

最近在学习linux设备驱动相关的知识.
为了能够系统的学习,把知识点总结一下,方便以后复习查证.

1.原理:
系统调用是操作系统内核和应用程序之间的接口
设备驱动程序是操作系统内核和机器硬件之间的接口
设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:
(1)对设备初始化和释放;

(2)把数据从内核传送到硬件和从硬件读取数据;

(3)读取应用程序传送给设备文件的数据和回送应用程序请求的数据;

(4)检测和处理设备出现的错误。
  在Linux操作系统下有三类主要的设备文件类型,一是字符设备,二是块设备,三是网络设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。
  
注意:在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度.
Linux系统下一切皆文件,驱动程序的调用无非是一些系统调用,这里就用到一个很重要的结构体:file_operations.下文详细说明.
以下知识点侧重字符设备驱动.

2.Linux字符设备驱动的组成
(1)加载,卸载
加载函数: 设备号申请, cdev注册
卸载函数: 设备号释放, cdev注销
模板:

/*设备结构体*/
struct xxx_dev_t{
struct cdev cdev;
...
}xxx_dev;
/*模块加载函数*/
static int __init xxx_init(void)
{
...
  cdev_init(&xxx_dev.cdev,&xxx_fops);  /*初始化*/
  xxx_dev.cdev.owner = THIS_MODULE;
/*获取字符设备号*/
  if (xxx_major){
	register_chrdev_region(xxx_dev_no,1,DEV_NAME);
  }else{
	alloc_chrdev_region(&xxx_dev_no,0,1,DEV_NAME);
  }
    ret = cdev_add(&xxx_dev.cdev,xxx_dev_no,1);   /*注册设备号*/
  }
/*模块卸载函数*/
static void__exit xxx_exit(void)
{
	unregister_chrdev_region(xxx_dev_no,1); /*释放占用的设备号*/
	cdev_del(&xxx_dev.cdev); /*注销设备*/
	...
}

day02介绍file_operations结构体

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值