linux内核驱动
文章平均质量分 83
IT老兵2025
25载IT老兵,早年曾任职华为,UT斯达康等通信大厂,20年+的大型电信软硬件系统研发与项目管理实践;近5年的技术研究重点在高并发通信系统,网络安全与高效密码系统,嵌入式通信与CPU+GPU/NPU异构系统,linux内核与高性能驱动研发;近期兴趣重点在嵌入式AI语音,特别AI智能语音的应用落地。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
I2S接口应用中循环DMA收发不同步导致的随机噪声问题
摘要:某语音项目在使用I2S接口和循环DMA机制时,出现随机噪声问题。经分析发现,噪声源于I2S驱动初始化时,收发DMA通道的启动存在概率性调度时延导致时序错位而产生。通过在启动DMA时添加preempt_disable/preempt_enable保护,确保两个通道同步启动,解决了该问题。该案例表明在Linux多线程环境下,关键硬件初始化需考虑调度的时序一致性问题。(149字)原创 2025-07-28 21:40:51 · 683 阅读 · 0 评论 -
ubuntu22.04安装NVIDIA显卡驱动出错“Warning: Compiler version check failed”
基于ubuntu22.04安装NVIDIA显卡驱动中碰到问题,其失败日志提示“Warning: Compiler version check failed”。原因是系统默认安装的gcc版本为11.4.0,而近期系统进行了内核版本升级,新版本内核是基于gcc-12.3.0编译的,二者编译器版本不一致导致了显卡驱动编译失败。对应的解决方案就是升级gcc版本到gcc-12.3.0,完成gcc的版本升级和链接切换后,重新执行前述显卡驱动安装 的最后一步就可以了。原创 2025-06-04 10:42:24 · 2650 阅读 · 0 评论 -
鲲鹏服务器PCIE加速卡驱动异常问题
摘要:本文分析了某PCIE加速卡在鲲鹏服务器上出现性能异常的问题。系统日志显示list队列存在重复分配和释放的节点错误,问题仅出现在ARM64架构的鲲鹏服务器。经分析,这是由于ARM64的弱内存一致性模型和编译器优化导致指令乱序执行,使得驱动层与加速卡间队列操作不同步。通过在关键函数xx_doMsgReq和xx_instan_read中添加内存屏障mb()指令,解决了队列移位与寄存器操作间的乱序问题。该问题体现了不同CPU架构在内存模型上的差异,为ARM64平台驱动开发提供了重要参考。原创 2025-05-24 19:16:57 · 1497 阅读 · 0 评论 -
实时linux系统中的异常告警BUG: scheduling while atomic
实时linux系统日志中偶尔出现“BUG: scheduling while atomic...”异常。经过分析,发现问题源于percpu_up_read函数的不可抢占设计与实时补丁中可抢占锁机制的冲突。解决方案包括:1)局部性方案通过改造__percpu_up_read函数;2)全局性改造实时补丁中rt_spin_lock实时自旋锁函数,增加对当前cpu的抢占值preempt_count的检查。原创 2025-05-22 15:35:53 · 1057 阅读 · 0 评论 -
dpdk20.02.1 kni虚拟网卡bonding问题“BUG: scheduling while atomic“
在高性能云机项目中,使用dpdk20.02.1版本时,尝试将多个kni虚拟网卡bonding生成一个对外业务IP时,遇到了“BUG: scheduling while atomic”异常。系统日志显示,在设置kni虚拟网卡的“promiscuous”属性时,触发了内核函数调用链,导致在RCU读取临界区内尝试调度,违反了内核的原子上下文规则。解决方案有两种:一是修改dpdk kni代码,在kni_net_process_request中增加禁用抢占的判断;二是升级dpdk到21.11以上版本。原创 2025-05-15 18:31:07 · 888 阅读 · 0 评论 -
驱动压测中报错watchdog: BUG: soft lockup - CPU#5 stuck for 22s
由于上述两次原子锁调用是同一把锁(用锁保护同一个消息队列),导致了系统死锁,系统watchdog在死锁超时(这里是20s)后发出系统告警“watchdog: BUG: soft lockup - CPU#5 stuck for 22s”,同时死锁也会导致被锁"CPU#5 stuck",最终系统异常。分析清楚原因之后,对应的解决办法也很明了:将来自两个方向的请求报文分别保存到两个不同的驱动工作队列分别处理,每个队列对应一把独立的原子锁,避免前述系统日志中出现的单个原子锁因系统中断导致的重入死锁问题。原创 2025-05-14 17:14:57 · 1285 阅读 · 0 评论 -
某国产网卡linux驱动“越坑”记2
该网卡的驱动源码中的ndo_fdb_add函数实现,发现该实现函数在调用ndo_dflt_fdb_add之前对网卡设备的netdev_uc_count有最大限制判断(限定最大15个),也就是限定添加最大15个macvlan。原创 2025-05-03 17:49:42 · 294 阅读 · 0 评论 -
某国产网卡linux驱动“越坑”记1
网卡驱动对小于以太网MTU长度(通常为1500字节)的skb报文也进行了分片,“skb linear”部分中只有报文头相关信息,报文载荷全部放到了“skb frag”分片中,而我们的业务驱动代码默认认为长度小于MTU字节的报文不会分片(即没有对skb的nr_frags字段进行判断),导致出现前述报文载荷全为0的现象。原创 2025-05-02 18:24:52 · 588 阅读 · 0 评论
分享