记录在redhat7.2中编译vcan

由于项目需求,需要搭建can总线开发环境,在没有硬件设备的前提下,准备用虚拟环境开发。

搜了一下,发现https://github.com/GENIVI/CANdevStudio这个项目挺适合的,可以用linux中的vcan进行环境仿真。

但是redhat7.2并没有开启can总线支持,需要自己编译内核,获得can和vcan的ko模块。

uname -r发现系统用的是3.10.0-229.11.11.rt56.141.11,于是去找对应的内核源文件。

这里需要说一下:229是redhat7.1使用的内核版本,7.2中使用的是3.10.0-327,所以使用yum源中的版本不行,得自己下载。

不知道在哪里下载redhat的源文件,于是从centos上找。

https://git.centos.org/rpms/kernel-rt/是实时内核的源码,https://git.centos.org/rpms/kernel是普通核的源码,区别在于

=》

 

上图中会多出最后两个配置,RT表示是realtime kernel。

在上述网址的中选择正确的版本,在其中的“.kernel-rt.metadata”文件中找出内核源码压缩包的哈希码,

 

然后在这个网址https://git.centos.org/sources/kernel-rt/c7-rt/中找到对应的文件,下载后改名为XXX.tar.xz。

解压,开始编译。

首先从/boot中赋值configXXXX文件到当前源码中(与uname -r一致),命名为.config,然后就可以基于当前系统的配置修改了,在net-》can中打开can和vcan的支持,标记为M,

make

如果出现因为-Werror造成的错误,说明gcc将所有warning当做了error,修改内核的Makefile文件,其中有一处“KBUILD_CFLAGS”设置了-Werror,将其改为-Wno-error,继续make。

编译成功后需要将drivers/net/can和net/can分别拷贝到/lib/modules/`uname -r`中的kernel/drivers/net/can、/kernel/net/can中,因为前者包含了vcan.ko,后者包含了can.ko。

然后运行depmod -a, modprobe can modprobe van,就能加载成功vcan模块了。

如果采用的内核版本不一致,可能会报“modprobe Exec format error”,用modinfo查看会发现其中的rhelversion是7.2(我用327源码包编译的就会报错)。

 

 

用一下命令创建vcan设备:

sudo ip link add dev can0 type vcan
sudo ip link set can0 up

 用ifconfig命令查看,就能看见can0设备了。

 

记录几个有用的网址:

https://vault.centos.org/,centos和redhat的源

https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/,linux-rt的源代码

https://www.modb.pro/db/473391,一个介绍gcc选项的网址

 https://github.com/torvalds/linux, linux kernel source

posted @ 2022-12-13 16:17  huorexiaji  阅读(182)  评论(0)    收藏  举报