Linux驱动框架

这篇具有很好参考价值的文章主要介绍了Linux驱动框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <asm/arch/regs-gpio.h>
#include <asm/hardware.h>

static struct class *firstdrv_class;
static struct class_device    *firstdrv_class_dev;


static int first_drv_open(struct inode *inode, struct file *file)
{
    printk("first_drv_open\n");
    return 0;
}

static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
{

    printk("first_drv_write\n");
    return 0;
}

static struct file_operations first_drv_fops = {
    .owner  =   THIS_MODULE,    /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */
    .open   =   first_drv_open,     
    .write    =    first_drv_write,       
};


int major;
static int first_drv_init(void)
{
    major = register_chrdev(0, "first_drv", &first_drv_fops); // 注册驱动, 告诉内核

    firstdrv_class = class_create(THIS_MODULE, "firstdrv");//创建class

    firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); /* 创建/dev/xyz设备节点 */

    return 0;
}

static void first_drv_exit(void)
{
    unregister_chrdev(major, "first_drv"); // 卸载

    class_device_unregister(firstdrv_class_dev);
    class_destroy(firstdrv_class);
}

module_init(first_drv_init);
module_exit(first_drv_exit);


MODULE_LICENSE("GPL");文章来源地址https://www.toymoban.com/news/detail-419177.html

到了这里,关于Linux驱动框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux驱动】Linux--V4L2视频驱动框架

    v4l2驱动框架主要的对象有video_device、v4l2_device、v4l2_subdev、videobuf video_device 一个字符设备,为用户空间提供设备节点(/dev/videox),提供系统调用的相关操作(open、ioctl…) v4l2_device 嵌入到video_device中,表示一个v4l2设备的实例 v4l2_subdev 依附在v4l2_device之下,并表示一个v4l2设备的子

    2024年02月14日
    浏览(22)
  • 【Linux驱动】内核模块编译 —— make modules 的使用(单模块编译、多模块编译)

    编译驱动一般采用的是将驱动编译成模块(.ko 文件),然后加载到内核,这其中就用到了 make modules 命令。 目录 一、单模块编译 1、一个 c 文件编译成一个 ko 文件 2、多个文件编译成一个 ko 文件 二、多模块编译(多文件多模块) 下面是最简易的单文件单模块编译,假设我们

    2024年02月10日
    浏览(41)
  • Linux驱动框架

    #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include asm/uaccess.h #include asm/irq.h #include asm/io.h #include asm/arch/regs-gpio.h #include asm/hardware.h static struct class *firstdrv_class; static struct class_device    *firstdrv_class_dev; static int first_drv_open(struct inode *in

    2023年04月20日
    浏览(24)
  • Linux下的FrameBuffer驱动框架

    一、RGB LCD经典显示器件介绍 : 1、LCD屏幕的重要属性参数 : ① 分辨率 :也就是屏幕上的像素点的个数; ② 像素格式 :即单个像素点RGB三种颜色的表达方式,包括RGB888、ARGB8888和RGB565等。 ③ LCD屏幕硬件接口 : 这里指的是RGB LCD排线接口 , 如下图所示 : R[7:0]、G[7:0]和B[

    2024年01月16日
    浏览(25)
  • 【Linux】驱动学习,先啃框架

    目录 前言: 一、驱动设计 (1)面向对象: (2)分层: (3)分离: 二、驱动框架 (1)传统框架  (2)总线设备驱动框架: (3)设备树 经典环节: 我一直深信,带着问题思考和实践,能够更容易理解并学习到 。 (1)驱动设计的核心思想 面向对象 分层 分离 (2)驱动

    2024年02月05日
    浏览(23)
  • Linux 网络驱动-MAC、PHY层驱动框架(三)

       I.MX6ULL 有两个 10/100M 的网络 MAC 外设,因此 I.MX6ULL 网络驱动主要就是这两个网络 MAC 外设的驱动。这两个外设的驱动都是一样的,我们分析其 中一个就行了,首先肯定是设备树, NXP 的 I.MX 系 列 SOC 网 络 绑 定 文 档 为 Documentation/devicetree/bindings/net/fsl-fec.txt,此绑定文档描

    2024年02月09日
    浏览(31)
  • Linux内核驱动 --- CCF框架 provider驱动的编写

    复制上节内容中对Provider驱动编写流程的总结: 1)分析硬件的clock tree,按照上面所描述的分类,将这些clock分类。 2)将clock tree在DTS中描述出来,需要注意以下几2点: 3)对于不能由clock framework core处理的clock,需要在driver中使用struct of_device_id进行匹配,并在初始化时,调用

    2024年02月07日
    浏览(36)
  • Linux -- 字符设备驱动--LED的驱动开发(初级框架)

    看原理图确定引脚,确定引脚输出什么电平才能点亮 / 熄灭 LED 看主芯片手册,确定寄存器操作方法:哪些寄存器?哪些位?地址是? 编写驱动:先写框架,再写硬件操作的代码 注意 :在芯片手册中确定的寄存器地址被称为 物理地址 ,在 Linux 内核中无法直接使用。 需要使

    2024年04月28日
    浏览(22)
  • linux Regulator电源设备驱动框架

            调节器Regulator是为其他设备供电的设备。由regulator供电的设备称为消费者。提供调节器的芯片称为电源集成电路PMIC。调节器可以启用/禁用其输出,也可以控制其输出电压和电流。         生产者是产生调节电压电流的设备,这个设备的名称是PMIC,可用于控制加电时

    2024年01月19日
    浏览(25)
  • 嵌入式Linux驱动开发——常见框架梳理

    本文主要介绍了Linux驱动开发中一些常用的驱动框架,platform、input、iic、spi等,硬件平台使用的是正点原子的imx6ull开发板。 不管什么框架最后都是要追溯到配置IO的电气属性和复用功能 如果要使用外部中断,设备树节点中还需添加相关信息,什么边沿触发 1:module_init和mod

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包