![](https://img-blog.csdnimg.cn/9a1b6c443fb643889c7dc07002843998.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux驱动
文章平均质量分 82
以实战为线索,讲解Linux驱动知识
嵌入式Linux充电站
芯片原厂驱动工程师,
始终觉得“讲出来,才是学到的”,
学习、沉淀、分享,才能有所获!
展开
-
Linux驱动中断与时间篇——高精度定时器hrtimer
低分辨率定时器是用jiffies来定时的,所以会受到HZ影响,如果HZ为200,代表每秒种产生200次中断,那一个jiffies就需要5毫秒,所以精度为5毫秒。如果精度需要达到纳秒级别,则需要使用高精度定时器hrtimer。原创 2023-09-16 17:48:08 · 1212 阅读 · 0 评论 -
Linux驱动中断与时间篇——低分辨率定时器
delay和sleep的区别:delay型延时:忙等待,占用CPU资源,延迟过程无法进行其他任务。sleep型延时:休眠,不占用CPU资源,其它模块此时可以使用CPU资源。原创 2023-09-16 16:53:23 · 349 阅读 · 0 评论 -
Linux驱动中断与时间篇——中断下半部的三种方法
当产生一个中断时,会进入中断处理程序。但中断处理程序必须快速、异步、简单的对硬件做出迅速响应并完成那些时间要求很严格的操作。因此,对于那些其他的、对时间要求相对宽松的任务,就应该推后到中断被激活以后再去运行。这样,整个中断处理流程就被分为了两个部分:原创 2023-09-16 16:48:42 · 486 阅读 · 0 评论 -
Linux启动速度优化方法总结
要对Linux系统启动速度进行优化,首先要知道如何统计系统启动的时间。下面介绍几种统计内核启动耗时的方法,以及对内核启动速度优化的几个方法。原创 2023-09-16 16:37:16 · 1964 阅读 · 0 评论 -
Linux内核编译机制
Linux内核的编译主要过程:配置、编译、安装。配置主要由Kconfig提供图形界面完编译主要基于Kbuild编译系统,执行make完成编译。安装主要也是基于Kbuild提供的脚本,然后执行make完成安装原创 2023-09-16 16:32:36 · 91 阅读 · 0 评论 -
Linux系统调试篇——GDBSERVER远程调试
对目标开发板上的程序进行远程调试。很简单,主要就是先在开发板上开启。调试,首先要在目标开发板上启动。,并等待客户端连接。服务时指定的端口号。原创 2023-09-16 16:19:44 · 742 阅读 · 0 评论 -
Linux系统调试篇——GDB调试入门
本篇讲解使用GDB调试Linux应用程序,以下以 `hellowld.c` 为例介绍 GDB 的调试入门:原创 2023-09-16 16:02:39 · 131 阅读 · 0 评论 -
Linux系统调试篇——Perf性能分析使用指南
perf可以用来统计一个程序运行期间花了多少时间、上下文切换次数、cache命中率等一些性能相关的事件,通过perf可以分析一个程序的性能瓶颈,从而对程序做出优化。原创 2023-09-16 15:56:25 · 1577 阅读 · 0 评论 -
Linux系统调试篇——错误码介绍
在处理一些程序出错语句中,不管是用户空间还是内核空间,通常都会返回一个错误码。例如return -ERROR。这些错误码是Linux内核定义的,它几乎包括了我们能想到的所有错误类型。错误码的定义位于:`include/uapi/asm-generic/error-base.h`和`include/uapi/asm-generic/error.h`两个头文件中。原创 2023-09-16 15:45:02 · 620 阅读 · 0 评论 -
Linux系统调试篇——核心转储调试(core dump)
本篇讲解Linux应用程序发生Segmentation fault段错误时,如何利用core dump文件定位错误。在 Linux 系统中,常将“主内存”称为核心(core),而核心映像(core image) 就是 “进程”(process)执行当时的内存内容。当进程发生错误或收到“信号”(signal) 而终止执行时,系统会将核心映像写入一个文件,以作为调试之用,这就是所谓的核心转储(core dump)。原创 2023-09-16 15:36:47 · 186 阅读 · 0 评论 -
Linux驱动IO篇——mmap操作
mmap简单来说,就是让一块物理内存拥有两份映射,即拥有两个虚拟地址,一个在内核空间,一个在用户空间。因为用户空间是不能直接操作内核空间数据的,他们映射的是不同的地址空间原创 2023-09-16 15:13:17 · 174 阅读 · 0 评论 -
Linux驱动IO篇——异步通知
异步通知在Linux的实现中是通过信号,而信号是在软件层次上对中断机制的一种模拟。这种机制和中断非常类似,所以可以以中断的思想来理解这一过程,信号其实就相当于应用层的中断。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。原创 2023-09-16 15:07:22 · 155 阅读 · 0 评论 -
Linux驱动IO篇——异步IO
异步IO在提交完IO操作请求后就立即返回,程序不需要等到IO操作完成再去做别的事情,具有非阻塞的特性。当底层把IO操作完成后,可以给提交者发送信号,或者调用注册的回调函数,告知请求提交者IO操作已完成。原创 2023-09-16 15:03:10 · 257 阅读 · 0 评论 -
Linux驱动IO篇——IO多路复用
IO多路复用就是解决能够同时操作多个设备的方法,及时处理多个设备的数据。具体的,是指单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力。Linux的IO多路复用有三种方法:`select`、`poll`、`epoll`,且这三种方法都是**系统调用*原创 2023-09-16 14:59:47 · 96 阅读 · 0 评论 -
很底层的性能优化:让CPU更快地执行你的代码
这些是CPU缓存对性能的影响,这已经是很底层的性能优化了,不论什么编程语言都是有效的。真正了解缓存,相信你对底层的认识会有很大帮助。提升数据缓存命中率:顺序地操作连续内存数据提升指令缓存命中率:有规律的条件分支提升多核CPU的缓存命中率:考虑将进程绑定CPU运行。原创 2023-07-24 23:11:12 · 240 阅读 · 0 评论 -
Linux驱动IO篇——阻塞/非阻塞IO
讲解了Linux驱动中,阻塞IO、非阻塞IO的使用,以及等待队列的使用原创 2023-06-10 15:07:21 · 1162 阅读 · 0 评论 -
Linux驱动IO篇——ioctl设备操作
应用程序如果想要设置/获取驱动层的数据,一般是驱动提供一个`ioclt`接口,然后应用层调用。因此,学会在驱动中实现`ioctl`接口是必要的一项技能。## ioctl命令编码规则。**想要定义一个自己的ioctl命令,必须要遵从ioctl的编码规则**。一个ioctl命令由32比特位表示,每个比特位都有不同的含义,不同版本的内核定义可能有些差异,具体参考文档`“Documentation/ioctl/ioctl-deconding.txt”`.原创 2023-04-16 13:39:40 · 2229 阅读 · 1 评论 -
不敲一行代码,实现Linux下LED驱动!
如果要实现一个设备的驱动,一行驱动代码都不用写,这听起来是不是天方夜谭呢?但这并不是不可实现的,因为全世界的内核开发者都非常热心,只要是能写的驱动,他们基本都已经写了。今天,我们就站在巨人的肩膀上,利用内核开发者已经写好的驱动来实现我们想要的功能,本篇讨论的是LED驱动。原创 2023-04-13 21:54:58 · 502 阅读 · 0 评论 -
Linux驱动——debugfs接口创建
上篇介绍了procfs接口的创建,今天再介绍一种debugfs接口的创建。实现效果:在`/sys/kernel/debug/`目录下创建一个`ion/test`文件,通过`cat`、`echo`的方式进行读写操作。前期准备 :内核配置打开debugfs:CONFIG_DEBUG_FS=y。挂载debugfs文件系统:mount -t debugfs none /sys/kernel/debug原创 2023-04-05 22:17:34 · 552 阅读 · 0 评论 -
Linux驱动——sysfs接口创建
在一些linux开发板中,经常可以看到通过echo的方式控制硬件,例如:灯灭 echo 0 > / sys / class / leds / firefly : blue : power / brightness 。这是怎么做到呢?实际上,这是因为在驱动中提供了sysfs接口给用户使用,使得用户可以通过cat或者echo命令来查看和修改驱动中某些变量的值。下面介绍驱动中创建sysfs接口的方法。原创 2023-04-05 21:52:27 · 695 阅读 · 0 评论 -
Linux reset子系统和驱动实例
注册reset驱动时,需要分配一个struct reset_controller_dev结构体,然后填充成员,最后将该结构体注册。时钟和复位是两个不同的驱动,但通常都是由负责clock驱动的人,把reset驱动完成。struct reset_control结构体表示一个reset句柄,驱动中使用reset API,需要先获取reset句柄。类似于clock驱动,reset驱动也是编进内核的,在Linux启动时,完成reset驱动的加载。 reset提供者,即reset驱动。函数注册reset设备。原创 2023-04-05 21:43:43 · 1443 阅读 · 0 评论 -
Linux clock子系统及驱动实例
在Linux驱动中,操作时钟只需要简单调用内核提供的通用接口即可,clock驱动通常是由芯片厂商开发的,在Linux启动时clock驱动就已经初始化完成。本篇介绍Linux clock子系统以及clock驱动的实现。原创 2023-02-12 09:41:47 · 3812 阅读 · 1 评论