从头开始编写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语言中计算并联电阻的总电阻是一个常见的应用问题,它涉及到基本的物理知识与编程技巧的结合。并联电路中的总电阻可以通过所有并联电阻倒数的和的倒数来计算。首先,我们需要定义一个函数来处理这一计算过程。例如...
  • N沟道MOS管电压范围从31V到99V的应用与选择 在电力电子和开关电源设计中,N沟道MOSFET因其低导通电阻和高速开关性能而被广泛应用。对于需要处理较高电压的应用场景,选择合适的N沟道MOSFET就显得尤为重要。您提到的31V至99V电压范围,正好覆盖了许多工业控制、电机驱动...
  • N+P互补对MOS管工作电压范围从8V到29V的应用与选型指南 在电子设计领域,特别是在电源管理和电机控制等应用中,选择合适的MOSFET(金属氧化物场效应晶体管)至关重要。N+P互补对MOS管因其独特的性能,在宽电压范围内提供了出色的解决方案。本文将围绕N+P互补对MOS管的工作电压范...
  • 生产数字式压力开关:从设计到应用 生产数字式压力开关是一项结合了精密机械制造与现代电子技术的工业活动。数字式压力开关是一种用于自动控制系统中的重要部件,它可以将液体或气体的压力转换为电信号,并根据预设值进行控制操作。这种设备广泛应用于...
  • 欧姆龙E2E-X3D1-N-Z接近开关:工业自动化领域的高效解决方案 欧姆龙的E2E-X3D1-N-Z是一款高性能的接近开关,广泛应用于工业自动化领域。这款接近开关采用先进的传感技术,能够在无需物理接触的情况下检测到金属物体的存在或接近,从而实现对机械设备的精确控制。它具有较高的检测精...
  • 接近开关WSC1808-N:高性能与广泛应用 接近开关WSC1808-N是一款高性能的感应设备,它主要应用于自动化控制系统中,用于非接触检测物体的存在或位置。这款接近开关具有体积小巧、安装方便的特点,同时具备较高的检测精度和快速响应时间,能够在各种工业环境中...
  • OMLON接近开关E2E-X2D1-N-Z: 原装正品,现货供应 OMLON品牌的接近开关E2E-X2D1-N-Z是一款高质量、高精度的检测设备。这款产品以其卓越的性能和可靠性,在各种工业自动化领域得到了广泛的应用。原装正品保证了其优秀的品质与稳定性,能够满足用户对于精确度和耐用性的高标准...
  • 电阻精密度1%能代0.1%吗? 不能!其实,对于不是搞计量的不需要分的那么清楚,可以大体上认为高精密、高准确、低误差等是一个意思。但是,对于“精度”一词,可以分解成分解成三个要素:&nbsp;1 、温度系数:温度变化是电阻的大敌,温度系数一...
  • LJ12A3-4-Z/BX接近开关:工业自动化中的精密传感解决方案 LJ12A3-4-Z/BX接近开关是一款广泛应用于工业自动化领域的传感器。这款接近开关具有非接触式检测的特点,能够实现对金属物体的精确识别与定位,而不会产生机械磨损,从而大大提高了设备的稳定性和使用寿命。该型号接近开关...
  • 接近开关E2E-X3D1-N:非接触式感应技术的应用 接近开关E2E-X3D1-N是一种非接触式的感应开关,被广泛应用于自动化控制领域。这种开关通过电磁感应原理来检测目标物体的存在与否,无需与运动部件进行直接接触即可完成检测任务,从而大大提高了设备的可靠性和使用寿命。...
  • 设计力敏电阻器的 4 个简单步骤 设计力敏电阻器的 4 个简单步骤可以通过以下四个简单步骤来设计力传感电阻器:1. 组合力感电阻元件收集设计 FSR 传感器所需的材料。FSR 传感器使用的材料是电气和电子元件——PCB、导电泡沫、电线、焊料、热胶、工具——烙...
  • 爱普瑞BRT-205L-T:高效实用的智能设备 爱普瑞BRT-205L-T是一款高效实用的智能设备。该产品以其卓越的性能和便捷的操作体验,受到了广大用户的青睐。首先,在设计上,爱普瑞BRT-205L-T采用了先进的技术理念,确保了其在同类产品中的领先地位。无论是外观设计还是内...
  • 关于电阻量程40欧姆的测量设备及其应用 在电子测量领域中,对于特定量程如40欧姆的电阻,需要选用合适的测量工具以确保准确度。通常,万用表或专门的电阻测量仪器能够提供这样的量程。这些设备通过不同的方法来测量电阻值,包括但不限于电流-电压法,即根据...
  • 30V互补对N+P MOS管 在现代电子设备中,MOS管(金属氧化物半导体场效应晶体管)是不可或缺的组件之一,广泛应用于模拟和数字电路设计中。特别是对于30V互补对N+P MOS管,它在高压应用中表现尤为突出,能够提供优异的性能和稳定性。30V互补对N+...
  • 40-300V N沟道MOSFET选型指南 在电子设计中,选择合适的功率MOSFET对于确保电路的高效和稳定运行至关重要。40-300V电压范围内的N沟道MOSFET是许多电源转换、电机控制和其他电力应用中的关键组件。本文将探讨如何根据不同的应用场景选择适合的MOSFET,包括...
  • 什么是X电容和Y电容 安规X电容X电容器连接在电源线的两条线之间,即“L-N”之间。X电容器可以抑制差模干扰。通常使用金属化薄膜电容器,电容为uF。X电容器大多是方形的,类似于盒子的形状。其表面通常标有安全认证标志、耐压字样(一般为AC3...
  • X电容和Y电容的应用 X电容① 电磁干扰抑制抗电磁干扰是X电容器最常见的功能。通常,零线和带电线之间桥接两个引脚,适用于高频、直流、交流和耦合。在跳线脉冲电路中,它能承受过压冲击。它通常与放电电荷电阻并联使用;如下所示:① 电阻...
  • N+P互补对MOS管工作原理 N沟道和P沟道互补型金属氧化物半导体(CMOS)技术是现代集成电路中最常用的技术之一。CMOS技术利用了N沟道MOSFET(NMOS)和P沟道MOSFET(PMOS)两种晶体管的互补特性,从而实现了低静态功耗、高噪声容限和较好的逻辑电平转换能力...
  • N沟道MOS管工作原理及应用 N沟道MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor)是一种常见的场效应晶体管,其工作基于电场效应来控制电流。这种类型的晶体管在现代电子设备中有着广泛的应用,从消费电子产品到工业控制系统,乃至最新的计算机芯片技...
  • N沟道MOS管100V+参数及应用详解 在电子设计和电路开发中,N沟道MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor)是一种非常重要的元件,特别是在需要高电压处理能力的应用场景下,如电源管理和电机控制等。对于一款标称能够承受100V以上的N沟道MOS管来说,了...