0、前言

        目前在ubuntu20.04和18.04下试过xenomai+IgH的安装,遇到了诸多问题,最终参考了网上的博客得到了这篇安装说明。编译系统中的gcc版本是gcc 7.5.0,但并不确定之前在20.04下安装失败是否是gcc版本的问题。

        (1)22年3月:编译内核使用的是Ubuntu 18.04.06 LTS。

        (2)22年4月27日:将系统gcc版本设为7.5.0,ubuntu20.04可以按照下面流程编译xenomai。

1、安装工具

sudo apt update
sudo apt-get install gcc git libncurses5-dev make flex bison libssl-dev libelf-dev automake

1.1 gcc版本切换

        通过gcc -v查看当前gcc版本,安装所需的gcc版本

sudo apt install gcc-7 g++-7

         为所有gcc版本设置优先级

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90

        切换版本

sudo update-alternatives --config gcc

2、下载源码

        Xenomai需要添加一个i-pipe层到内核中,目前的i-pipe对内核的支持只到Linux 5.4,5.10开始就要用到dovetail这个patch了。

2.1 Xenomai官方Linux5.10.76源码

        Xenomai官方做好的内核源码链接如下,源码包名字如“linux-dovetail-v5.10.76-dovetail3.tar.gz”

下载地址

2.2 Xenomai源码

        最新的Xenomai的源码链接如下,源码包名字如“xenomai-v3.2.1.tar.gz”

下载地址

3、解压压缩包

        进入存放源码的路径下

sudo tar xf linux-dovetail-v5.10.76-dovetail3.tar.gz
sudo tar xf xenomai-v3.2.1.tar.gz

        将解压后的文件拷贝到制定文件夹中

sudo mkdir ~/xenomai
sudo cp -r linux-dovetail-v5.10.76-dovetail3 ~/xenomai
sudo cp -r xenomai-v3.2.1 ~/xenomai

4、导入内核

        将xenomai导入到待编译的内核中

cd ~/xenomai/linux-dovetail-v5.10.76-dovetail3
sudo ~/xenomai/xenomai-v3.2.1/scripts/prepare-kernel.sh --arch=x86_64

5、配置内核

sudo make menuconfig

        内核配置参考如下

* General setup
​ 	--> Local version - append to kernel release: -xenomai(起个区分内核的名字)
    --> Timers subsystem
​ 		---> High Resolution Timer Support [*](默认)

​* Pocessor type and features
	​ --> Processor family
		​ ---> Core 2/newer Xeon (if “cat /proc/cpuinfo | grep family” 
                                returns 6, otherwise set as Generic otherwise)
     --> Multi-core scheduler support [](关闭)


* Xenomai/cobalt
	​ --> Sizes and static limits
		​ ---> Number of registry slots  (512 --> 4096)
		​ ---> Size of system heap (Kb)  (4096 --> 4096)
		​ ---> Size of private heap (Kb) (256 --> 256)
		​ ---> Size of shared heap (Kb)  (256 --> 256)
		​ ---> Maximum number of POSIX timers per process (256 --> 512)
	​ --> Drivers
		​ ---> RTnet
			​ ---> RTnet, TCP/IP socket interface (Enable)
				​ ----> Drivers
					​ -----> New intel(R) PRO/1000 PCIe(Gigabit) [M](模块)
					​ -----> Realtek 8169(Gigabit) [M](模块)
					​ -----> Loopback [M](默认)
				​ ----> Add-Ons
					​ -----> Real-Time Capturing Support [M](模块)
	
* Power management and ACPI options
	​ --> CPU Frequency scaling
	​ 	---> CPU Frequency scaling [](关闭)
	​ --> ACPI (Advanced Configuration and Power Interface) Support
	​ 	---> Processor [](关闭)
	​ --> CPU Idle
		​ ---> CPU idle PM support [](关闭)

* Memory Management Options
	​ ---> Transparent Hugepage Support [](关闭)
	​ ---> Allow for memory compaction [](关闭)
	​ ---> Contiguous Memory Allocation [](关闭)
	 ---> Page Migration [](关闭)

​* Device Drivers
      --> Unisys visorbus driver [](关闭) 
		​ 

        上述配置的参考来源大致来源于此【内核配置参考】。

下面是一些可选配置

原文链接​

* Pocessor type and features
                --> Enable Maximum number of SMP Processors and NUMA Nodes [](可选)

原文链接

​ * Xenomai/cobalt
    ​ --> Drivers
         ---> Real-time IPC drivers [*] (双击空格选定为*)(可选)
                ---> RTIPC protocol family <M>(默认)
                    ---> XDDP cross-domain datagram protocol [*](默认)
                    ---> IDDP intra-domain datagram protocol [*](默认)
                    ---> Number of IDDP communication ports  (32) (默认)
                    ---> Buffer protocol [*](默认)
                    ---> Number of BUFP communication ports (32) (默认)

6、编译内核映像、模组

sudo make -j4 bzImage
sudo make modules
sudo make INSTALL_MOD_STRIP=1 modules_install

