CAN bus的移植

CAN bus的移植
一、首先要阅读相关的文档了解can bus协议;
二、驱动移植,内核中一般是自带相关的can驱动,如果没有可以自行加入;
三、测试,首先下载can bus套件:


fulinux ~$git clone https://git.gitorious.org/linux-can/can-utils.git
fulinux ~$cd can-utils
fulinux ~$ls**** candump.c ***fulinux ~$make

make后有candump执行程序。如果没有can设备,可以通过下面的linux命令来创建一个虚拟的can设备:

fulinux ~$ modprobe can
fulinux ~$ modprobe can_raw
fulinux ~$ modprobe vcan
fulinux ~$ sudo ip link add dev vcan0 type vcan
fulinux ~$ sudo ip link set up vcan0
fulinux ~$ ip link show vcan0
3: vcan0: <NOARP,UP,LOWER_UP> mtu 16 qdisc noqueue state UNKNOWN
link/can

在编写一个小程序candump-client,配合candump程序一同测试:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <net/if.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/can.h>
#include <linux/can/raw.h>
int
main(void)
{
int s;
int nbytes;
struct sockaddr_can addr;
struct can_frame frame;
struct ifreq ifr;
char *ifname = "vcan0";
if((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
perror("Error while opening socket");
return -1;
}
strcpy(ifr.ifr_name, ifname);
ioctl(s, SIOCGIFINDEX, &ifr);
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
printf("%s at index %d\n", ifname, ifr.ifr_ifindex);
if(bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
perror("Error in socket bind");
return -2;
}
frame.can_id = 0x123;
frame.can_dlc = 2;
frame.data[0] = 0x11;
frame.data[1] = 0x22;
nbytes = write(s, &frame, sizeof(struct can_frame));
printf("Wrote %d bytes\n", nbytes);
return 0;
}

同时修改makefile文件,将candump-client程序加入到makefile文件中一起编译:

PROGRAMS = can-calc-bit-timing candump candump-client cansniffer cansend canplayer cangen canbusloadcandump.o: lib.h
candump-client.o: lib.h
candump: candump.o lib.o
candump-client: candump-client.o lib.o

编译:

fulinux ~$make

在两个终端上执行:

fulinux ~$./candump vcan0
fulinux ~$./candump-client

执行结果:

by fulinux
blog: blog.csdn.net/fulinus

时间: 2024-10-18 18:00:50

CAN bus的移植的相关文章

基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

04.移植u-boot

1.读readme获取信息    1.1 由Building the Software可知,需修改顶层makefile,指定架构和编译器    ifeq ($(HOSTARCH),$(ARCH))    CROSS_COMPILE ?= arm-linux-    endif ARCH = arm    CROSS_COMPILE = arm-linux-2.新建一个单板    cd board/samsung/ cp smdk2410 smdk2440 -rf  cd ../../includ

Samsung_tiny4412(驱动笔记10)----mdev,bus,device,driver,platform

/*********************************************************************************** * * mdev,bus,device,driver,platform * * 声明: * 1. 本系列文档是在vim下编辑,请尽量是用vim来阅读,在其它编辑器下可能会 * 不对齐,从而影响阅读. * 2. 由于本人水平有限,很难阐述清楚bus device driver platform的关系 * 所以强烈要求您详细参考本次

u-boot-2015.01在tq2440上的初步移植

作者: 彭东林 邮箱: [email protected] QQ:   405728433 开发板:     tq2440 工具:       Win7 + VMware + Debian6 U-boot版本: u-boot-2015.01 Linux版本:  天嵌自带的 linux-2.6.30.4 GCC版本:     gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176)   之前由于移植过u-boot-2014.04到tq2440上,现在移植u-

AM335x(TQ335x)学习笔记——USB驱动移植

对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. 配置内核支持USB 默认的配置项没有配置USB相关的选项,但是DTS已经配置好了,我们不需要对DTS作任何修改,详细的内核配置项如下: Device Drivers ---> [*] USB support ---> [*] OTG support <*> EHCI HCD (USB

移植 U-Boot(四)

U-Boot的启动过程源码分析 u-boot属于两阶段的bootloader,第一阶段的文件为cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S,前者是平台相关的,后者是开发板相关的. 1.u-boot第一阶段代码分析 (1)硬件设备初始化 依次完成如下设置:将CPU的工作模式设为管理模式(svc),关闭看门狗,设置FCLK.HCLK.PCLK的比例(即设置CLKDIVN寄存器),关闭MMU.CACHE. 代码在cpu/arm920t/start

android bluetooth蓝牙移植

http://blog.csdn.net/zhengmeifu/article/details/7705172 前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下,备忘而已. 1.内核增加配置make menuconfig -> Networking support -> Bluetooth subsystem support -->进行选择BT选项,至少选择如下几项:CONFIG_BT=yCONFIG_BT_RFCOMM=y## Bluetooth

基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

linux系统移植和根文件系统制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5.