linux 内核 笔记

1)在I2C驱动模块中定义实际调用的函数
void read_i2cinfo_from_proc(void){
printk("I2C reg is 0x%x\n",reg1);
}
2)在I2C模块(如I2C算法驱动模块)初始化时建立一个proc entry
create_proc_read_entry
("readi2cinfo", 0, 0, read_i2cinfo_from_proc, NULL);
//readi2cinfo为/proc目录中的文件名字
//read_i2cinfo_from_proc是实际调用的函数,在1)中定义
3)在用户空间查看当前I2C寄存器的值
$cat /proc/readi2cinfo


1,注册  int register_chrdev(unsigned int major, const char *name,
             struct file_operations *fops);

    其中,major是为设备驱动程序向系统申请的主设备号,如果为0则系统为此驱动程序动态地分配一个主设备号。name是设备名。fops就是前面所说的对各个调用的入口点的说明。此函数返回0表示成功。

返回-EINVAL表示申请的主设备号非法,一般来说是主设备号大于系统所允许的最大设备号。返回-EBUSY表示所申请的主设备号正在被其它设备驱动程序使用。

如果是动态分配主设备号成功,此函数将返回所分配的主设备号。如果register_chrdev操作成功,设备名就会出现在/proc/devices文件里。
    在成功的向系统注册了设备驱动程序后(调用register_chrdev()成功后),就可以用mknod命令来把设备映射为一个特别文件,其它程序使用这个设备的时候,只要对此特别文件进行操作就行了

2,注册:misc_register  ,注册杂项字符设备,该类设备使用同一个主设备号10,函数中会自动创建设备节点,即设备文件。无需mknod指令创建设备文件。因为misc_register()会调用class_device_create()或者device_create()

    static int asrc_major;
static struct class *asrc_class;

asrc_major = register_chrdev(asrc_major, "mxc_asrc", &asrc_fops);
    if (asrc_major < 0) {
        pr_info("Unable to register asrc device\n");
        err = -EBUSY;
        goto error;
    }
    asrc_class = class_create(THIS_MODULE, "mxc_asrc");
    if (IS_ERR(asrc_class)) {
        err = PTR_ERR(asrc_class);
        goto err_out_chrdev;
    }
    temp_class = device_create(asrc_class, NULL, MKDEV(asrc_major, 0),
                   NULL, "mxc_asrc");


在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_create创建对应的设备

struct class *myclass = class_create(THIS_MODULE, “my_device_driver”);
class_device_create(myclass, NULL, MKDEV(major_num, 0), NULL, “my_device”);



static const struct file_operations proc_dma_operations = {
    .open        = proc_dma_open,
    .read        = seq_read,
    .llseek        = seq_lseek,
    .release    = single_release,
};

static int __init proc_dma_init(void)
{
    proc_create("dma", 0, NULL, &proc_dma_operations);
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值