Driver
文章平均质量分 73
驱动
Li-Yongjun
这个作者很懒,什么都没留下…
展开
-
PHY 寄存器读写工具(mii-tool、phytool、mdio-tool、phyreg)
PHY 寄存器读取工具原创 2024-12-04 01:08:23 · 582 阅读 · 0 评论 -
内核模块签名验证
内核模块签名验证受 CONFIG_MODULE_SIG 内核编译选项控制原创 2024-11-27 23:26:13 · 294 阅读 · 0 评论 -
字符设备驱动编写
每一个主设备号(major) 对应 /proc/devices 下的一个设备,使用 register_chrdev() 创建。每一个次设备号(minor) 对应 /dev/ 下的一个设备文件,使用 mknod 或 device_create() 创建。原创 2024-03-15 21:45:00 · 1046 阅读 · 0 评论 -
ARM Linux DIY(十二)NES 游戏
我们 DIY 的板子具备屏幕、扬声器、USB Host(可以接游戏手柄),当然也要凑一凑热闹。原创 2023-09-13 23:15:34 · 1375 阅读 · 3 评论 -
ARM Linux DIY(十)LRADC 按键
有时 ARM SOC 需要三五个按键,这时候 LRADC 就是一个不错的选择,它使用一个引脚,就可以扩展几个到几十个按键。原创 2023-09-07 21:56:12 · 1167 阅读 · 0 评论 -
ARM Linux DIY(九)陀螺仪调试
一开始使用内核自带的 IIO 驱动,发现只能在 /sys/ 目录下读取相应的坐标值,读取 /dev/iio:device0 有问题,并且需要配置中断引脚才能编译通过。所以就不使用内核自带的驱动了。网上找了个 6050 的驱动。原创 2023-09-07 21:40:31 · 716 阅读 · 0 评论 -
ARM Linux DIY(八)USB 调试
USB 电路简单,只有两根线 D+、D-,器件也简单,就一个 USB 母座,甚至连电阻电容都不需要,其它外设如果也能像 USB 这样就好了。原创 2023-09-06 00:37:05 · 1566 阅读 · 0 评论 -
ARM Linux DIY(七)麦克风调试
焊接:咪头、电阻、电容原创 2023-09-03 14:38:33 · 425 阅读 · 0 评论 -
ARM Linux DIY(六)音频调试
对于 SOC 来讲很简单,就一个引脚 HPOUTL(单声道);对于扬声器来讲也很简单,就两个引脚,插上就可以了。另外一个关键点是电容和电阻要焊到位,有没有噪音,音质好坏,全屏电容电阻打下手。原创 2023-09-01 00:12:39 · 1101 阅读 · 1 评论 -
ARM Linux DIY(五)摄像头调试
阶段一:设备树、驱动、硬件;阶段二:应用程序、测试原创 2023-08-31 00:32:53 · 1455 阅读 · 0 评论 -
ARM Linux DIY(四)WiFi 调试
小时候,给电视机安装摇头天线;长大后,给 WiFi 手搓天线。原创 2023-08-26 21:49:41 · 1743 阅读 · 1 评论 -
ARM Linux DIY(三)板载串口和 LCD 调试
发现上电后匹配的是 panel-sitronix-st7789v 这份驱动,那就禁用此启动,换下面的试试,结果还真可以,上电后屏幕直接就显示启动 log 了。原创 2023-08-23 23:21:56 · 1481 阅读 · 4 评论 -
树莓派使用 ENC28J60
一些老的、Mini 的 ARM 开发板上没有预留网口,这样在调试升级内核或应用程序时很不方便。纵使有串口下载工具,但其速度也是慢地捉急。这种情况下,使用其它接口来扩展出一个网口无疑是一个比较好的方法。ENC28J60 就是一个使用 SPI 接口来扩展网口的模块,今天我们就来演示下在树莓派上如何使用 ENC28J60。原创 2023-08-13 03:31:01 · 955 阅读 · 0 评论 -
per-cpu 变量
per-cpu 变量是 2.6 内核的一个有趣特性。当建立一个 per-cpu 变量时,系统中的每个处理器都会拥有该变量的特有副本。这看起来很奇怪,但它有其优点。对 per-cpu 变量的访问(几乎)不需要锁定,因为每个处理器在其自己的副本上工作。per-cpu 变量还可以保存在对应处理器的高速缓存中,这样,就可以在频繁更新时获得更好的性能。原创 2023-07-22 23:00:04 · 1051 阅读 · 0 评论 -
CMA
CMA 全称叫做 continuous memory allocator,它是为了便于进行连续物理内存申请的一块区域,一般我们把这块区域定义为 reserved-memory。原创 2023-07-04 01:33:28 · 1251 阅读 · 0 评论 -
RTC
总结就是,file_operations 看名字带个 file 就知道,操作 /dev/rtc 文件,就会最终调用其 hook 函数。而在 file_operations 的各个 hook 函数中,我们想要实现的是 RTC 功能,所以就要借助 RTC 相关的功能函数来完成任务,这些 RTC 的功能函数就是 rtc_class_ops。原创 2023-06-16 02:53:31 · 1534 阅读 · 0 评论 -
pinctrl 子系统
pinctrl 只能用来实现引脚初始化,包括执行 probe() 之前,或者设备形态发生变化时。总之,是个一次性的概念,如果想反复控制某个引脚,或者操作一个引脚保持低电平一段时间,就不能用 pinctrl 了,还是要用 dts 定义引脚,代码中读取然后使用,如前面例子中的 phy-reset-gpios 引脚。原创 2023-06-14 23:57:54 · 1348 阅读 · 0 评论 -
iCache && dCache
L1 Cache 比较特殊,每个 CPU 会有两个 L1 Cache,分别为 iCache(指令高速缓存,Instruction Cache)和 dCache(数据高速缓存,Data Cache)。L2 和 L3 一般不区分指令和数据,可以同时缓存指令和数据。原创 2023-06-14 02:08:44 · 3216 阅读 · 0 评论 -
使用 Pins_Tool_for_i.MX_Processors 生成设备树代码
刚打开 Pins_Tool_for_i.MX_Processors 软件时,映入眼帘的就是一颗完整的 SOC 底部引脚,和芯片实体一致。这样,操作这款软件,就像在盘这颗芯片,更直接,更带感、更接地气、更有动力。也可以帮助使用者更加彻底地了解芯片。原创 2023-06-11 23:25:02 · 1180 阅读 · 1 评论 -
IMX6ULL PHY 芯片驱动
该 of 函数想要从设备树中获取 "phy-reset-gpios" 引脚,很显然这里是获取不到的,因为设备树中没有配置。原创 2023-06-06 22:09:44 · 2198 阅读 · 1 评论 -
设备描述符
这就是设备描述符,它和 Spec 中的 Table 9-8 是一一对应的。原创 2023-05-28 14:03:43 · 1682 阅读 · 0 评论 -
linux设备号——常见设备的主次设备号
常见设备的主设备号原创 2023-05-25 00:57:33 · 5917 阅读 · 0 评论 -
objdump -d -l
objdump 来定位出错代码位置原创 2023-02-22 23:35:35 · 206 阅读 · 0 评论 -
addr2line
使用 addr2line 定位代码位置原创 2023-02-22 23:31:45 · 332 阅读 · 0 评论 -
如何编译出带有调试信息的内核模块
EXTRA_CFLAGS = -g原创 2023-02-22 23:17:17 · 1608 阅读 · 0 评论 -
无线网卡收包流程
无线网卡把帧 DMA 到内存的 Ring Buffer原创 2022-12-11 22:23:34 · 1777 阅读 · 0 评论 -
Linux /proc/iomem 与 /proc/ioports
我们常说的内存条和物理内存是不一样的,物理内存是指物理地址空间 ,内存条只是映射到这个地址空间的一部分,其余的还有各种PCI设备,IO端口。转载 2022-12-05 12:32:00 · 458 阅读 · 0 评论 -
PCI 驱动编程基础
这个 "PCI 驱动" 几乎不具备任何实际能力,这里仅作为一个演示,带领大家步入 PCI 驱动的大门。原创 2022-12-04 16:33:41 · 1719 阅读 · 1 评论 -
I2C、SPI、CAN、PCIe 对比
在社会上,靠身份证号,来唯一标识一个人。在计算机的世界里,通过什么来唯一标识一个外设呢?方案还不止一种。原创 2022-12-04 15:00:57 · 2722 阅读 · 1 评论 -
中断下半部之 tasklet
tasklet 是利用软中断实现的一种下半部机制。选择到底是使用软中断还是 tasklet 其实很简单:通常你应该用 tasklet。原创 2022-11-21 00:20:02 · 342 阅读 · 1 评论 -
中断下半部之 work queue
把 work 添加到一个链表 worklist 中,然后由一个内核线程 worker 遍历链表,串行地执行挂入worklist 中的所有 work。原创 2022-11-19 22:41:16 · 433 阅读 · 1 评论 -
树莓派按键控制LED(中断方式)
对于一个 GPIO,系统应该做的第一件事情就是通过 gpio_request() 函数分配它。申请 GPIO 的作用类似一种锁机制。原创 2022-11-18 22:02:57 · 2124 阅读 · 1 评论 -
树莓派 3b+ 没有 /dev/i2c-*
通过上面这点,就能明白,I2C 控制器 及其 驱动,I2C 外设 及其 驱动,的区别与联系了。原创 2022-11-06 21:27:52 · 2082 阅读 · 2 评论 -
树莓派不取 SD 卡更新 kernel 和 dtb
原理其实很简单,就是将 zImage 和 dtb 所在的分区**挂载**到系统目录,然后替换其中文件。原创 2022-11-06 20:22:13 · 688 阅读 · 0 评论 -
bus_type、device、device_driver
当 bus 中的 devices 注册进去的时候,它会扫 drivers 的链表,当 drivers 注册进去的时候,它会扫 devices 的链表。进行一个 name 匹配,这就是 bus 管理 devices 和 drivers 的核心。原创 2022-08-19 20:09:40 · 720 阅读 · 0 评论 -
kobject 和 sysfs
若想在内核中实现智能的电源管理,就需要来建立表示系统中设备拓扑关系的树结构。原创 2022-08-16 21:46:00 · 340 阅读 · 0 评论 -
统计内核代码运行时间
ktime_get() 能够精确到纳秒级。原创 2022-08-11 22:56:29 · 2258 阅读 · 0 评论 -
内核动态打印
能够让程序员控制只打印某个文件、某个模块、某个函数的调试信息。原创 2022-08-11 00:31:52 · 1297 阅读 · 2 评论 -
dump_stack()
dump_stack() 能够提高我们分析代码的效率。原创 2022-08-10 22:22:40 · 1221 阅读 · 5 评论 -
Pinctrl 子系统简介
一个引脚的所有复用功能,都帮你枚举出来了,你只要挑选使用哪一种就行了,不需要自己拿着数据手册去计算了,如果你不放心,可以和数据手册对照一下。所以 Linux 驱动框架从一定程度上帮助开发人员阅读了一部分数据手册,减轻了开发人员的工作量,提高了编码质量。............原创 2022-08-07 11:37:24 · 341 阅读 · 0 评论
分享