大总结:诊断小系统搭建步骤总结--Apple的学习笔记的剩余问题2中,我说过要深入下socketCAN内核源码学习。因为这个小项目关于驱动开发太顺利了,导致学习不到什么东东。最主要我一开始走了捷径,看了TI官网资料,特别是如何配置menuconfig,导致一把配成功。而今天要学习的是缩小范围进行某个内核的源码分析方法。

目标:

那么我今天就按相对标准的驱动开发流程去研究一个问题,就是socketCAN是否存在busoff自恢复的功能,还是我需要在应用层调用某些API来处理。

步骤1:通过看help来配置menu config

看Document/driver/can.rst来学习socketCAN的所有内容,我之前主要看了c_can.txt。其实这个rst中就有告知socketCAN的功能,以及配置项的主要范围,还包括驱动c代码的路径,另外can_send函数作为发送函数也在此文档中能找到。还有很多应用开发API调用举例。另外menu config中可以搜索关键字can来知道要配置哪些项

第一步就是通过看此help来知道我要使用socketCAN驱动需要配置哪些项。net/can/raw.c就提示了can文件夹中的Kconfig可以打开看,此路径下makefile也可以打开看,对应不同的配置,哪些c代码被编译。目的是定位和缩小搜索范围。

最终找的socketCAN相关的c文件路径

路径1:

\Linux\kernel\linux-4.19.59\linux-4.19.59\net\can

路径2:

\Linux\kernel\linux-4.19.59\linux-4.19.59\drivers\net\can

路径3:

\Linux\kernel\linux-4.19.59\linux-4.19.59\drivers\net\can\c_can

步骤2:找到底层CAN收发函数及can与socket的函数连接关系

搜索各个c文件的xxx_ops的上下链路上的连接函数。可以通过我已经在help中看到的can_send来反推。也可以在raw.c中搜索关键字_ops。

第二步的时候,我在网上搜索了下《对Socket CAN的理解》(1)-(5)系列,作者描述的很好。我又开始走捷径了哈~看到了napi_schedule函数想起来之前看过的linux中断机制。对Socket CAN的理解(3)——【Socket CAN发送数据流程】

但是没有看到busoff恢复。

步骤3:快速搜索busoff关键字

对整个数据流大概搞清楚后,搜索关键字bus off,最后发现socketCAN支持busoff自动恢复。但是我偷懒不调试了,因为定位已经很精准了。就算将来自恢复功能不正常或未启动,调试定位也很容易了。代码如下

dd86f71ee12a

image.png

结论:

socketCAN带有busoff自恢复功能。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