Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67156
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 213
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-24 12:38
个人简介

专注的力量很大,它能把一个人的潜力发挥到极致,一旦达到那种状态你就没有了自我的概念,所有的精力集中到了一点。

文章分类
文章存档

2015年(11)

2014年(6)

我的朋友

分类: 嵌入式

2014-12-26 22:28:29

Linux内核设备驱动分类:
1.字符设备: 串口,LED,按键,蜂鸣器,声卡,显卡...(按字节传输)    有顺序的访问。
2.块设备:     Nand Flash,硬盘,U盘,TF卡,光盘...(512字节)            可以随机访问。
3.网络设备: 网卡,配合网络协议盏来使用。

在Linux系统中,所有的硬件设备在用户空间以设备文件的形式存在。
/dev目录下可以查看到很多的设备文件!
我们平常访问设备,就是通过设备文件来实现的。同时配合系统调用函数(open,close,read,write...)

那么我们应该如何去创建设备文件呢?
1.创建字符设备文件:
maknod /dev/设备文件名 c 主设备号 次设备号
2.创建块设备文件:
maknod /dev/设备文件名 b 主设备号 次设备号
两者最大的区别就是c和b,哈哈。

在Linux中,所有的资源都是用文件的形式存在的!包括设备驱动!
设备驱动存放的目录:/dev
在应用程序或者测试程序中可以用open函数去打开它。
int fd = open("/dev/myled", O_RDWR);

上面所说到的主设备号和次设备号又是什么东西呢?
主设备号:应用程序就是根据主设备号来寻找自己对应的字符设备驱动的。
次设备号:当主设备号管理的设备相同的时候,我们就用次设备号来进行区分它们。
设备类型:dev_t (unsigned int)

下面说说如何申请设备文件:
一共有两种方法: 静态申请动态申请
在驱动中我常用的一般是动态申请,因为用起来非常方便,没有静态申请那么麻烦。(懒)
alloc_chrdev_region (dev_t *dev, unsigned baseminor, unsigned count, char *name);
dev:内核帮你申请的设备号
baseminor:起始次设备号,一般写0
count:需要分配的次设备数目
name:分配设备的名称,如果申请成功,用cat /devdevice 能看到!

注意:不管用哪种申请方式,主设备号都不能为0。

设备号对于内核来说是一种非常宝贵的资源,当我们使用的时候,要去向系统申请。就像是当我们要用钱的时候,就得向媳妇去申请!!当然,我们申请的钱可以用完,或者自己存着。不过系统不行哦,设备号必须还给系统。俗话说:有借有还,在借不难。

归还设备号:
unregister_chrdev_region (dev_t dev, unsigned int count);
dev:分配的设备号
count:次设备号的个数
例:unregister_chrdev_region (dev, 1);

如果知道设备号,如何获取主,次设备号呢?
主设备号 = MAJOR(设备号)
次设备号 = MINOR (设备号)

通过主次设备号,又如何获取设备号呢?
设备号 = MKDEV (主设备号,次设备号)



阅读(1034) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~