从头开始编写Linux字符设备驱动程序(1)(基于友好的arm tiny4412开发板)

从这篇博客文章开始,我将开始教你如何编写Linux设备驱动程序。这是开始,如何编写第一个字符设备驱动程序。
首先,您需要编写最简单的字符设备驱动程序吗?还是我们需要知道什么? 1.每个字符设备必须至少具有一个设备号。 2.设备号=主设备号+次设备号。
3.相同类型设备的主要设备编号通常是相同的,但不是绝对的。因此,要编写一个简单的字符设备驱动程序,我们需要在内核中包含这些头文件,因为我们需要调用一个基本宏和一些基本函数供我们使用。
#include& lt; linux / cdev.h& gt; #include& lt; linux / kdev_t.h& gt; #include& lt; linux / fs.h& gt;打开linux内核源代码,输入include / linux /,找到cdev.h,打开它,我们将看到以下结构:struct cdev {//与设备模型相关的struct kobject kobj; //哪个模块属于--->此模块结构模块* owner; //使用file_operations在用户模式下进行操作-& gt;有打开,读取,写入和其他方法const struct file_operations * ops; //链表,将设备插入链表到struct list_head list; //通过设备号匹配相应的驱动程序dev_t dev; //注册字符设备的Unsigned int计数; };您还将看到以下函数:void cdev_init(struct cdev *,const struct file_operations *); struct cdev * cdev_alloc(void);无效的cdev_put(struct cdev * p); int cdev_add(struct cdev *,dev_t,unsigned);复制代码无效的cdev_del(struct cdev *);无效的cd_forget(struct inode *);在这里,我们需要上面的结构,以及三个函数cdev_init,cdev_add,cdev_del和其余函数(目前不需要)。以上功能暂时将不在本节中使用,而将在下一节中使用。
然后查看#include& lt; linux / kdev_t.h& gt;这个头文件,它具有我们需要的:#define MINORBITS 20 #define MINORMASK((1U& lt;& lt MINORBITS)-1)//从设备号中取出主要设备号#define MAJOR(dev )((unsigned int)((dev)& gt; MINORBITS))//从设备号中删除次设备号#define MINOR(dev)((unsigned int)((dev)& amp; ; MINORMASK))//创建设备编号#define MKDEV(ma,mi)((((ma)& lt;< MINORBITS)|(mi))我们接下来写的字符设备需要创建设备编号,因此我们需要MKDEV宏,第一个参数代表主要设备号,第二个参数代表次要设备号。我们知道如何创建设备号,然后创建设备号,但是该设备尚未注册。
此时,我们需要#include& lt; linux / fs.h& gt;这个头文件中的一个函数:extern int register_chrdev_region(dev_t,unsigned,const char *);因为有注册,所以当然有释放,所以我们还需要:extern void unregister_chrdev_region(dev_t,unsigned);好了,有了这些基础知识,我们就可以开始第一个字符设备驱动程序的准备工作了。要编写此简单字符设备,需要执行以下步骤:1.创建设备号2.注册设备号3.如何驱动模块退出,我们需要取消设备的操作。
好的,让我们开始编写代码:#include& lt; linux / init.h& gt; #include& lt; linux / module.h& gt; #include& lt; linux / sched.h& gt; #include& lt; linux / kernel.h& gt; #include& lt; linux / cdev.h& gt; #include& lt; linux / kdev_t.h& gt; #include& lt; linux / fs.h& gt; //定义一个结构变量以表示设备编号---& gt; cdev.h---& gt; dev_t dev_t dev_no; static int __init& nbsp; cdev_test_init(void){int ret; printk(“ CDEV的HELLO KERNEL! ”); // 1,创建一个设备号->第一个是主要设备号,第二个是次要设备号。 //主要设备号可以通过cat / proc / devices查看。
如果设备号已被占用,则需要使用未使用的设备号dev_no& nbsp; = MKDEV(222,2); // 2,已注册的设备号// count指示要分配多少个设备号ret = register_chrdev_region(dev_no,1,“ my_dev”); if(ret& lt; 0){//如果注册失败,则跳转到相应的位置。 goto register_error;}返回0; register_error:return ret;} static int __exit cdev_test_exit(void){//注销驱动程序-& gt;最后写1表示从dev_no unregister_chrdev_region(dev_no,1)开始的连续设备; return 0;} module_init(cdev_test_init); module_exit(cdev_test_exit); MODULE_LICENSE(“ GPL”);如前所述,编写一个Kconfig和Makefile Kconfig菜单“ 4412_CDEV_DRV”。
& nbsp; & nbsp; & nbsp;配置CDEV_TEST& nbsp; & nbsp; & nbsp; & nbsp; & nbsp;布尔“ cdev_test” & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;默认值n& nbsp; & nbsp; help& nbsp;如果您选择,则表示。

