- 2024-10-21嵌入式串口打印信息重定向到当前终端界面
参考https://blog.csdn.net/wuquan_1230/article/details/105782687在tty_init中会创建/dev/console:int__inittty_init(void){ register_sysctl_init("dev/tty",tty_table); cdev_init(&tty_cdev,&tty_fops); cdev_add(&tty_cdev,MKDEV(TTYAUX_
- 2024-10-09fmql之Linux设备驱动框架
设备驱动框架正点原子第39章---LED驱动框架 测试成功:贴代码(不需要测试APP)/***************************************************************Copyright©ALIENTEKCo.,Ltd.1998-2029.Allrightsreserved.文件名:leds-atk.c作者
- 2024-09-19Linux驱动开发之ioctl控制定时器并实现任意整数级秒计时器
在IO模型中,I和O分别代表系统的输入和输出,在计算机中可以直观地理解为输入设备和输出设备,例如鼠标、键盘、显示器等。由于Linux中运行于用户空间的应用程序不能直接对硬件进行操作,需要应用程序向操作系统内核发起调用,将进程切换到内核空间,才能进行IO操作。IO模型根据功能不同
- 2024-09-04USB gadget驱动框架(三)
gadget驱动框架(三)usb_udc与usb_gadget_driver的绑定usb_udc与usb_gadget_driver,在注册的时候分别被添加到udc_list和gadget_driver_pending_list中,无论这两者先后顺序如何,都将会动态的去识别及匹配到具体设备中,绑定过程如下:源码:drivers/usb/gadget/udc/core.c/*-------------
- 2024-08-13linux内核模块 字符设备驱动模板
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、linux内核模块是什么?二、代码示例总结前言提示:这里可以添加本文要记录的大概内容:内核版本5.10.92linux内核模块字符设备驱动模板cdev注册字符设备,创建一个/dev/下设备节点和/sy
- 2024-07-15Structure of Linux Kernel Device Driver(Part I)
StructureofLinuxKernelDeviceDriverref.https://www.youtube.com/watch?v=XoYkHUnmpQo&list=LL&index=1&t=272sDeviceDriversDef.:设备驱动(DeviceDrivers),实际上就是硬件设备对应的抽象,用户能够通过这样的一个抽象与对应的硬件进行交互设备驱动与固件的区别:设备驱
- 2024-06-20第6章 设备驱动程序(1)
目录6.1I/O体系结构6.2访问设备6.2.1设备文件6.2.2字符设备、块设备和其他设备6.2.3ioctl寻址设备6.2.4主从设备号的表示6.2.5注册本专栏文章将有70篇左右,欢迎+关注,查看后续文章。6.1I/O体系结构1.扩展硬件总线的作用: 用于连接CPU和外
- 2024-06-15泰山派学习12--GPIO_LED字符设备驱动
一、GPIO寄存器1、对GPIO进行控制有以下步骤①:是能GPIO的时钟(默认开启,不用配置);②:设置引脚复用为GPIO(复位默认配置GPIO,不用配置);③:设置引脚属性(上下拉、速率、驱动能力,默认不用配置);④:控制GPIO引脚为输出,并且输出高低电平。2、GPIO功能引脚及寄存器rk3566有5个gpio控制器
- 2024-06-06写一个linux驱动
简单一点,写一个字符设备驱动。首先我们希望在/dev下面出现一个新的字符设备文件。1.分配一个设备号;intalloc_chrdev_region(dev_t*dev,unsignedintfirstminor,unsignedintcount,char*name);示例:首先定义一个dev_t的变量,它其实就是一个32位的整数。再使用上述函
- 2024-06-05新字符设备驱动函数学习
register_chrdev和unregister_chrdev这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。新字符设别驱动API函数在驱动模块加载的时候自动创建设备节点文件。分配和释放设备号使用register_chrdev
- 2024-04-27字符设备,write一直返回-1的问题
在学习linux设备驱动时遇到的问题,请求大佬指点:1、insmodchar_dev.ko 2、mknod/dev/mydevicec24003、./test write返回-1,内核没有调用的device_write函数。 char_dev.c#include<linux/module.h>#include<linux/fs.h>#include<linux/cdev.h>#include
- 2024-04-10Linux驱动开发入门实验
目录一、驱动模块的加载和卸载二、分配和释放设备号三、字符设备注册与注销四、实现设备的具体操作函数五、添加LICENSE和作者信息六、驱动程序完整代码七、编译驱动程序八、加载驱动模块一、驱动模块的加载和卸载Linux驱动有两种运行方式:第一种即是将驱动编译
- 2024-03-23新字符驱动框架驱动LED
代码参考正点原子 在https://www.cnblogs.com/lethe1203/p/18091283一文中,存在以下的几个问题:1、使用register_chrdev函数注册字符设备,浪费了大量的次设备号,而且需要手动指定主设备号,还需要事先确认好哪一个主设备号没用2、需要手动mknode创建设备节点 解决问题1:使用设备
- 2024-01-29通过LINUX驱动控制FPGA端PWM外设(LED) 通过应用程序命令传参随意修改寄存器的值(PWM波频率和占空比随意修改)
用法:先下发下面的命令让kernel信息打印到串口:echo7417>/proc/sys/kernel/printk然后增加程序可执行性:chmod777pwmdriver_app 先执行./pwmdriver_app/dev/pwm400000200然后执行./pwm_driver_app/dev/pwm400000200,可以发现LED[1]
- 2023-12-26Linux驱动开发之杂项设备注册和Linux2.6设备注册
Linux设备驱动开发中,需要向内核正确注册设备,才能创建设备节点,以供应用层访问。本文将详细介绍Linux下的两种设备注册方法:杂项设备注册和Linux2.6新方法注册。一、杂项设备注册杂项设备注册简介杂项设备注册是Linux驱动开发中的一种设备注册方式。在Linux系统中,杂项设备是一类
- 2023-12-19字符驱动框架
HelloWorld/*字符驱动框架*///*****************相关的头文件和宏定义*******************#include<linux/kernel.h>#include<linux/module.h>#include<linux/fs.h>#include<linux/device.h>#include<linux/version.h>#defineCLASS_NAME"
- 2023-12-09Intel710驱动代码分析-客户端的通知回掉函数
继续分析710的驱动代码:今天主要分析这个代码:客户端通知函数作用今天要分析的是一个客户端通知函数,该函数i40e_notify_client_of_vf_enable的作用是:在PF上启用或禁用VF后,通过客户端的回调函数通知客户端。传入参数structi40e_pf*pf(表示PF(PhysicalFunction,物理功能)设备信息)u3
- 2023-12-05RK3568,字符设备框架:管理同主设备号、不同次设备号设备
字符设备框架:管理同主设备号、不同次设备号设备以下代码针对迅为开发板RK3568,开发板系统是ubuntu20.04,正文以下是我写的字符设备框架,实现了管理同主设备号、不同次设备号的功能。代码:private_data_test.c#include<linux/init.h>#include<linux/module.h>#include<linux
- 2023-10-25kernel function: the difference beween cdev_add and device_create
Touseacharacterdriver,firstyoushouldregisteritwiththesystem.Thenyoushouldexposeittotheuserspace. 1.cdev_initandcdev_addfunctionsperformthecharacterdeviceregistration.cdev_addaddsthecharacterdevicetothesystem.When
- 2023-08-1510 新字符设备驱动文件
一、新字符设备驱动原理 因为 register_chrdev和unregister_chrdev两个函数是老版本驱动文件,现在可以用新字符设备驱动API函数。 1.分配和和释放设备号 使用register_chrdev函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会带来两个问题: 1、需
- 2023-07-17正点原子第五十八章 Linux input子系统实验 文档之外(没提到的部分)
使用input子系统,不需要分配设备号、注册设备、创建类等等工作。也就是不需要以下的代码。//1.由系统分配设备号if(Key_Struct.major!=0){Key_Struct.devid=MKDEV(Key_Struct.major,0);register_chrdev_region(Key_Struct.devid,DEV_C
- 2023-05-08kernel module编程(四):设备属性和与上层应用的联系
本文也即是《LinuxDeviceDrivers》一书第三章CharDrivers的读书笔记之二。 这部分开始有些觉得阴涩难懂。我上网去查,没能找到这本书的Example的例子,所以决定还是靠自己。我先写一个应用层的例子,通过这个例子来触发kernelmodule的一些操作,这样比较容易理解。#in
- 2023-05-07字符设备驱动的框架
字符设备驱动框架编写字符驱动设备框架时,主要的工作量在入口函数,卸载函数以及其设备文件操作函数当中。现在的很多板子写驱动不会像下面的程序这样的繁琐,但是从其中基本可以看到框架大体没变,所以用chatgpt生成了找个函数并修改,搭了字符设备驱动的框架。首先我们得明白一个字符
- 2023-04-15驱动模块加载三要素例子
#include<linux/kernel.h>#include<linux/module.h>#include<linux/cdev.h>#include<linux/fs.h>#defineHELLO_MAJOR250#defineHELLO_MINOR0#defineDEV_NUM1#defineDEV_NAME"hello_world&qu
- 2023-04-01chrdev_open --- 通过文件路径,执行驱动设置的open()流程
open一个字符设备的流程大概是:文件路径=>inode=>chrdev_open()=>(kobj_lookup=>)inode.i_cdev=>cdev.fops.my_chr_open()。所以只要通过VFS找到了inode,就可以找到chrdev_open(),这里我们就来关注一个chrdev_open()是怎么从内核的数据结构中找到我们的cdev并执行其中的my_c