【注】:可以在modules_install时通过INSTALL_MOD_PATH指定模组的安装位置。

make modules时可能会报如下错误(多数安装中都有遇到):

6.1 canonical-certs.pem

make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2

         命令行中执行

sudo scripts/config --disable SYSTEM_TRUSTED_KEYS

6.2 canonical-revoked-certs.pem

make[1]: *** No rule to make target 'debian/canonical-revoked-certs.pem', needed by 'certs/x509_revocation_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2

        命令行中执行

sudo scripts/config --disable SYSTEM_REVOCATION_KEYS

6.3 BTF: .tmp_vmlinux.btf: pahole (pahole) is not available

Failed to generate BTF for vmlinux

Try to disable CONFIG_DEBUG_INFO_BTF

make: *** [Makefile:1113: vmlinux] Error 1

         一般是系统缺少dwarves软件包导致。

sudo apt install dwarves

6.4 "FAILED unresolved symbol udp_sock"

FAILED unresolved symbol udp_sock
make: *** [Makefile:1179: vmlinux] Error 255

         这个问题没有得到很好的解决,试过在18.04中编译,20.04下gcc7.5.0编译,都遇到同样问题。但是失能以下指令将不会报错,可能引起的问题尚不确定

sudo scripts/config --disable CONFIG_DEBUG_INFO_BTF 

