Linux环境下字符设备驱动开发入门

本文介绍了在Ubuntu Linux环境下,如何用C语言编写一个简单的字符设备驱动,包括驱动结构、Makefile配置,以及模块的加载和卸载。通过实例展示了驱动的注册和注销过程,帮助读者理解字符设备驱动的开发流程。
摘要由CSDN通过智能技术生成

前言

这篇文章主要总结了我学习嵌入式系统中,一个字符设备驱动的构建和运行过程。这篇总结中我会尽量简洁地告诉你在Ubuntu(Linux)中字符设备驱动的编程方式,一个简单的模块用C如何进行构建,并且如何将它作为内核模块动态地加载和卸载,你能够看到这个字符驱动设备在系统日志中的记录。
在这篇当中,我们会将重点放在程序结构和编译运行加载过程,关于字符设备和环境等等将不做详细介绍。

主要内容

  1. 字符设备驱动的主要结构和编写
  2. 字符设备驱动的Makefile编写
  3. 将驱动作为动态模块进行加载
    为了简洁明了,我们以一个加载时和卸载时候打印hello的驱动为例进行说明。

字符驱动的结构

  1. 首先需要声明该设备的主设备号TEST_MAJOR和设备名称drv_name
  2. 其次实现关于设备的函数,一般包括 open(), release(), read(), write(),后面用户操作的时候,kernel实际会调用 这些函数。
  3. 声明一个 file_operation结构体,然后使用标记化结构初始化语法进行初始化(关于这个可以参考标记化结构初始化,C Primer Plus中也有较为详细的介绍,请参考结构相关章节)。这一步的操作将结构体中的内容和我们的实现函数进行一次“绑定”。
  4. 实现 init()函数,并且在函数内使用
    register_chrdev(TEST_MAJOR,drv_name,&chardev_fops)函数进行设备号的注册;
    实现exit()函数,并在函数内部使用
    unregister_chrdev(TEST_MAJOR,drv_name,&chardev_fops)函数对设备进行注销操作。
  5. 最后记得使用module_init(test_init);module_exit(test_exit);将设备看作模块进行注册注销关联。

下面我们将给出这个hello.c程序:

#include<linux/module.h>
#include<linux/kernel.h&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值