Linux驱动开发
文章平均质量分 62
整理和学习linux相关知识
lqonlylove
这个作者很懒,什么都没留下…
展开
-
Linux 驱动开发 六十七:Linux 网络子系统
linux 网络子系统原创 2023-01-19 17:55:59 · 225 阅读 · 0 评论 -
Linux 驱动开发 六十六:多点触控(MT)协议
多点触控(MT)协议原创 2022-11-19 11:35:48 · 3127 阅读 · 6 评论 -
Linux 驱动开发 六十五:《kconfig-language.txt》翻译
《kconfig-language.txt》翻译原创 2022-11-13 12:47:58 · 470 阅读 · 0 评论 -
Linux 驱动开发 六十四:《pwm-backlight.txt》翻译
《pwm-backlight.txt》翻译原创 2022-10-17 21:27:30 · 499 阅读 · 0 评论 -
Linux 驱动开发 六十三:《display-timing.txt》翻译
《display-timing.txt》文档翻译原创 2022-10-17 20:36:57 · 1227 阅读 · 0 评论 -
Linux 驱动开发 六十二:《mxsfb.txt》翻译
飞思卡尔MXS液晶接口驱动文档翻译原创 2022-10-17 20:34:39 · 288 阅读 · 0 评论 -
Linux 驱动开发 六十一:《gpio-keys.txt》翻译
属性中的任何一个,但不能同时忽略两者。允许同时指定这两个属性。键盘驱动进程的设备树绑定。每个按钮(键)都表示为。原创 2022-10-15 17:30:11 · 658 阅读 · 0 评论 -
Linux 驱动开发 六十:《input.txt》翻译
这是一个驱动进程集合,旨在支持Linux下的所有输入设备。虽然它目前仅用于USB输入设备,但未来的使用(例如2.5 / 2.6)预计将扩展到取代大多数现有的输入系统,这就是为什幺它位于而不是中的原因。输入驱动器的中心是输入模块,它必须在任何其他输入模块之前加载 - 它用作两组模块之间的通信方式:1、设备驱动进程这些模块与硬件通信(例如通过USB),并向输入模块提供事件(击键、鼠标移动)。2、事件处理进程这些模块从输入中获取事件,并通过各种接口将它们传递到需要的地方 - 击键到内核,鼠标通过模拟的。原创 2022-10-15 17:27:40 · 613 阅读 · 0 评论 -
Linux 驱动开发 五十九:《common.txt》翻译
《common.txt》翻译原创 2022-10-10 21:06:18 · 559 阅读 · 0 评论 -
Linux 驱动开发 五十八:《leds-gpio.txt》翻译
《leds-gpio.txt》翻译原创 2022-10-10 21:04:58 · 558 阅读 · 0 评论 -
Linux 驱动开发 五十七:《ioctl-decoding.txt》翻译
大多数架构使用这种通用格式,但请检查 include/ARCH/ioctl.h 以了解具体情况,例如 powerpc 使用 3 位编码读/写和 13 位大小。因此,例如 0x82187201 是 arg 长度为 0x218 的读取,字符 ‘r’ ,命令 1。原创 2022-10-01 10:49:29 · 369 阅读 · 0 评论 -
Linux 驱动开发 五十六:《ioctl-number.txt》翻译
如果您正在为新设备编写驱动程序并且需要一个字母,请选择一个具有足够扩展空间的未使用块:32 到 256 个。这没关系,只要它是唯一的。有些设备是不规则的,根本不遵循任何惯例。的第一个参数是下表中的标识字母或数字。“写”和“读”是从用户的角度来看的,就像系统调用“写”和“读”一样。5、当遵循约定时,驱动程序代码可以使用通用代码在用户空间和内核空间之间复制参数。的大多数驱动程序,但我知道我缺少一些。的第三个参数是进入内核或从内核出来的数据的类型(例如。的第二个参数是用于区分 ioctl 的序列号。原创 2022-10-01 10:46:34 · 1453 阅读 · 0 评论 -
Linux 驱动开发 五十五:《gpio.txt》翻译
如果电路板反转 GPIO 控制器和设备之间的信号,则 gpio-specifier 将表示与设备引脚上的信号相反的物理电平。当设备的信号极性可配置时,设备的绑定必须:1、为信号定义一个。原创 2022-09-18 08:08:20 · 1239 阅读 · 0 评论 -
Linux 驱动开发 五十四:《fsl,imx-pinctrl.txt》翻译
是一组引脚中的一个节点,可用于特殊设备或功能。“mux”选择此引脚可以工作的功能模式(也称为 mux 模式),“config”配置 pad 设置,例如上拉、开漏、驱动强度等。3、驱动程序可以使用功能节点的名称和引脚配置节点的名称来描述引脚功能和组层次结构。有关客户端设备使用的常用 pinctrl 绑定的详细信息,包括短语“pin configuration node”的含义,请参阅此目录中的 pinctrl-bindings.txt。功能节点的名称应该很好地代表此引脚配置节点中的这组引脚正在执行的功能。原创 2022-09-18 08:04:44 · 645 阅读 · 0 评论 -
Linux 驱动开发 五十三:Linux 下 SPI 驱动框架
参考博客:https://blog.csdn.net/zhoutaopower/article/details/99866773https://blog.csdn.net/weixin_42262944/article/details/102944484原创 2022-02-10 00:18:22 · 319 阅读 · 0 评论 -
Linux 驱动开发 五十二:Linux RTC驱动实验
一、Linux 内核RTC驱动简介注:rtc_class_ops 具体实现由芯片厂商完成。二、I.MX6U内部 RTC驱动分析I.MX6U的 RTC 驱动我们不用自己编写,因为NXP 已经写好了。其实对于大多数的 SOC 来讲,内部 RTC 驱动都不需要我们去编写,半导体厂商会编写好。1、查找设备树 RTC 相关节点打开 imx6ull.dtsi,在里面找到如下 snvs_rtc 设备节点,节点 内容如下所示:snvs_rtc: snvs-rtc-lp { compatible = "fsl原创 2022-02-09 09:55:31 · 1210 阅读 · 0 评论 -
Linux 驱动开发 五十一:I.MX6U UART 驱动分析
通过对 NXP 维护 Linux4.1.15 源码进行分析。一、确定驱动源码思路:通过 imx6ull.dtsi 设备树文件,找到 UART 中 compatible 属性值,在驱动源码中查找相匹配驱动。打开 imx6ull.dtsi 文件,找到UART3 对应的子节点,子节点内容如下所示:uart3: serial@021ec000 { compatible = "fsl,imx6ul-uart", "fsl,imx6q-uart", "fsl,imx21-uart"; reg原创 2022-02-08 21:15:12 · 2337 阅读 · 0 评论 -
Linux 驱动开发 五十:Linux 下 UART 驱动框架
https://blog.csdn.net/zhoutaopower/article/details/99289550转载 2022-02-08 14:23:00 · 1312 阅读 · 0 评论 -
Linux 驱动开发 四十九:Linux 自带按键驱动程序
一、自带按键驱动程序源码简析Linux 内核也自带了 KEY 驱动,如果要使用内核自带的 KEY 驱动的话需要配置 Linux 内核,不过 Linux 内核一般默认已经使能了KEY驱动,但是我们还是要检查一下。按照如下路径 找到相应的配置选项:-> Device Drivers -> Input device support -> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y]) -&原创 2022-02-07 22:15:44 · 3188 阅读 · 0 评论 -
Linux 驱动开发 四十八:Linux INPUT 子系统实验
一、input 子系统简介input 就是输入的意思,因此 input 子系统就是管理输入的子系统,是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可。为此 input 子系统分为 input 驱动层、input 核心层、input 事件处理层,最终给用户空间原创 2022-02-07 21:49:00 · 977 阅读 · 0 评论 -
Linux 驱动开发 四十七:Linux input 子系统详解
https://www.cnblogs.com/yikoulinux/p/15208238.html转载 2022-02-06 14:39:24 · 126 阅读 · 0 评论 -
Linux 驱动开发 四十六:Linux MISC驱动实验
misc 的意思是混合、杂项的,因此MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动。一、MISC设备驱动简介所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux 字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解 决此问题。MISC 设备会自动创建 cdev,不需要像原创 2022-02-04 17:01:08 · 995 阅读 · 0 评论 -
Linux 驱动开发 四十五:Linux 自带的 LED灯驱动实验
传送门:https://blog.csdn.net/WANGYONGZIXUE/article/details/116449460转载 2022-02-03 17:57:20 · 255 阅读 · 0 评论 -
Linux 驱动开发 四十四:platform 设备驱动实验(二)
驱动测试通过操作 led 完成。一、原理图二、无设备树源码实现无设备树时候通过 platform_device.name 和 platform_driver.driver.name 进行匹配。1、makefileKERNELDIR := /home/onlylove/linux/linux/lq_linux/linux-imx-rel_imx_4.1.15_2.1.0_gaCURRENT_PATH := $(shell pwd)obj-m := led_device.oobj-m +=原创 2022-02-02 17:45:46 · 1210 阅读 · 0 评论 -
Linux 驱动开发 四十三:platform 设备驱动实验(一)
一、platform 基本概念整理Linux 系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件思路。因此提出驱动、总线和设备的驱动架构,总线负责管理驱动和设备。系统中有很多的物理总线:I2c、SPI、USB等,有部分设备不存在物理总线,为了驱动架构统一,因此引入 platform 虚拟总线。platform 虚拟总线用 platform_driver 结构体表示驱动,用 platform_device 结构体描述设备。对于所有设备都使用 bus_type 结构体类型。1、bus_typ原创 2022-02-02 17:26:46 · 1588 阅读 · 0 评论 -
Linux 驱动开发 四十二:Platform 平台设备驱动框架
参考博客:Linux Platform devices 平台设备驱动_漫不经心-CSDN博客_platform_device5.linux设备驱动模型_QtHalcon-CSDN博客_linux设备驱动模型【linux】驱动-7-平台设备驱动 - 李柱明 - 博客园 (cnblogs.com)Linux驱动之平台设备驱动模型简析(驱动分离分层概念的建立) - andy_fly - 博客园 (cnblogs.com)一张图掌握 Linux platform 平台设备驱动框架!【建议收藏】_火山上的.原创 2022-01-28 18:26:35 · 1367 阅读 · 0 评论 -
Linux 驱动开发 四十一:Linux 设备驱动模型
记录一些优秀文章,方便查找。linux驱动开发—— 6、linux 设备驱动模型_vincent3678的博客-CSDN博客5.linux设备驱动模型_QtHalcon-CSDN博客_linux设备驱动模型【linux】驱动-6-总线-设备-驱动 - 李柱明 - 博客园 (cnblogs.com)Linux设备驱动模型底层架构及组织方式 - 涛少& - 博客园 (cnblogs.com)Linux设备驱动之Kobject、Kset_漫不经心-CSDN博客_kobject ksetLinu原创 2022-01-23 21:42:36 · 722 阅读 · 0 评论 -
Linux 驱动开发 四十:Linux 中断(二)
一、代码实现1、原理图分析通过原理图分析可以得到,当按键按下后 KEY0 为低电平,当按键释放后 KEY0 为高电平。通过原理图可以确定 KEY0 连接在 UART1_CTS 引脚上。UART1_CTS 引脚的 IO 编号为 GPIO1_IO18。2、修改设备树1、修改 SOC 级中断属性根据《IMX6ULL参考手册》中 Chapter 3:Interrupts and DMA Events描述,具体描述如下:在 imx6ull.dtsi 源码中已经存在 gpio1 中断相关描述,不需要我们原创 2022-01-22 17:02:12 · 1672 阅读 · 0 评论 -
Linux 驱动开发 三十九:Linux 中断(一)
一、Linux 中断子系统概述参考博客:Linux中断(interrupt)子系统之一:中断系统基本原理_DroidPhone的专栏-CSDN博客_linux 中断1、设备、中断控制器和CPU一个完整的设备中,与中断相关的硬件可以划分为3类,它们分别是:设备、中断控制器和CPU本身,下图展示了一个smp系统中的中断硬件的组成结构:设备:发起中断的源,可以发起一个硬件中断信号,该信号发送到中断控制器,由中断处理器进行进一步处理。中断发起设备可能是 SOC 外(外部器件),也可能是 SOC 内(原创 2022-01-22 16:53:55 · 2393 阅读 · 0 评论 -
Linux 驱动开发 三十八:《fsl-imx-gpio.txt》翻译
文件目录:linux\Documentation\devicetree\bindings\gpio\fsl-imx-gpio.txt。一、必须属性compatible:必须为 "fsl,< soc >-gpio"。reg:设置设备的寄存器的地址和长度。interrupts:如果是 1 个数字,32 个引脚共享中断端口。如果是 2 个数字,第 1 个数字代表低 16 个引脚共享中断,第 2 个数字代表高 16 个引脚共享中断。gpio-controller:将设备节点标记原创 2022-01-14 23:38:23 · 564 阅读 · 0 评论 -
Linux 驱动开发 三十七:《gic.txt》翻译
文件目录:linux\\Documentation\devicetree\bindings\arm\gic.txt。一、ARM 通用中断控制器ARM 内核通常与一个 GIC 相关联,为每个处理器提供 PPI(外设私有中断)、SPI(公用外设中断)和 SGI(软件触发中断)。1、必须属性compatible:必须是以下选项之一 "arm,gic-400" "arm,cortex-a15-gic" "arm,cortex-a9-gic" "arm,cortex-a7-gic" "arm,a原创 2022-01-14 23:35:48 · 587 阅读 · 0 评论 -
Linux 驱动开发 三十六:Linux 中断子系统
https://blog.csdn.net/droidphone/category_1118447.html转载 2022-01-11 01:09:09 · 141 阅读 · 0 评论 -
Linux 驱动开发 三十五:Linux 内核时钟管理
参考:linux时间管理,时钟中断,系统节拍_u010936265的博客-CSDN博客_系统节拍时钟中断Linux内核时钟系统和定时器实现_anonymalias的专栏-CSDN博客_linux内核定时器实现正点原子相关手册一、概述Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序。实现思路如下:1、硬件定时器提供时钟源(配置好定时器后,周期性触发定时中断)。2、系统使用定时中断进行计时。中断周期性产生的频率就是系统频率,也叫做节拍率。系统节拍率是可以设置的,单位.原创 2022-01-03 12:23:23 · 1836 阅读 · 0 评论 -
Linux 驱动开发 三十四:Linux 内核定时器原理
参考文档:《Cortex -A7 MPCore Technical Reference Manual》 中 Chapter 9:Generic Timer。《ARM ® Architecture Reference Manual ARMv7-A and ARMv7-R edition》 中 Chapter B8:The Generic Timer。一、Chapter B8 The Generic Timer 翻译这一章节描述 ARM 通用定时器的实现,ARM 通用定时器实现对于 ARMv7-A.原创 2022-01-02 00:23:36 · 2628 阅读 · 0 评论 -
Linux 驱动开发 三十三:Linux 按键输入
以正点原子 NPX 开发板进行实验。一、原理分析通过原理图分析可以得到,当按键按下后 KEY0 为低电平,当按键释放后 KEY0 为高电平。通过原理图可以确定 KEY0 连接在 UART1_CTS 引脚上。二、修改设备树1、查找引脚是否被使用按键使用引脚如下:从设备树中查找是否 UART1_CTS 引脚:打开 imx6ull-lq-evk.dts,在 iomuxc 节点的 imx6ul-evk 子节点下创建一个名为 “pinctrl_key” 的子节点,节点 内容如下所示:2、添加原创 2021-12-30 00:00:32 · 1946 阅读 · 0 评论 -
Linux 驱动开发 三十二:Read-Copy Update
保留原创 2021-12-26 22:18:46 · 429 阅读 · 0 评论 -
Linux 驱动开发 三十一:互斥体
互斥访问表示一次只有一个线程可以访问共享资源,不能递归申请互斥体。在我们编写 Linux 驱动的时候遇到需要互斥访问的地方建议使用 mutex。Linux 内核使用 mutex 结构体表示互斥体,定义如下:struct mutex { /* 1: unlocked, 0: locked, negative: locked, possible waiters */ atomic_t count; spinlock_t wait_lock; struct list_head wait_list;原创 2021-12-26 22:15:29 · 607 阅读 · 0 评论 -
Linux 驱动开发 三十:信号量
信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。信号量就是一种睡眠锁。信号量的特点是,如果一个任务试图获取一个已经被占用的信号量,他会被推入等待队列,让其进入睡眠。此刻处理器重获自由,去执行其他的代码。当持有的信号量被释放,处于等待队列的任务将被唤醒,并获取到该信号量。信号量使用总结:1、因为信号量可以使等待资源线程进入休眠状态,因此适用于那些占用资源比较久的场合。2、因此信号量不能用于中断中,因为信号量会引起休眠,中断不能休眠。3、如果共享资源的持有时间比较短,那就不适合使用信号原创 2021-12-26 21:51:21 · 708 阅读 · 0 评论 -
Linux 驱动开发 二十九:顺序锁
顺序锁在读写锁的基础上衍生而来的,使用读写锁的时候读操作和写操作不能同时进行。使用顺序锁的话可以允许在写的时候进行读操作,也就是实现同时读写,但是不允许同时进行并发的写操作。虽然顺序锁的读和写操作可以同时进行,但是如果在读的过程中发生了写操作, 最好重新进行读取,保证数据完整性。顺序锁保护的资源不能是指针,因为如果在写操作的时 候可能会导致指针无效,而这个时候恰巧有读操作访问指针的话就可能导致意外发生,比如读取野指针导致系统崩溃。Linux 内核使用 seqlock_t 结构体表示顺序锁,定义在 /inc原创 2021-12-26 21:50:14 · 259 阅读 · 0 评论 -
Linux 驱动开发 二十八:读写锁
参考博客:Linux 内核同步(三):读-写自旋锁(rwlock)_StephenZhou-CSDN博客_linux rwlock使用 spinlock 保护临界区时,多个读之间无法并发,只能被 spin,为了提高系统的整体性能,内核定义了一种锁:允许多个处理器进程(或者线程或者中断上下文)并发的进行读操作(SMP 上),这样是安全的,并且提高了 SMP 系统的性能。在写的时候,保证临界区的完全互斥。所以,当某种内核数据结构被分为:读-写,或者生产-消费,这种类型的时候,类似这种 读-写自旋锁就原创 2021-12-26 21:05:12 · 601 阅读 · 0 评论