6.5 “loading initial ramdisk”(Can't allocate initrd)

        这是一个在安装完新的内核重启后可能会遇到的问题。编译内核过程中,当安装内核模块时未使用“INSTALL_MOD_STRIP=1”标注,会导致initrd文件过大,Grub 2.04无法支持过大的initrd文件(如500M),可通过以下命令解决

sudo make INSTALL_MOD_STRIP=1 modules_install

        【注】对应的错误6.1、6.2、6.3也可以直接编辑.config文件,注释掉对应的选项;在执行make -j4 bzImage时会提示输入对应字段,直接按回车置空即可。

7、安装

将内核编译源码路径下的.config文件拷贝到/boot路径下,并重命名,其尾缀为第5步中“Local version”设置的内核名字:

sudo cp ~/xenomai/linux-dovetail-v5.10.76-dovetail3/.config /boot
sudo mv /boot/.config /boot/config-5.10.76-xenomai

将内核编译源码中的bzImage拷贝被到/boot下并重命名,尾缀同上:

sudo cp ~/xenomai/linux-dovetail-v5.10.76-dovetail3/arch/x86_64/boot/bzImage /boot
sudo mv /boot/bzImage /boot/vmlinuz-5.10.76-xenomai

将内核编译源码中的System.map拷贝被到/boot下并重命名,尾缀同上:

sudo cp ~/xenomai/linux-dovetail-v5.10.76-dovetail3/System.map /boot
sudo mv /boot/System.map /boot/System.map-5.10.76-xenomai

【注】:可以将make modules_install生成的模组(/lib/modules/5.10.76-xenomai)拷贝到要替换内核系统的/lib/modules下。

生成/boot/initrd.img-5.10.76-xenomai文件:

cd /lib/modules/5.10.76-xenomai
sudo update-initramfs -c -k 5.10.76-xenomai

8、允许非root用户

sudo addgroup xenomai --gid 1234
sudo addgroup root xenomai
sudo usermod -a -G xenomai $USER

9、配置GRUB(可选)

sudo gedit  /etc/default/grub

        具体配置如下

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.10.76-xenomai"

GRUB_TIMEOUT=10

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash xenomai.allowed_group=1234"

         更新grub

sudo update-grub
sudo update-grub2

        重启电脑,看下版本号是否发生变化

uname -a
dmesg | grep -i xenomai

 10、安装库

        前面下载好的xenomai源码包里面没有configure脚本和makefile,需要手动生成,在源码根目录下使用./scripts/bootstrap命令。然后使用以下命令进行配置:

cd ~/xenomai/xenomai-v3.2.1
sudo ./scripts/bootstrap
sudo ./configure --with-pic --with-core=cobalt --enable-smp --disable-tls --enable-dlopen-libs --disable-clock-monotonic-raw
sudo make -j4
sudo make install

        配置中的参数解释:位置无关代码、使用cobalt微内核、对称多处理、线程本地存储、动态加载基于Xenomai的库、使用单调递增时间来计时。

 可能遇到的问题1

"possibly undefined macro: AC_ENABLE_SHARED"

         解决方法

sudo apt install automake libtool m4 autoconf 

可能遇到的问题2

configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."

解决方法

sudo autoreconf -vif

11、更新环境变量

echo '
### Xenomai
export XENOMAI_ROOT_DIR=/usr/xenomai
export XENOMAI_PATH=/usr/xenomai
export PATH=$PATH:$XENOMAI_PATH/bin:$XENOMAI_PATH/sbin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$XENOMAI_PATH/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$XENOMAI_PATH/lib
export OROCOS_TARGET=xenomai
' >> ~/.xenomai_rc

echo 'source ~/.xenomai_rc' >> ~/.bashrc
source ~/.bashrc

        追加权限:

sudo chmod -R 777 /dev/rtdm/memdev-private
sudo chmod -R 777 /dev/rtdm/memdev-shared

12、测试

sudo /usr/xenomai/bin/latency

        还可以使用“rt-tests”进行测试,运行测试(5个线程,线程优先级80,以ns显示时间)

sudo apt install rt-tests

sudo cyclictest -t 5 -p 80 #默认时间单位微秒,添加-N以纳秒显示

         rt-tests测试结果中各字母含义为:

T: 0     序号为0的线程
P: 0     线程优先级为0
C: 9397  计数器。线程的时间间隔每达到一次,计数器加1
I: 1000  时间间隔为1000微秒(us)
Min:     最小延时(us)
Act:     最近一次的延时(us)
Avg:    平均延时(us)
Max:    最大延时(us) 

        两个测试测试结果如下图所示:

13、修复xenomai负延迟

sudo -s
echo 0>/proc/xenomai/latency
sudo /usr/xenomai/bin/latency

        运行一段时间后记录下“last_best”的值,令YOUR_VALUE=这个值*1000

echo YOUR_VALUE>/proc/xenomai/latency 

14、编译IgH

14.1 下载源码包

        安装所需工具

sudo apt install autoconf autogen libtool

        下载IgH源码(下载链接),源码包名字如“ethercat-e1000e-5.10.tar.gz”

cd ~/Download
sudo tar xf ethercat-e1000e-5.10.tar.gz
sudo cp -r ethercat-e1000e-5.10 ~/xenomai
cd ~/xenomai/ethercat-e1000e-5.10

14.2 编译IgH

        编译IgH,其中的配置选项根据实际情况参照下图(来自官方文档)

sudo ./bootstrap
sudo ./configure --with-module-dir=/lib/modules/5.10.76-xenomai --enable-generic --enable-8139too=no --enable-e1000e --enable-cycles --enable-hrtimer --with-xenomai-dir=/usr/xenomai --prefix=/opt/etherlab
sudo make  #编译
sudo make modules  #编译模块
sudo make install  #安装
sudo make modules_install  #安装模块

 

         如果在刚开始配置的时候没有动–prefix选项,默认是安装在/opt/下的,可以查看在/opt/路径下多了一个etherlab文件夹。

14.3 配置

sudo mkdir /etc/sysconfig  #创建文件夹
sudo cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/  #复制配置文件
sudo cp /opt/etherlab/etc/init.d/ethercat /etc/init.d/  #复制启动脚本
sudo chmod a+x /etc/init.d/ethercat
sudo update-rc.d ethercat defaults

        使能ethercat工具

sudo ln -s /opt/etherlab/bin/ethercat /usr/local/bin/ethercat

        配置用户权限

$ sudo gedit /etc/udev/rules.d/99-EtherCAT.rules

输入下列内容  KERNEL=="EtherCAT[0-9]*", MODE="0664", GROUP="users" 

        把相关模块放进系统目录,如果使用通用网卡是这样的

sudo cp devices/ec_generic.ko /lib/modules/$(uname -r)
sudo cp master/ec_master.ko /lib/modules/$(uname -r)

         如果使用专用网卡需要多进一个目录,是这样的

sudo cp devices/e1000e/ec_e1000e.ko /lib/modules/$(uname -r)
sudo cp master/ec_master.ko /lib/modules/$(uname -r)

        然后执行命令

sudo depmod

        查看网卡MAC地址和类型

ifconfig

        配置网卡

sudo gedit /etc/sysconfig/ethercat

        在27行和56行处填入自己的网卡信息

MASTER0_DEVICE=" "
DEVICE_MODULES=" "

14.4 启动主站

sudo /etc/init.d/ethercat start

        如果主站启动则表示安装成功。

        还有很多好用的ethercat tool,通过下面命令查看帮助

sudo ethercat --h

14.5

        ethercat master可以跑了,接下来就是配置系统,让应用程序可以使用 /opt/etherlab/lib 到你的 /etc/ld.so.conf(/opt/ethercatlab前缀实在前面配置ethercat是选定的,默认是/opt/ethercatlab)

sudo gedit /etc/ld.so.conf

 添加  /opt/etherlab/lib

sudo ldconfig

        通过下面指令测试是否安装

sudo ldconfig -v | grep libether*

成功安装会显示  libethercat.so.1 -> libethercat.so.1.1.0

参考资料:

Ubuntu18.04安装xenomai3.1.x实时系统笔记 

linux系统乌班图18.04安装xenomai3.1,内核4.9.38

EtherCAT(ubuntu18.04,linux4.9.38,xenomai3.1,igh1.52)配置完整流程

Xenomai实现RTOS(1)Ubuntu20.04下,Xenomai3.2.1+Linux5.10.76安装

Ubuntu18.04+Xenomai3.1详细步骤(附内核deb文件)

Linux下IGH Ethercat Master安装

IgH详解六、IgH命令行工具使用

Grub 2.04启动内核卡在“loading initial ramdisk”

ethercat环境搭建(igh安装)

内核错误:BTF: .tmp_vmlinux.btf: pahole (pahole) is not available

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