linux的can通信busoff,socketCAN内核源码分析是否支持busoff自恢复--Apple的学习笔记

大总结:诊断小系统搭建步骤总结--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自恢复功能。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值