
linux驱动入门
文章平均质量分 52
陌上花开缓缓归以
无
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux dmesg/kmesg定位问题
2,cat /proc/kmsg查看打印,或者加上&后台运行,其次,kmsg 命令和。3,一般用 dmesg 查看历史日志,再用 kmsg 实时监控新消息。dmesg 的输出通常不会自动保存,建议使用重定向保存到文件。4,如果需要保存日志,一般使用重定向将日志重定向到文件。1,printk的打印,没有接串口时,怎么看。文件通常需要 root 权限才能访问。原创 2025-07-02 19:04:29 · 343 阅读 · 0 评论 -
linux show stack/dump_stack函数分析
函数用于打印当前进程或指定进程的内核态堆栈信息。其核心功能是回溯函数调用栈,并打印出每个函数的地址。// 调用汇编函数回溯栈。是内核调试的重要工具。原创 2025-07-02 19:03:54 · 394 阅读 · 0 评论 -
linux 内核态和用户态定时器函数使用总结
本文总结了Linux系统中的定时器类型及其适用场景,包括用户态和内核态的实现方式。用户态定时器分为传统信号定时器(秒级)和timerfd+epoll(纳秒级),分别适用于简单任务调度和高精度事件处理。内核态定时器包含timer_list(毫秒级)和hrtimer(微秒级),适用于设备驱动和实时系统。文中提供了具体代码示例:用户态实现日志监控、心跳包检测和传感器数据采集;内核态实现硬件寄存器监控和看门狗检测。最后展示了通过proc文件系统统计定时器事件的方法,为开发者提供了全面的定时器使用参考。原创 2025-05-26 03:04:38 · 378 阅读 · 0 评论 -
linux 新增驱动宏config.in配置
本文摘要:介绍Linux内核中添加配置宏的两种方法。推荐方式是通过修改Kconfig文件,在相应子目录中添加bool或tristate类型的配置选项(如MY_SET_FEATURE),并设置默认值和帮助信息。旧版内核可使用config.in方式直接定义。修改后需运行make menuconfig更新.config文件,代码中可通过#ifdef检测宏是否启用原创 2025-05-25 16:41:06 · 288 阅读 · 0 评论 -
linux netlink实现用户态和内核态数据交互
/ 获取发送者的 PID。// 目标为用户空间。运行insmod hello.ko。// 接收内核的回复。原创 2025-05-03 12:24:53 · 723 阅读 · 0 评论 -
linux驱动笔记
内核测试指南 — Linux 内核文档 (kernel.org)Linux 网络和网络设备 API — Linux 内核文档 (kernel.org)二、uboot启动流程分析 |东格博客 (uniondong.github.io)原创 2024-12-08 16:12:27 · 159 阅读 · 0 评论 -
linux 驱动之input子系统初探
用ubuntu学习input子系统纪要。3,选择input外设.1,安装工具evtest。原创 2024-11-19 16:17:24 · 1083 阅读 · 0 评论 -
LINUX sysfs的使用方法举例
sys/module:表示加载的内核模块,每个子目录对应一个模块,包含模块参数和状态信息。/sys/class:表示系统中的设备类别(如网络设备、块设备等),子目录按类别分类。/sys/bus:表示系统总线类型(如PCI、USB等),每个子目录对应一个总线。/sys/devices:表示系统中的物理设备,每个子目录对应一个设备。/sys/kernel:表示内核参数和信息,如调度器参数、内核模块等。/sys/block:表示块设备(如硬盘、USB存储设备等)。原创 2024-11-18 19:16:44 · 1238 阅读 · 0 评论 -
linux 内核asmlinkage关键字总结
GCC中使用__attribute__((regparm(n)))指定最多可以使用n个寄存器(eax, edx, ecx)传递参数,n的范围是0~3,超过n时则将参数压入栈中(n=0表示不用寄存器传递参数)。补充:C语言调用函数参数使用栈传递,有的说使用寄存器传递,上面的asmlinkage关键字主要用于这个作用,那么linux下有几个是使用栈传递,几个使用寄存器传递的呢。我们可以看到edi,esi,edx,ecx,r8d,r9d这几个寄存器 访问,另外的两个为pushq(栈访问)。原创 2024-11-09 16:25:48 · 861 阅读 · 0 评论 -
linux uart实现数据的传输
2查看串口是否可用,可以对串口发送数据,如: echo helloworld >/dev/ttyAMA0。1,查看uart字符设备。原创 2024-08-29 19:18:06 · 453 阅读 · 0 评论 -
Linux实现内核空间和用户空间数据的传递
read和write的主角是内核,也就是说从内核的角度来决定是读还是写。1,read 从内核空间传数据到用户空间,从内核里面读,写到用户copy_to_user //字符串copy_to_user(user_dst,kernel_source,count);put_user //整形数据put_user(data_source,data_dst)2,write //写到内核,从用...原创 2020-04-23 00:51:08 · 2065 阅读 · 0 评论 -
Linux 字符驱动private_data访问和传递数据
1,struct inode 里面的pravitae_data实现数据之间的传递,open到其他函数之间的传递在open里面里面定义数据,在其他的write,read,ioctl里面访问数据:/******************************************************为什么引入 pravita_data在多个用户要使用设备节点时,我们就引入了prav...原创 2020-04-22 23:47:46 · 2636 阅读 · 0 评论 -
Linux 内核 设备号和struct file_operartion的使用
1,设备号的注册方法总结:获取设备号1) 从设备号中提取major和minorMAJOR(dev_t dev);MINOR(dev_t dev);2) 通过major和minor构建设备号MKDEV(int major,int minor);注:上面只是构建设备号。并未注册3),设备号的注册: 模块加载函数通过 register_chrdev_region( ) 或 a...原创 2020-04-21 22:45:41 · 572 阅读 · 0 评论 -
Linux内核 设备号dev_t的使用(静态和动态创建)
今天我们来谈谈字符设备驱动的框架和具体使用吧:我们先来看看字符驱动的大概框架吧:在这里我用一幅图来看看:首先我们了解一下设备驱动中的基本步骤吧:a -- 模块加载函数通过 register_chrdev_region( ) 或 alloc_chrdev_region( )来静态或者动态获取设备号;b -- 通过 cdev_init( ) 建立cdev与 file_op...原创 2020-04-21 21:34:22 · 2718 阅读 · 0 评论 -
Linux 内核链表深入学习
1,我们常用的链表是将数据域和指针域放在一起的,因为这样我我们很方便的就可以操作数据,但是我们不能改变数据域,这就成了普通链表的局限,所以我们在内核中为了避免这种情况,我们只定义指针域,而数据域让开发者自己去操作,所以我们来看看内核链表的定义和其简单的增删改:数据的定义:用双向链表struct my_list{ struct my_list* pre; struct my_list...原创 2020-04-18 23:52:48 · 275 阅读 · 0 评论 -
linux 内核申请空间(kmalloc ,get_free_page, vmalloc)
1,我们在用户空间又申请空间一说,在内核空间同样有此一说:现在我们简要说明一下他们的区别和对比:kmalloc/kfree //内存分配物理上连续,只能低端内存分配get_zeroed_page/free_page //分配一个页面并清零,只能低端内存分配_get_free_page/free_pages //分配指定页数内存并清零,只能低端内存分配alloc_pages/_free...原创 2020-04-18 23:21:26 · 1531 阅读 · 0 评论 -
Linux 内核入门(内核传递参数,内核符号symbol)
1,我们现在用最简单的hello_word.c来引出内核:hello.c和Makefile实现:#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> //指定license版本MODULE_LICEN...原创 2020-04-17 20:37:58 · 583 阅读 · 0 评论 -
树莓派GPIO学习和LCD时钟设置
USB 转 TTL 中的四根线这一端是需要链接到树莓派 GPIO 上面的。(如下图)红线(VCC)接排针外面一排,靠近显示灯一端的第一针黑线(GND)接排针外面一排,靠近显示灯一端的第三针白线(TXD)接排针外面一排,靠近显示灯一端的第四针绿线(RTX)接排针外面一排,靠近显示灯一端的第五针重要提示!(切记注意,GIPIO 的第二根针是不需要接的。千万不能接错,否则短路烧毁板子)1,...原创 2019-01-11 22:26:55 · 2067 阅读 · 0 评论 -
友善之臂nanoPC T3 Plus s5p6818内核和uboot编译和系统量产总结
方法一:uboot 和 Linux 内核的编译,烧写到系统,打开 wiki:http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T3_Plus/zh下载系统: s5p6818-eflasher-20180811-friendlycore-arm64.img.zip用 win32diskimager 烧写到 sd 卡.1,安装 aarch64-...原创 2019-04-07 23:11:24 · 2661 阅读 · 2 评论 -
gpio操作实现人体感应灯(一)
#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;string.h&amp;gt;#include &amp;lt;unistd.h&amp;gt;#include &amp;lt;fcntl.h&amp;gt;#in原创 2019-01-12 11:21:24 · 637 阅读 · 0 评论 -
Linux lcd驱动开发学习
做Linux lcd驱动移植时,先找到lcd驱动的位置:grep "s702" -nR例如:我的nanopc t3 plus可以看到:可以看到,上面有相应的lcds.c,因为我们的开发板是nanopi t3 plus,即进入到nanopi3,看看里面的lcds.c的类型的s702的结构体即可,既是如下static struct nxp_lcd wvga_s702 = { ...原创 2019-04-27 14:45:23 · 499 阅读 · 0 评论 -
linux nanopi3 lcd 闪屏处理
当换上自己的lcd屏幕时,发现屏幕上的黑点总是在闪烁,刚开始我们一直以为是屏幕频率的问题,所以我们之前的nanopi3中的lcds.c里面的lcd702结构体里面的.freq改为70,100,因为我们觉得屏幕闪动就是频率太低,但是改了以后还是没有用,那么lcd的屏幕闪烁到底是什么造成的呢?我们来看下代码:static struct nxp_lcd wvga_s702 = { .widt...原创 2019-04-27 15:25:01 · 1099 阅读 · 3 评论 -
Linux 内核阅读宏定义#define的使用总结
面试中定义一个比较两个数大小的宏:简单的宏定义:#define MAX(x,y) x > y ? x : y此种写法当x,y是表达式时会出问题:所以基本改进如下:#define MAX(x,y) (x) > (y) ? (x) : (y)#define MAX(x,y) ((x) > (y) ? (x) : (y)) //此种方法最好上面几种写法是...原创 2019-04-27 23:42:09 · 1453 阅读 · 0 评论 -
Linux gpio驱动学习
首先我们来看一下gpio驱动框架吧GPIO驱动的头文件为:include/linux/gpio.h和include/asm-generic/gpio.h。GPIO驱动框架的实现代码为:drivers/gpio/gpiolib.c。gpio操作增删改查架构:/* * Add a new chip to the global chips list, keeping the list...原创 2019-05-01 00:25:56 · 1075 阅读 · 0 评论 -
Linux lcd识别代码跟踪自己的lcd
1,lcd参数设置:static struct { int id; char *name; struct nxp_lcd *lcd; int dpi; int ctp; enum lcd_format fmt;} bd_lcd_config[] = { { 25, "HD101", &wxga_hd101, 0, 1, LCD_RGB }, { 32, "...原创 2019-05-13 23:22:07 · 555 阅读 · 0 评论 -
nanopi t3 plus 学习(一)
make mrproper命令会删除所有的编译生成文件、内核配置文件(.config文件)和各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令。make clean命令则是用于删除大多数的编译生成文件,但是会保留内核的配置文件.config,还有足够的编译支持来建立扩展模块。所以你若只想删除前一次编译过程的残留数据,只需执行make clean命令。1,下载内核git clone h...原创 2019-01-11 22:16:12 · 956 阅读 · 0 评论