最近在做嵌入式linux,里面有CAN的数据传输。
不是很懂,发帖问各位大侠。
/dev/下面 没有can0,can1...can14等设备,如何创建?听说这个和cpu或板子的参数有关系。
处理器是:TI -Sitara AM3517 Coretex-A8 processor 600 MHz 板子是adlink的sp860,http://www.adlinktech.com/PD/web/PD_detail.php?cKind=&pid=1075
是mknod吗?主参数和副参数怎么看?
还有板子厂家已经提供了can的一些工具,如 ip,candump,cansend等
厂家资料里给了些命令
./ip link set can0 type can bitrate 9600 triple-sampling on loopback on
./ip link set can0 up
也不清楚是干什么的,我们要写一个so在python里用,没有can0等设备无法open和传输。
另外:现在基本不懂这方面,也缺少资料学习,是否有讲此的学习材料链接。
------解决方案--------------------
厂家资料里给了些命令
./ip link set can0 type can bitrate 9600 triple-sampling on loopback on
./ip link set can0 up
设置can的属性
------解决方案--------------------
配置内核的时候相关驱动选上应该会自动产生CAN0的,我最近也在搞CAN通讯 但CAN1 CAN2 CAN3...那些我也不知道怎么产生的
------解决方案--------------------
我看你是在做移植,你可以在/proc下面的网络设备中找,找到对应CAN0 CAN1 ....对应的主从设备号,然后mknod,你要是有内核源代码可以直接看代码,./ip link set can0 type can bitrate 9600 triple-sampling on loopback on是设置波特率,等属性,CAN设备必须在相同的波特率下才能进行通信。这个你可以看芯片手册。里面有波特率与几个段的计算方法(在编译内核时候有一个选项,可以让内核自动计算,或自己设置),当时和不同的CAN设备通信,计算这几个段郁闷了一段时间。CAN驱动现在分两类,一类是以socket方式调用,一类是传统的字符驱动,其实CAN0 CAN1 相当于eth0 eth2 差不多。
------解决方案--------------------
产生can0设备,要看源码是编译成模块吗?还是直接编译进内核了,若是模块就要先加载模块,然后再mknod,看是字符设备还是块设备。若直接编译进内核应该能找到设备的。看看dev/block/下有没有。
------解决方案--------------------
你把socketcan的驱动都加进去,我记得还是不少的,内核里面应该有关联的,需要选择socketcan,还有你需要打开ifconfigure can0 up吧,才可以看到。
can0/ can14的名称我不知道怎么产生的,一般不需要我们指定,socketcan里面会根据总线顺序生产can 设备的名称,从can0 ... 到n,
can是双向通信的,你硬件上是有一个can,还是有俩个,如果是一个的话,俩个可以名称一样,即可以输入也可以输出,如果是俩个的话,还是按系统给定的名称来分配输入和输出,要么不知道可以不可以硬-软链接?
------解决方案--------------------
没作过这方面的, 以下为个人猜测:
如果你按照上面3步可以生成 can0 那把代码中的can0改成can1 不能生成can1?
你用 ifconfig -a 看下呢? 有可能是没有up .
对于你基本概念的问题:
1, 不论/dev/XX 还是 socketcan 都只是与设备驱动通信的方式罢了, 前面是字符型,后面是网络型,
只要你输出给仪器端的接口不变, 则仪器端就不用改动。
3,对于编译选项, 你可以多看下每个HELP, 既然网上有参考,就编进去试下呗