公司: 深圳市捷比信实业有限公司

电话: 0755-29796190

邮箱: momo@jepsun.com

产品经理: 李经理

QQ: 2215069954

地址: 深圳市宝安区翻身路富源大厦1栋7楼

微信二维码

更多资讯

获取最新公司新闻和行业资料。

  • double sum = 0.0; for(int i = 0; i < n; i++) { if(resistors[i] > 0) { sum += 1.0 / resistors[i]; 在C语言中计算并联电阻的总电阻是一个常见的应用问题,它涉及到基本的物理知识与编程技巧的结合。并联电路中的总电阻可以通过所有并联电阻倒数的和的倒数来计算。首先,我们需要定义一个函数来处理这一计算过程。例如...
  • 基于CY9BFx2xK/L/M MCU的I2C多任务器系统设计与优化策略 基于FM3 CY9BFx2xK/L/M MCU的I2C多任务器系统设计深度剖析随着物联网(IoT)设备复杂度提升,单片机系统面临越来越多的外设接入需求。采用I2C多任务器配合高性能MCU是当前主流解决方案之一。本文以富士通FM3系列中的CY9BFx2xK/L/M MCU为...
  • GB/T 1- 整流变压器与1.24V参考电压组件协同设计实践 GB/T 1- 整流变压器与1.24V参考电压组件的协同优化设计随着电力电子设备向智能化、高效化发展,整流变压器的设计不再局限于简单的变压功能,而是需要集成先进的控制策略。在此背景下,1.24V参考电压组件与国家标准 GB/T 1- 的...
  • 如何优化N沟道MOS管高边驱动中的驱动能力与稳定性 N沟道MOS管高边驱动的优化策略尽管N沟道MOS管在高边驱动中具有显著优势,但其驱动设计若不恰当,容易引发开关损耗增加、电磁干扰(EMI)上升等问题。因此,优化驱动能力与系统稳定性至关重要。1. 栅极驱动电压的精确控制建...
  • 输出级周边驱动器与N沟道MOS管高边驱动技术详解 输出级周边驱动器与N沟道MOS管高边驱动的核心原理在现代电力电子系统中,输出级周边驱动器与N沟道MOS管高边驱动技术被广泛应用于电源管理、电机控制及车载电子等领域。其核心优势在于高效、低损耗和快速响应。1. N沟道MOS...
  • N沟道MOS管工作原理与应用解析:从基础到实际电路设计 N沟道MOS管基本结构与工作原理N沟道MOS管(N-channel MOSFET)是金属-氧化物-半导体场效应晶体管的一种,其核心特点是在栅极施加正电压时,可在源极和漏极之间形成导电沟道,从而实现电流的控制。该器件由栅极(Gate)、源极(...
  • 如何在8V~29V系统中正确设计P/N沟道MOS管驱动电路 引言:驱动电路的重要性在8V至29V的电力电子系统中,正确设计MOS管的栅极驱动电路是确保器件稳定、高效运行的关键环节。无论是P沟道还是N沟道器件,若驱动不当,可能导致导通不完全、开关速度慢甚至击穿损坏。核心设计原...
  • 现货SMC压力开关ISE30A-01-N-L: 高性能与可靠性的结合 现货供应的SMC压力开关ISE30A-01-N-L是一种高性能的自动化控制元件,广泛应用于各种工业领域。这款压力开关具备精确的压力检测功能,能够在系统压力达到预设值时迅速做出反应,从而实现对机械设备的有效控制。ISE30A-01-N-L型号...
  • N+P互补对MOS管31V至100V:高耐压N沟道器件性能解析 N+P互补对MOS管在高压应用中的核心优势在现代电力电子系统中,N+P互补对MOS管因其优异的开关特性与高耐压能力,广泛应用于电源管理、电机驱动及工业控制等领域。其中,工作电压范围覆盖31V至100V的N沟道MOS管,尤其适用于需要...
  • 0-40V N MOSFET与40-300V N MOSFET性能对比及应用解析 0-40V N MOSFET与40-300V N MOSFET核心参数对比在现代电源管理与功率电子系统中,N沟道金属-氧化物-半导体场效应晶体管(N MOSFET)扮演着关键角色。根据工作电压范围的不同,可将N MOSFET分为两大类:0-40V低电压型与40-300V高电压型。这...
  • MindSphere平台赋能:基于HiFlex与IntelliFET®的智能设备远程运维体系构建 MindSphere平台赋能:基于HiFlex与IntelliFET®的智能设备远程运维体系构建在数字化转型浪潮下,MindSphere作为西门子推出的开放式工业云平台,正推动传统设备向“可感知、可分析、可预测”的智能体演进。当HiFlex时钟产生器与Intelli...
  • 40-300V N MOS与0-40V N MOS参数对比:应用场景与选型指南 40-300V N MOS与0-40V N MOS核心参数对比在电源管理、电机驱动及开关电源设计中,N沟道金属氧化物半导体场效应晶体管(N MOSFET)是关键元件。根据耐压范围的不同,可将N MOS分为高耐压型(40-300V)与低压型(0-40V)。以下从多个维度...
  • 30V N沟道与P沟道MOS管选型指南:从参数到实际电路设计 如何正确选择30V N沟道与P沟道MOS管?在电源管理、智能控制和便携设备设计中,合理选用30V耐压等级的MOS管是保障系统稳定性和能效的关键。以下从选型标准、电路布局和实际案例出发,提供全面指导。1. 核心选型指标工作电压...
  • 欧姆龙E2E-X3D1-N-Z接近开关:工业自动化领域的高效解决方案 欧姆龙的E2E-X3D1-N-Z是一款高性能的接近开关,广泛应用于工业自动化领域。这款接近开关采用先进的传感技术,能够在无需物理接触的情况下检测到金属物体的存在或接近,从而实现对机械设备的精确控制。它具有较高的检测精...
  • FGT数码3 1/2位真空压力开关:高精度与可靠性的工业解决方案 FGT数码3 1/2位真空压力开关是一种先进的设备,用于精确控制和监测真空环境下的压力变化。这种开关以其高精度和可靠性著称,在多种工业应用中发挥着重要作用。它能够提供3 1/2位数的显示精度,这意味着用户可以获取到非常...
  • 从0.6X0.3mm到1.6X0.8mm:SMD芯片封装发展趋势与选型指南 前言在电子元器件不断向微型化、高性能演进的背景下,SMD(Surface Mount Device)芯片封装成为连接硬件创新与量产落地的关键环节。本文聚焦于两款极具代表性的封装规格——Chip SMD-0.6X0.3mm 与 Chip SMD-1.6X0.8mm,深入探讨其技术特征...
  • LJ12A3-4-Z/BX接近开关:工业自动化中的精密传感解决方案 LJ12A3-4-Z/BX接近开关是一款广泛应用于工业自动化领域的传感器。这款接近开关具有非接触式检测的特点,能够实现对金属物体的精确识别与定位,而不会产生机械磨损,从而大大提高了设备的稳定性和使用寿命。该型号接近开关...
  • 电阻精密度1%能代0.1%吗? 不能!其实,对于不是搞计量的不需要分的那么清楚,可以大体上认为高精密、高准确、低误差等是一个意思。但是,对于“精度”一词,可以分解成分解成三个要素:&nbsp;1 、温度系数:温度变化是电阻的大敌,温度系数一...
  • 生产数字式压力开关:从设计到应用 生产数字式压力开关是一项结合了精密机械制造与现代电子技术的工业活动。数字式压力开关是一种用于自动控制系统中的重要部件,它可以将液体或气体的压力转换为电信号,并根据预设值进行控制操作。这种设备广泛应用于...
  • 接近开关WSC1808-N:高性能与广泛应用 接近开关WSC1808-N是一款高性能的感应设备,它主要应用于自动化控制系统中,用于非接触检测物体的存在或位置。这款接近开关具有体积小巧、安装方便的特点,同时具备较高的检测精度和快速响应时间,能够在各种工业环境中...