当前位置:首页 > 公众号精选 > IOT物联网小镇
[导读]作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录示例程序目标编写驱动程序编写应用程序卸载驱动模块别人的经验,我们的阶梯!大家好,我是道哥。...

作  者:道哥,10 年嵌入式开发老兵,专注于:C/C 、嵌入式、Linux


关注下方公众号,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。


目录


别人的经验,我们的阶梯!


大家好,我是道哥。


在前几篇文章中,我们一块讨论了:在Linux系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。


这篇文章,我们就以此为基础,写一个有实际应用功能的驱动程序:


  1. 在驱动程序中,初始化 GPIO 设备,自动创建设备节点;


  2. 在应用程序中,打开 GPIO 设备,并发送控制指令设置 GPIO 口的状态;


示例程序目标

编写一个驱动程序模块:mygpio.ko


当这个驱动模块被加载的时候,在系统中创建一个mygpio类设备,并且在/dev目录下,创建4个设备节点:


/dev/mygpio0


/dev/mygpio1


/dev/mygpio2


/dev/mygpio3


因为我们现在是在x86平台上来模拟 GPIO的控制操作,并没有实际的GPIO硬件设备。


因此,在驱动代码中,与硬件相关部分的代码,使用宏MYGPIO_HW_ENABLE控制起来,并且在其中使用printk输出打印信息来体现硬件的操作。


在应用程序中,可以分别打开以上这4个GPIO设备,并且通过发送控制指令,来设置GPIO的状态。


编写驱动程序

以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。


创建驱动目录和驱动程序

$ cd linux-4.15/drivers/
$ mkdir mygpio_driver
$ cd mygpio_driver
$ touch mygpio.c
mygpio.c文件的内容如下(不需要手敲,文末有代码下载链接):


#include

  • #include

  • #include

  • #include

  • #include


  • // GPIO 硬件相关宏定义
    #define MYGPIO_HW_ENABLE

    // 设备名称
    #define MYGPIO_NAME "mygpio"

    // 一共有4个 GPIO 口
    #define MYGPIO_NUMBER 4

    // 设备类
    static struct class *gpio_class;

    // 用来保存设备
    struct cdev gpio_cdev[MYGPIO_NUMBER];

    // 用来保存设备号
    int gpio_major = 0;
    int gpio_minor = 0;

    #ifdef MYGPIO_HW_ENABLE
    // 硬件初始化函数,在驱动程序被加载的时候(gpio_driver_init)被调用
    static void gpio_hw_init(int gpio)
    {
    printk("gpio_hw_init is called: %d. \n", gpio);
    }

    // 硬件释放
    static void gpio_hw_release(int gpio)
    {
    printk("gpio_hw_release is called: %d. \n", gpio);
    }

    // 设置硬件GPIO的状态,在控制GPIO的时候(gpio_ioctl)被调研
    static void gpio_hw_set(unsigned long gpio_no, unsigned int val)
    {
    printk("gpio_hw_set is called. gpio_no = %ld, val = %d. \n", gpio_no, val);
    }
    #endif

    // 当应用程序打开设备的时候被调用
    static int gpio_open(struct inode *inode, struct file *file)
    {

    printk("gpio_open is called. \n");
    return 0;
    }

    // 当应用程序控制GPIO的时候被调用
    static long gpio_ioctl(struct file* file, unsigned int val, unsigned long gpio_no)
    {
    printk("gpio_ioctl is called. \n");

    // 检查设置的状态值是否合法
    if (0 != val
  • 本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
    换一批
    延伸阅读

    上海2022年9月6日 /美通社/ -- 9月3日上午,《"东数西算"战略下绿色智算中心产业发展研究报告》重磅发布。该报告由国家信息中心与燧原科技深度合作,联合庆阳市人民政府、之江实验室、中国能建共同...

    关键字: 数字经济 安防 模型 编写

    (全球TMT2022年8月31日讯)8月25日,"2022算网融合产业发展峰会"在北京举行,会上中国信息通信研究院发布《"边缘计算+"技术白皮书》,该白皮书由信通院发起,浪潮信息等业界多家领袖企业参与编写,为边缘计算在...

    关键字: 边缘计算 人工智能 机器人 编写

    GPIO全称General Purpose Input Output即通用输入/输出,其实GPIO的本质就是芯片的一个引脚,通常在ARM中所有的I/O都是通用的。不过由于每个开发板上都会设计不同的外围电路,这就造成GPI...

    关键字: GPIO 芯片

    北京2022年8月31日 /美通社/ -- 8月25日,"2022算网融合产业发展峰会"在北京举行,大会汇聚工业和信息化部、中国通信标准化协会、运营商、阿里巴巴、国家电网、浪潮信息等政府及企...

    关键字: 编写 边缘计算 AI ECOM

    "为加快推进深圳团体标准建设,提升社会团体的编写能力" 深圳2022年8月29日 /美通社/ -- 为加快推进深圳团体标准建设,满足深圳市社会团体对团体标准化能力提升的迫切需求,提升社会团体的标准编...

    关键字: 编写 新能源汽车 汽车产业 电动汽车

    上海2022年8月10日 /美通社/ -- 工业一直在我国国民经济中占有主导地位,在"十四五"规划的重要发展阶段,区块链等新一代信息技术与产业的融合创新将会催生新产业新业态新模式,壮大经济发展新引擎。...

    关键字: 编写 区块链 应用发展 中国电子

    北京2022年7月8日 /美通社/ -- 近日,由荷兰皇家菲仕兰联合中国妇女发展基金会发起的“爱育未来”项目11个项目点的志愿者代表和发起方代表齐聚线上项目总结交流会,对社区和家庭早教的阶段性探索成果和经验进行交流和讨论...

    关键字: 可持续发展 编写

    广州2022年7月1日 /美通社/ -- 近日,SGS携手中标院为广州奥太信科技有限公司旗下品牌UEK的一款儿童减负书包颁发了独立慧鉴产品认证证书。结合UEK该款认证书包的客观测试与主观评价结果,其各项性能、指标符合SG...

    关键字: BSP 供应链 编写 防护

    北京2022年5月6日 /美通社/ -- 近日,由中电金信作为核心编写单位参编的全球首个AI模型开发管理标准 -- 《人工智能研发运营一体化(Model/MLOps)能力成熟...

    关键字: AI模型 人工智能 机器学习 编写

    (全球TMT2022年5月6日讯)近日,由中电金信作为核心编写单位参编的全球首个AI模型开发管理标准 -- 《人工智能研发运营一体化(Model/MLOps)能力成熟度模型第一部分:开发管理》正式对外发布。该标准的发布...

    关键字: AI模型 编写 人工智能 机器学习

    IOT物联网小镇

    42 篇文章

    关注

    发布文章

    编辑精选

    技术子站

    关闭