ltp-ddt运行can_loopback时出错
pan(1881): Must supply a file collection or a command
原因runtest/ddt/can_loopback
CAN_S_FUNC_LOOPBACK_CAN0_1000000前多了一个空格
还要进行以下改动:
将do_cmd "cansequence -p $interface &"; suspend -i 10 -p "mem";改为
do_cmd "cansequence -p $interface &"; do_cmd "sleep 10";
suspend是ltp-ddt中的涉及电源管理的函数,执行会出错,类似rtc0有问题之类。
ltp-ddt运行can_loopback时出错
canconfig: error while loading shared libraries: libsocketcan.so.2: cannot open shared object file: No such file or directory
类似:
error while loading shared libraries: libgsl.so.0: cannot open shared object file: No such file or directory
First, you need to locate the file (libgsl.so.0). You can do this, for example, by using the find
command:
sudo find / -name "libgsl.so.0"
Let us assume, the file is located in /usr/local/lib
. (If the file has not been found, install the corresponding package or download the source, build it and install it.) Now, you have two options:
(1) Quick & Dirty:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
This adds the path of the library to an environment variable. The disadvantage of this option is, that it is only valid for the current session. It will not work for other users. It will not work once you log off and on again.
(2) Permanent:
Review your /etc/ld.so.conf
. If /usr/local/lib
is not listed there, add it. Now, run ldconfig
to detect the shared object file and add it to some system-wide index.
candump -d $interface #-d守护进程
cansequence -p $interface & #后台运行
source 'functions.sh';
interface='can0';
bitrate=1000000;
do_cmd "do_can_loopback.sh -i $interface -b $bitrate";
init_txf=`get_can_stats.sh -s 'TXF'`;
init_rxf=`get_can_stats.sh -s 'RXF'`;
do_cmd "candump -d $interface";
do_cmd "cansequence -p $interface &"; do_cmd "sleep 10";
prefinal_txf=`get_can_stats.sh -s 'TXF'`;
prefinal_rxf=`get_can_stats.sh -s 'RXF'`;
do_cmd "sleep 20";
final_txf=`get_can_stats.sh -s 'TXF'`;
final_rxf=`get_can_stats.sh -s 'RXF'`;
do_cmd "killall candump";
do_cmd "killall cansequence";
do_cmd "ip link set $interface down";
echo "TX init=$init_txf, prefinal=$prefinal_txf, final=$final_txf";
echo "RX init=$init_rxf, prefinal=$prefinal_rxf, final=$final_rxf";
if [ "$final_rxf" -gt "$prefinal_rxf" ] && [ "$prefinal_rxf" -gt "$init_rxf" ] && [ "$final_txf" -gt "$prefinal_txf" ] && [ "$prefinal_txf" -gt "$init_txf" ];
then exit 0;
else exit 1;
fi
需要将canutils的路径加入PATH
PATH=/usr/sbin/out_canutils/bin:/usr/sbin/out_canutils/sbin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/sbin/lib_libsocketcan
export LD_LIBRARY_PATH
get_can_stats.sh通过cat /proc/net/can/stats 读取can收发数据包的数量
发现RX是TX的两倍(loopback时候)
ifconfig -a 是正常的。
貌似ifconfig -a是通过sys目录下的信息得到数据的。
# cat /sys/class/net/can0/statistics/tx_packets