Canutils是基于GNU GPLv2许可的开源代码,包括canconfig、canecho、cansend、candump、cansequence五个工具,用于检测和监控Socket CAN接口。
下载源码:http://www.pengutronix.de/software/socket-can/download/canutils ,下载最新版本canutils 4.0.6;
因为编译canutils需要libsocketcan库支持,下载libsocketcan:http://www.pengutronix.de /software/libsocketcan/download/,下载最新版本libsocketcan 0.0.11,因为以前版本不支持交叉编译工具aarch64-linux-gnu,故下载最新版本。
libsocketcan移植
把libsocketcan-0.0.11.tar.bz2拷贝到/home/zh/tools,使用tar -xvf libsocketcan-0.0.11. tar.bz2源码,然后在tools工具目录下,建立一个目录test,用于存放目标文件。执行configure命令。(其中--host是指定交叉工具链,--prefix是指定库的生成位置)注意arm-linux-gnueabihf工具后面不要加-gcc了。
./configure --host=arm-linux-gnueabihf --prefix=/home/zh/tools/test
其配置结果如下图所示。
然后执行make,进行编译;
执行make install,libsocketcan编译完成。
查看test目录下,生成了几个目录文件,分别为include lib share文件。到此libsocketcan完成了。
canutils移植
下载源码后,输入tar -xvf canutils-4.0.6.tar.bz2解压,进入解压目录,同时也建立一个目录canutils,存放输出文件。
执行configure命令。(其中--host是指定交叉工具链,--prefix是指定库的生成位置,libsocketcan_LIBS是指定canconfig需要链接的库,LDFLAGS是指定外部库的路径,CPPFLAGS是指定外部头文件的路径)
./configure --host=arm-linux-gnueabihf --prefix=/home/zh/tools/canutils libsocketcan_LIBS=-lsocketcan LDFLAGS=-L/home/zh/tools/test/lib libsocketcan_CFLAGS=-I/home/zh/tools/test/include CFLAGS=-I/home/zh/tools/test/include
其配置结果如下图所示。
执行make,结果如下图所示。
执行make install,结果如下图所示。
/home/zh/tools/canutils下生成四个目录,分别拷贝到开发板文件系统的相应目录。
sudo cp lib/* /home/zh/linux/nfs/rootfs/usr/lib/ -rfa
sudo cp bin/* /home/zh/linux/nfs/rootfs/usr/bin/ -rfa
sudo cp sbin/* /home/zh/linux/nfs/rootfs/usr/sbin/ -rfa
sudo cp share/* /home/zh/linux/nfs/rootfs/usr/share/ -rfa
iproute2移植
完成拷贝后,输入candump canecho cansend cansequence 进行测试,发现还没有启动CAN,需要ip link set can0 up type can bitrate 800000之类的命令配置参数,但是ip这样配置,提示没有这命令, 发现原来内核中的ip工具并不能对can进行设置,究其原因是因为/sbin下的ip工具太老了,需要进行替换。这个相对来说比较简单,网上下一个iproute2工具编译,拷贝生成的ip工具到/sbin下替换掉原来的就可以了。需要注意的是网上下载的很多源码可能不能正常编译过,这可能是源码本身的问题,我尝试编译了几个,发现 http://www.linuxgrill.com/anonymous/iproute2/NEW-OSDL/ 连接下的iproute2- 2.6.39版本的是可以一次性编译通过的。
下载源码后,
1.修改Makefile中的CC = arm-linux-gnueabihf-gcc (自己buildroot生成的交叉编译工具链,如果没有进行交叉编译工具链的全局配置,需要加上绝对路径)。
2.因为我们只需要ip工具,所以SUBDIRS = lib ip (源码中默认的还会生成其它工具)。
3.make最后编译成功后在进入到源码目录下的ip目录可以发现有一个生成的ip(这就是个可执行的二进制文件ip工具),将该文件拷贝到开发板的/sbin目录下替换原来的ip即可。
测试ip命令,结果如下图所示:
ip link set can0 up type can bitrate 500000,设置can0波特率为800k
ip -details link show can0 查看can0详细信息,发现can0 设置为500k和预设一致