zoukankan      html  css  js  c++  java
  • 最简单的字符设备驱动程序

    /**********待整理**************/

    1、在注册驱动程序的时候,根据主设备号分配的file_operations结构体放到内核的数组里面。我们在用户空间open打开设备的方式是这样的:根据名字找到设备节点,设备节点会对应主设备号,根据主设备号就找到了file_operations结构体。所以我们还需要创建设备节点:mknod /dev/xxx c 111 0。由此我们也可以看出,用户空间open的名字“xxx”,可以跟内核空间的设备名字不一致。因为并不是通过设备名找到file_operations结构体,只要保证open的名字"xxx"与设备节点的名字相一致,而设备节点的主设备号跟内核设备的主设备号相一致就可以了。因为open函数根据设备名找到设备节点,根据设备节点的主设备号找到file_operations结构体,最终调用file_operations里面注册的open函数。

    2、 write (int fd,const void * buf,size_t count);
    write函数会将buf里面的内核写入到fd代表的文件里面,写入的字节数是count。

    3、 register_chrdev分析
    register_chrdev(111,"lcd",&lcd_operation);
    __register_chrdev(major, 0, 256, name, fops);
    __register_chrdev_region(major, baseminor, count, name);//注册一个主设备号
    cdev_alloc(); //分配一个struct cdev结构体,里面有struct file_operations结构体
    //设置struct cdev结构体
    cdev->owner = fops->owner;
    cdev->ops = fops;
    //根据主设备号将struct cdev添加到一个数组里面去
    cdev_add(cdev, MKDEV(cd->major, baseminor), count);

    4.、register_chrdev(111,"lcd",&lcd_operation); 如果主设备号为0,就会自动分配主设备号!分配到的主设备号会作为返回值。装载驱动后,可以在开发板上cat /proc/devices查看主设备号,以便创建设备节点

  • 相关阅读:
    【HDU1698】 Just a Hook 【线段树入门】
    【转载】线段树 区间合并 小结
    Codeforces 1138B(列方程枚举)
    Codeforces 1132G(关系转化树+dfn+线段树)
    Codeforces 1132E(转化+dp)
    Codeforces 1132D(二分模拟)
    Codeforces 1131G(dp)
    洛谷1941(dp)
    洛谷2758(字符串dp)
    Codeforces 1143B(思维、技巧)
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9250405.html
Copyright © 2011-2022 走看看