字符设备驱动

字符设备驱动
$$$$$概述$$$$$
块设备、字符设备以及网络设备中块设备和网络设备一般都会硬件配置完备,对于程序员而言,能够更多操作的就是字符设备。
设置字符设备的一般步骤:
1.初始化硬件
2.定义FOPS(file operations)
3.申请cdev,挂载FOPS
3.加入cdev(函数cdev_add)

$$$$$主次设备号$$$$$
1、主、次设备号
         主设备号:标示设备对应的驱动;
         次设备号:确定设备文件所指设备(设备编号)。
2、设备编号的内部表述
         dev_t(32位,高12位为主设备号,低20为次设备号)【关于dev_t,使用到<linux/ldev_t.h>中的宏】
        ①.获取dev_t
                主设备号=MAJOR(dev_t,dev);
                次设备号=MINOR(dev_t,dev);
        ②.将主次设备号转化为dev_t类型
                 MKDEV(int major,int minor);

$$$$$分配主次设备号 $$$$$
1、静态分配
  ①.查看已使用主设备号
         /proc目录下存放着提供给用户的各类信息,/proc/devices中为各种设备的主设备号。一般避免使用小序号,以免与一些未启动但是可能是基本设备的设备号冲突。所以,一般都使用大序号(100以上)。
 ②.静态分配
例:led0-led5 Major 233
函数:register_chrdev_region(dev_t   first , unsigned int count,char *name);【first 是你要分配的起始设备编号
dev_t    devno;
devno = MKDEV(233,0);
register_chrdev_region(devno,6,"led");
 ③.手动分配节点
  mknod -m 755 led0 c 233 0
  mknod -m 755 led1 c 233 1
.......
  mknod -m 755 led5 c 233 5
2、动态分配
①.上例:
     函数:alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name );
dev_t    devno;
int      major;
alloc_chrdev_region(&devno,0,6,"led");
major  =  MAJOR(devno)
②.分配节点
    
insmod led.ko
led_major = `cat /proc/devices | grep led | awk '{print $1}'` #获取主设备号#
 mknod -m 755 led0 c 233 0
  mknod -m 755 led1 c 233 1
.......
  mknod -m 755 led5 c 233 5

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值