
Driver
文章平均质量分 71
驱动
Li-Yongjun
这个作者很懒,什么都没留下…
展开
-
Ubuntu 下 r8168 网卡问题排查与解决
lspci 显示网卡型号是 RTL8111/8168/8411,而 Ubuntu 自动安装的驱动是 r8169,问题在这。原创 2024-12-11 02:55:31 · 607 阅读 · 0 评论 -
PHY 寄存器读写工具(mii-tool、phytool、mdio-tool、phyreg)
PHY 寄存器读取工具原创 2024-12-04 01:08:23 · 3084 阅读 · 0 评论 -
内核模块签名验证
内核模块签名验证受 CONFIG_MODULE_SIG 内核编译选项控制原创 2024-11-27 23:26:13 · 649 阅读 · 0 评论 -
字符设备驱动编写
每一个主设备号(major) 对应 /proc/devices 下的一个设备,使用 register_chrdev() 创建。每一个次设备号(minor) 对应 /dev/ 下的一个设备文件,使用 mknod 或 device_create() 创建。原创 2024-03-15 21:45:00 · 1143 阅读 · 0 评论 -
树莓派使用 ENC28J60
一些老的、Mini 的 ARM 开发板上没有预留网口,这样在调试升级内核或应用程序时很不方便。纵使有串口下载工具,但其速度也是慢地捉急。这种情况下,使用其它接口来扩展出一个网口无疑是一个比较好的方法。ENC28J60 就是一个使用 SPI 接口来扩展网口的模块,今天我们就来演示下在树莓派上如何使用 ENC28J60。原创 2023-08-13 03:31:01 · 1073 阅读 · 0 评论 -
per-cpu 变量
per-cpu 变量是 2.6 内核的一个有趣特性。当建立一个 per-cpu 变量时,系统中的每个处理器都会拥有该变量的特有副本。这看起来很奇怪,但它有其优点。对 per-cpu 变量的访问(几乎)不需要锁定,因为每个处理器在其自己的副本上工作。per-cpu 变量还可以保存在对应处理器的高速缓存中,这样,就可以在频繁更新时获得更好的性能。原创 2023-07-22 23:00:04 · 1116 阅读 · 0 评论 -
CMA
CMA 全称叫做 continuous memory allocator,它是为了便于进行连续物理内存申请的一块区域,一般我们把这块区域定义为 reserved-memory。原创 2023-07-04 01:33:28 · 1372 阅读 · 0 评论 -
RTC
总结就是,file_operations 看名字带个 file 就知道,操作 /dev/rtc 文件,就会最终调用其 hook 函数。而在 file_operations 的各个 hook 函数中,我们想要实现的是 RTC 功能,所以就要借助 RTC 相关的功能函数来完成任务,这些 RTC 的功能函数就是 rtc_class_ops。原创 2023-06-16 02:53:31 · 1618 阅读 · 0 评论 -
pinctrl 子系统
pinctrl 只能用来实现引脚初始化,包括执行 probe() 之前,或者设备形态发生变化时。总之,是个一次性的概念,如果想反复控制某个引脚,或者操作一个引脚保持低电平一段时间,就不能用 pinctrl 了,还是要用 dts 定义引脚,代码中读取然后使用,如前面例子中的 phy-reset-gpios 引脚。原创 2023-06-14 23:57:54 · 1404 阅读 · 0 评论 -
iCache && dCache
L1 Cache 比较特殊,每个 CPU 会有两个 L1 Cache,分别为 iCache(指令高速缓存,Instruction Cache)和 dCache(数据高速缓存,Data Cache)。L2 和 L3 一般不区分指令和数据,可以同时缓存指令和数据。原创 2023-06-14 02:08:44 · 3788 阅读 · 0 评论 -
使用 Pins_Tool_for_i.MX_Processors 生成设备树代码
刚打开 Pins_Tool_for_i.MX_Processors 软件时,映入眼帘的就是一颗完整的 SOC 底部引脚,和芯片实体一致。这样,操作这款软件,就像在盘这颗芯片,更直接,更带感、更接地气、更有动力。也可以帮助使用者更加彻底地了解芯片。原创 2023-06-11 23:25:02 · 1349 阅读 · 1 评论 -
IMX6ULL PHY 芯片驱动
该 of 函数想要从设备树中获取 "phy-reset-gpios" 引脚,很显然这里是获取不到的,因为设备树中没有配置。原创 2023-06-06 22:09:44 · 2510 阅读 · 1 评论 -
设备描述符
这就是设备描述符,它和 Spec 中的 Table 9-8 是一一对应的。原创 2023-05-28 14:03:43 · 1721 阅读 · 0 评论 -
linux设备号——常见设备的主次设备号
常见设备的主设备号原创 2023-05-25 00:57:33 · 6760 阅读 · 0 评论 -
objdump -d -l
objdump 来定位出错代码位置原创 2023-02-22 23:35:35 · 245 阅读 · 0 评论 -
addr2line
使用 addr2line 定位代码位置原创 2023-02-22 23:31:45 · 366 阅读 · 0 评论 -
如何编译出带有调试信息的内核模块
EXTRA_CFLAGS = -g原创 2023-02-22 23:17:17 · 1854 阅读 · 0 评论 -
无线网卡收包流程
无线网卡把帧 DMA 到内存的 Ring Buffer原创 2022-12-11 22:23:34 · 1968 阅读 · 0 评论 -
Linux /proc/iomem 与 /proc/ioports
我们常说的内存条和物理内存是不一样的,物理内存是指物理地址空间 ,内存条只是映射到这个地址空间的一部分,其余的还有各种PCI设备,IO端口。转载 2022-12-05 12:32:00 · 614 阅读 · 0 评论 -
PCI 驱动编程基础
这个 "PCI 驱动" 几乎不具备任何实际能力,这里仅作为一个演示,带领大家步入 PCI 驱动的大门。原创 2022-12-04 16:33:41 · 1914 阅读 · 1 评论 -
I2C、SPI、CAN、PCIe 对比
在社会上,靠身份证号,来唯一标识一个人。在计算机的世界里,通过什么来唯一标识一个外设呢?方案还不止一种。原创 2022-12-04 15:00:57 · 3198 阅读 · 1 评论 -
中断下半部之 tasklet
tasklet 是利用软中断实现的一种下半部机制。选择到底是使用软中断还是 tasklet 其实很简单:通常你应该用 tasklet。原创 2022-11-21 00:20:02 · 383 阅读 · 1 评论 -
中断下半部之 work queue
把 work 添加到一个链表 worklist 中,然后由一个内核线程 worker 遍历链表,串行地执行挂入worklist 中的所有 work。原创 2022-11-19 22:41:16 · 463 阅读 · 1 评论 -
树莓派按键控制LED(中断方式)
对于一个 GPIO,系统应该做的第一件事情就是通过 gpio_request() 函数分配它。申请 GPIO 的作用类似一种锁机制。原创 2022-11-18 22:02:57 · 2274 阅读 · 1 评论 -
树莓派 3b+ 没有 /dev/i2c-*
通过上面这点,就能明白,I2C 控制器 及其 驱动,I2C 外设 及其 驱动,的区别与联系了。原创 2022-11-06 21:27:52 · 2354 阅读 · 2 评论 -
树莓派不取 SD 卡更新 kernel 和 dtb
原理其实很简单,就是将 zImage 和 dtb 所在的分区**挂载**到系统目录,然后替换其中文件。原创 2022-11-06 20:22:13 · 737 阅读 · 0 评论 -
bus_type、device、device_driver
当 bus 中的 devices 注册进去的时候,它会扫 drivers 的链表,当 drivers 注册进去的时候,它会扫 devices 的链表。进行一个 name 匹配,这就是 bus 管理 devices 和 drivers 的核心。原创 2022-08-19 20:09:40 · 798 阅读 · 0 评论 -
kobject 和 sysfs
若想在内核中实现智能的电源管理,就需要来建立表示系统中设备拓扑关系的树结构。原创 2022-08-16 21:46:00 · 363 阅读 · 0 评论 -
统计内核代码运行时间
ktime_get() 能够精确到纳秒级。原创 2022-08-11 22:56:29 · 2595 阅读 · 0 评论 -
内核动态打印
能够让程序员控制只打印某个文件、某个模块、某个函数的调试信息。原创 2022-08-11 00:31:52 · 1451 阅读 · 2 评论 -
dump_stack()
dump_stack() 能够提高我们分析代码的效率。原创 2022-08-10 22:22:40 · 1303 阅读 · 5 评论 -
Pinctrl 子系统简介
一个引脚的所有复用功能,都帮你枚举出来了,你只要挑选使用哪一种就行了,不需要自己拿着数据手册去计算了,如果你不放心,可以和数据手册对照一下。所以 Linux 驱动框架从一定程度上帮助开发人员阅读了一部分数据手册,减轻了开发人员的工作量,提高了编码质量。............原创 2022-08-07 11:37:24 · 370 阅读 · 0 评论 -
debugfs
为了让开发人员更轻松地实现调试,内核提供了 debugfs,这是一个致力于调试信息的虚拟文件系统原创 2022-07-12 01:13:11 · 761 阅读 · 0 评论 -
ubuntu14.04 AR5B22 无线网卡连不上 AP 问题解决
原来是 wpa_supplicant 进程的问题。原创 2022-07-05 13:22:20 · 2082 阅读 · 1 评论 -
insmod 报错 Invalid module format
添加 -C /lib/modules/`uname -r`/build 选项原创 2022-03-08 22:12:44 · 864 阅读 · 0 评论 -
ping data-path
应用层 --> 内核 --> 硬件原创 2022-02-18 23:37:27 · 493 阅读 · 0 评论 -
USB网卡收发数据分析
网络的软硬件设施,其目的的本质,不就是传输数据帧吗?那么,在这个过程中,缓存数据帧的 sk_buff,就很重要了。原创 2022-02-13 00:18:16 · 3186 阅读 · 8 评论 -
嵌入式 Linux 按键驱动
设备树与驱动如何匹配?原创 2021-12-21 23:17:26 · 4009 阅读 · 0 评论 -
内核驱动最简demo
用户空间命令 insmod 和 rmmod 使用内核空间的函数 module_init 和 module_exit原创 2021-12-20 22:22:02 · 2880 阅读 · 0 评论 -
Linux内核驱动编写
# 前言开发过单片机的小伙伴可以看下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。# 正文用户空间的每个函数(用于使用设备或者文件的),在内核空间中都有一个对应的功能相似并且可将内核的信息向用户空间传递的函数。下表为几种设备驱动事件和它们在内核和用户空间对应的接口函数。事件(Events)用户函数(User function...原创 2020-04-04 22:40:16 · 51442 阅读 · 0 评论