Ubuntu18.04安装Xenomai
参考
linux系统乌班图18.04安装xenomai3.1,内核4.9.38
Ubuntu20.04linux内核(5.4.0版本)编译准备与实现过程-编译过程(2)
安装依赖
sudo apt update
sudo apt-get install gcc git make automake build-essential libncurses5-dev bison flex libssl-dev kernel-package git-core flex bison texinfo zip unzip zlib1g-dev gettext libfuse-dev fuse-emulator-gtk pkg-config findutils debhelper libtool libltdl-dev
安装会提示你内核的选择:选择第一个安装(install the package maintainer’s version)
下载源码
linux内核 :https://www.kernel.org/pub/linux/kernel/
xenomai:https://xenomai.org/downloads/xenomai/stable
补丁ipipe:https://xenomai.org/downloads/ipipe/v4.x/x86/
mkdir Xenomai
cd Xenomai
X86:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.38.tar.gz
wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.1.tar.bz2
wget https://xenomai.org/downloads/ipipe/v4.x/x86/ipipe-core-4.9.38-x86-4.patch
tar xf linux-4.9.38.tar.gz
tar xf xenomai-3.1.tar.bz2
cd linux-4.9.38/
cp -r ../ipipe-core-4.9.38-x86-4.patch ./
../xenomai-3.1/scripts/prepare-kernel.sh --arch=x86_64 --ipipe=ipipe-core-4.9.38-x86-4.patch
sudo make menuconfig
arm64:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.51.tar.gz
wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.1.tar.bz2
wget https://xenomai.org/downloads/ipipe/v4.x/arm64/ipipe-core-4.9.51-arm64-4.patch
tar xf linux-4.9.51.tar.gz
tar xf xenomai-3.1.tar.bz2
cd linux-4.9.51/
cp -r ../ipipe-core-4.9.51-arm64-4.patch ./
../xenomai-3.1/scripts/prepare-kernel.sh --arch=aarch64 --ipipe=ipipe-core-4.9.51-arm64-4.patch
sudo make menuconfig
内核配置推荐如下:
X86:
* General setup
--> Local version - append to kernel release: -xenomai-3.1
--> Timers subsystem
--> High Resolution Timer Support (Enable)
* 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® PRO/1000 PCIe (Enable)
--> Realtek 8169 (Enable)
--> Loopback (Enable)
--> Add-Ons
--> Real-Time Capturing Support (Enable)
---> Real-time IPC drivers(Enable) //点击两下空格,要*,不要M
---> RTIPC protocol family(Enable)
---> XDDP cross-domain datagram protocol(Enable)
---> IDDP intra-domain datagram protocol(Enable)
---> Number of IDDP communication ports (32)
---> Buffer protocol(Enable)
---> Number of BUFP communication ports (32)
* Processor type and features
--> Enable Maximum number of SMP Processors and NUMA Nodes (Disable)
--> Processor family
--> Core 2/newer Xeon (if “cat /proc/cpuinfo | grep family” returns 6, set as Generic otherwise)
--> Transparent Hugepage Support (Disable)
--> Allow for memory compaction (Disable)
--> Contiguous Memory Allocation (Disable)
--> Page Migration (Disable)
* Device Drivers
--> Staging drivers
--> Unisys SPAR driver support
--> Unisys visorbus driver (Disable)
arm64:
* General setup
--> Local version - append to kernel release: -xenomai-3.1
--> Timers subsystem
--> High Resolution Timer Support (Enable)
* 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® PRO/1000 PCIe (Enable)
--> Realtek 8169 (Enable)
--> Loopback (Enable)
--> Add-Ons
--> Real-Time Capturing Support (Enable)
---> Real-time IPC drivers(Enable) //点击两下空格,要*,不要M
---> RTIPC protocol family(Enable)
---> XDDP cross-domain datagram protocol(Enable)
---> IDDP intra-domain datagram protocol(Enable)
---> Number of IDDP communication ports (32)
---> Buffer protocol(Enable)
---> Number of BUFP communication ports (32)
arm64还需要修改linux-4.9.51/.config
文件中的 # CONFIG_MODULES is not set
为CONFIG_MODULES=y
编译内核:
sudo CONCURRENCY_LEVEL=$(nproc) make-kpkg --initrd kernel_image kernel_headers
若出现以下错误:
debian/ruleset/targets/common.mk:295: recipe for target 'debian/stamp/build/kernel' failed
则修改.config文件如下:
CONFIG_MODULE_SIG_ALL
CONFIG_MODULE_SIG_KEY
CONFIG_SYSTEM_TRUSTED_KEYS
三项注释掉,编译时系统会自动生成一次性密钥来加密
编译完成后,安装编译好的内核:
x86:
cd ..
sudo dpkg -i linux-headers-4.9.38-xenomai-3.1_4.9.38-xenomai-3.1-10.00.Custom_amd64.deb
sudo dpkg -i linux-image-4.9.38-xenomai-3.1_4.9.38-xenomai-3.1-10.00.Custom_amd64.deb
arm64:
cd ..
sudo dpkg -i linux-headers-4.9.51-xenomai-3.1_4.9.51-xenomai-3.1-10.00.Custom_arm64.deb
sudo dpkg -i linux-image-4.9.51-xenomai-3.1_4.9.51-xenomai-3.1-10.00.Custom_arm64.deb
添加xenomai 组:
sudo addgroup xenomai --gid 1234
sudo addgroup root xenomai
sudo usermod -a -G xenomai $USER
配置开机启动内核:
sudo gedit /etc/default/grub
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.9.38-xenomai-3.1"
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash xenomai.allowed_group=1234"
GRUB_CMDLINE_LINUX=""
GRUB_GFXMODE=1920x1080
arm64可能没有grub,需要安装:
sudo apt-get install grub2-common
sudo update-grub
sudo reboot
询系统是否正确安装:
$ uname -a
Linux xxx 4.9.38-xenomai-3.1 #1 SMP Mon Oct 10 15:35:41 CST 2022 x86_64 x86_64 x86_64 GNU/Linux
$ dmesg | grep Xenomai
[ 2.346551] [Xenomai] scheduling class idle registered.
[ 2.346552] [Xenomai] scheduling class rt registered.
[ 2.346570] [Xenomai] SMI-enabled chipset found, but SMI workaround disabled
[ 2.346593] I-pipe: head domain Xenomai registered.
[ 2.347804] [Xenomai] allowing access to group 1234
[ 2.347840] [Xenomai] Cobalt v3.1
安装用户空间程序:
cd ~/xenomai/xenomai-3.1
./configure --with-pic --with-core=cobalt --enable-smp --disable-tls --enable-dlopen-libs --disable-clock-monotonic-raw
make -j`nproc`
sudo make install //默认安装在/usr/xenomai
更新bashrc:
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
sudo gedit /etc/sudoers
找到Defaults env_reset, 将其改为Defaults !env_reset
gedit ~/.bashrc
最后一行加入:alias sudo='sudo env PATH=$PATH'
source ~/.bashrc
追加权限:
sudo chmod -R 777 /dev/rtdm/memdev-private
sudo chmod -R 777 /dev/rtdm/memdev-shared
测试:
$ sudo /usr/xenomai/bin/latency
== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:01 (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| -0.453| -0.422| 3.453| 0| 0| -0.453| 3.453
RTD| -0.453| -0.423| 0.178| 0| 0| -0.453| 3.453
RTD| -0.454| -0.423| 0.872| 0| 0| -0.454| 3.453
RTD| -0.453| -0.422| -0.059| 0| 0| -0.454| 3.453
RTD| -0.454| -0.422| 0.290| 0| 0| -0.454| 3.453
RTD| -0.452| -0.423| 3.422| 0| 0| -0.454| 3.453
RTD| -0.451| -0.422| 3.444| 0| 0| -0.454| 3.453
RTD| -0.471| -0.422| 3.454| 0| 0| -0.471| 3.454
RTD| -0.454| -0.420| 3.449| 0| 0| -0.471| 3.454
RTD| -0.455| -0.421| 3.460| 0| 0| -0.471| 3.460
RTD| -0.454| -0.423| 3.424| 0| 0| -0.471| 3.460
RTD| -0.453| -0.423| 0.955| 0| 0| -0.471| 3.460
RTD| -0.452| -0.422| 0.465| 0| 0| -0.471| 3.460
RTD| -0.453| -0.423| -0.095| 0| 0| -0.471| 3.460
RTD| -0.455| -0.423| 0.333| 0| 0| -0.471| 3.460
RTD| -0.452| -0.422| 3.421| 0| 0| -0.471| 3.460
RTD| -0.455| -0.422| 0.217| 0| 0| -0.471| 3.460
RTD| -0.453| -0.423| 3.454| 0| 0| -0.471| 3.460
RTD| -0.454| -0.423| 3.444| 0| 0| -0.471| 3.460
RTD| -0.453| -0.423| 0.551| 0| 0| -0.471| 3.460
RTD| -0.453| -0.421| 0.570| 0| 0| -0.471| 3.460
RTT| 00:00:22 (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| -0.455| -0.422| 0.349| 0| 0| -0.471| 3.460
RTD| -0.455| -0.423| 0.006| 0| 0| -0.471| 3.460
RTD| -0.454| -0.422| 3.438| 0| 0| -0.471| 3.460
RTD| -0.453| -0.422| 3.416| 0| 0| -0.471| 3.460
RTD| -0.453| -0.421| 0.423| 0| 0| -0.471| 3.460
RTD| -0.453| -0.422| 3.439| 0| 0| -0.471| 3.460
RTD| -0.455| -0.423| 0.018| 0| 0| -0.471| 3.460