由于本人对于ubuntu和Xenomai信息获取不佳,以及对外网的浏览的不熟练,导致刚开始安装Xenomai的整个流程很慢,而且也遇到了很多错误。因此,在安装流程中会写出一些我遇到的错误以及我个人的解决方法。
根据电脑配置原因和实验需要,所以准备把ubuntu系统安装到实验室的台式机上,而不是在笔记本的虚拟机上。
前期准备:
https://rtt-lwr.readthedocs.io/en/latest/rtpc/xenomai3.html
这个网址里除了安装Xenomai3.0.5以外,还有2.6.5的安装,可根据需要选择。
一、系统盘的制作
我刚开始时是使用的第一款启动盘制作工具,但在我遇到一些问题时,看到有帖子说是系统制作时出现了问题,并且推荐了deepin这一款启动盘制作工具。所以我也尝试着使用deepin来重新制作启动盘并进行后续流程,发现果然原来的问题就不会发生了。因此这里,我使用deepin来制作ubuntu系统的启动盘。
Deepin下载:百度就行。
ubuntu16.04镜像文件:这里我们需要先去官网或者其他网站下载一个ubuntu 16.04镜像文件,后缀是ios的,实验室台式机是64位的,所以我选择64位桌面版。
官网:https://ubuntu.com/download/desktop
其他版本的下载地址:http://mirrors.163.com/ubuntu-releases/
制作系统启动盘:工具和材料都有了,那么就可以开始制作启动盘了
具体方法:先打开deepin,单击deepin窗口中的光盘图标,选择刚才我们下载的ubuntu16.04镜像文件,然后再点击下方U盘图标,选择我们用来制作启动盘的U盘,“格式化U盘可提高成功率”我觉得可点可不点,U盘有资料就不要格式化,资料已经备份的可以格式化一下,没什么影响。最后点击开始。制作过程中电脑管家可能会警告,我选择的是允许,因为对于U盘进行更改不会有什么不好的影响。制作完成后选择立即重启。我们的启动盘就制作完成了。
二、Ubuntu系统的安装
由于系统安装过程中不能截图,所以图片会是以照片的形式贴出来。
(1)系统语言,选择中文(简体),在倒数第三个位置,选完以后点击继续
(2)准备安装Ubuntu,这里我们不勾选任何选项,直接点击继续
(3)安装类型,这里我勾选的是“清除整个磁盘并安装Ubuntu”,不伤手不残留,然后点击现在安装
点击现在安装以后会出现提示栏,不用理会,直接点继续即可
(4)地区:默认的是shanghai ,我们就不修改了,直接点击继续
(5)键盘布局:默认的都是汉语,不修改,点击继续即可
(6)设置账户,这里我用的是实验室的门牌号,密码就是一个空格,点击继续
(7)正式安装,不用做任何操作,等待即可
安装大概花费5分钟,安装完毕后点击“现在重启”
这里重启的过程中有个细节,仅供参考,可能会一直在黑屏光标闪烁那个界面,如果出现这种情况,只要把U盘从机箱上拔掉就可以了。拔掉的瞬间电脑会黑屏,然后就会进入正常开机的流程了。
进入桌面以后,记得先在设置里面把网连上,这样后续的流程才能完成。
三、安装Xenomai 3.0.5
安装Xenomai的操作基本都是在终端进行的,通过Ctrl+Alt+T ,可以打开终端
1、获取Linux内核:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.38.tar.gz
2、解压Linux内核文件:
tar xf linux-4.9.38.tar.gz
3、获取Xenomai 3.0.5:
wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.0.5.tar.bz2
4、解压Xenomai 3.0.5:
tar xf xenomai-3.0.5.tar.bz2
5、应用Xenomai修补程序:我们建立的是一个x86_64位内核:
cd linux-4.9.38
wget https://xenomai.org/downloads/ipipe/v4.x/x86/ipipe-core-4.9.38-x86-3.patch
../xenomai-3.0.5/scripts/prepare-kernel.sh --arch=x86_64 --ipipe=ipipe-core-4.9.38-x86-3.patch
进行到第二条语句时出错,错误原因应该是我们的网络登录不上这个目标网站,我们的网络没有问题,那么很有可能是因为这个网站的问题。总之,在这一步我们要做到的是从这个网站上下载一个文件,文件名是ipipe-core-4.9.38-x86-3.patch,这个文件下载到本地的位置是linux-4.9.38文件夹下。所以我们可以自己从网上找到这个文件,然后放到指定的位置,效果是一样的。
我是从这里下载的:https://xenomai.org/downloads/ipipe/
接下来继续完成第三条语句的操作
6、配置内核:
yes "" | make oldconfig
sudo apt install libncurses5-dev
make menuconfig
配置Linux内核的一些指南:
Recommended options:
* General setup
--> Local version - append to kernel release: -xenomai-3.0.5
--> Timers subsystem
--> High Resolution Timer Support (Enable)
* Xenomai/cobalt
--> Sizes and static limits
--> Number of registry slots (512 --> 4096)
--> Size of system heap (Kb) (512 --> 4096)
--> Size of private heap (Kb) (64 --> 256)
--> Size of shared heap (Kb) (64 --> 256)
--> Maximum number of POSIX timers per process (128 --> 512)
--> Drivers
--> RTnet
--> RTnet, TCP/IP socket interface (Enable)
--> Drivers
--> New intel(R) PRO/1000 PCIe (Enable)
--> Realtek 8169 (Enable)
--> Loopback (Enable)
--> Add-Ons
--> Real-Time Capturing Support (Enable)
* Power management and ACPI options
--> CPU Frequency scaling
--> CPU Frequency scaling (Disable)
--> ACPI (Advanced Configuration and Power Interface) Support
--> Processor (Disable)
--> CPU Idle
--> CPU idle PM support (Disable)
* Pocessor type and features
--> Enable maximum number of SMP processors and NUMA nodes (Disable)
// Ref : http://xenomai.org/pipermail/xenomai/2017-September/037718.html
--> Processor family
--> Core 2/newer Xeon (if "cat /proc/cpuinfo | grep family" returns 6, set as Generic otherwise)
// Xenomai will issue a warning about CONFIG_MIGRATION, disable those in this order
--> Transparent Hugepage Support (Disable)
--> Allow for memory compaction (Disable)
--> Contiguous Memory Allocation (Disable)
--> Allow for memory compaction
--> Page Migration (Disable)
* Device Drivers
--> Staging drivers
--> Unisys SPAR driver support
--> Unisys visorbus driver (Disable)
配置完记得保存
7、构建实时内核:
sudo apt install kernel-package
安装完成到80多时会跳出对话框,我们选择“保持本地版本”按回车就可以了
CONCURRENCY_LEVEL=$(nproc) make-kpkg --rootcmd fakeroot --initrd kernel_image kernel_headers
这里出现致命错误,找不到openssl/openlv.h这个文件,我在网上找到的原因是电脑里没有安装libssl这个东西,解决方法自然是把缺少的东西安装上。执行如下语句安装:
sudo apt-get install libssl-dev
然后我们再运行
CONCURRENCY_LEVEL=$(nproc) make-kpkg --rootcmd fakeroot --initrd kernel_image kernel_headers
解包安装
cd ..
sudo dpkg -i linux-headers-4.9.38-xenomai-3.0.5_4.9.38-xenomai-3.0.5-10.00.Custom_amd64.deb linux-image-4.9.38-xenomai-3.0.5_4.9.38-xenomai-3.0.5-10.00.Custom_amd64.deb
8、允许非root用户
sudo addgroup xenomai --gid 1234
sudo addgroup root xenomai
sudo usermod -a -G xenomai $USER
9、配置GRUB并重新启动
sudo nano /etc/default/grub
编辑GRUB配置如下:
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.9.38-xenomai-3.0.5"
#GRUB_DEFAULT=saved
#GRUB_SAVEDEFAULT=true
# Comment the following lines
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash xenomai.allowed_group=1234"
GRUB_CMDLINE_LINUX=""
这里需要注意的是,除了把需要改写的内容改写之外,关键的是要把那些需要注释掉的行给注释掉,比如GRUB_HIDDEN_TIMEOUT=0这行,本意是在开机时默认内核进入系统,当我们注释掉以后,在开机时,会停留在一个界面,在这个界面上,我们就选择通过Xenomai内核来进入系统。
编辑完成后按 Ctrl+O 然后回车键保存,最后通过 Ctrl+X 离开。
更新GRUB并重新启动
sudo update-grub
重启计算机
sudo reboot
这里由于我们设置完了GRUB,所以开机时会停留在这样一个界面上,如上所述,我们在这里选择Xenomia3.0.5内核进入系统。
选择Ubuntu高级选项
选择Linux 4.9.38-xenomai-3.0.5,回车进入系统
10、安装Xenomai3.0.5用户空间库
uname -a
# Should return Linux waro-rt 4.9.38-xenomai-3.0.5 #2 SMP Wed Sep 20 16:00:12 CEST 2017 x86_64 x86_64 x86_64 GNU/Linux
dmesg | grep Xenomai
# [ 1.417024] [Xenomai] scheduling class idle registered.
# [ 1.417025] [Xenomai] scheduling class rt registered.
# [ 1.417045] [Xenomai] disabling automatic C1E state promotion on Intel processor
# [ 1.417055] [Xenomai] SMI-enabled chipset found, but SMI workaround disabled
# [ 1.417088] I-pipe: head domain Xenomai registered.
# [ 1.417704] [Xenomai] allowing access to group 1234
# [ 1.417726] [Xenomai] Cobalt v3.0.5 (Sisyphus's Boulder) [DEBUG]
cd xenomai-3.0.5
./configure --with-pic --with-core=cobalt --enable-smp --disable-tls --enable-dlopen-libs --disable-clock-monotonic-raw
make -j`nproc`
sudo make install
# --disable-clock-monotonic-raw : http://xenomai.org/pipermail/xenomai/2017-September/037695.html
11、更新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
source ~/.bashrc
12、测试安装
xeno 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.174| 0.464| 1.780| 0| 0| 0.174| 1.780
RTD| 0.088| 0.464| 1.357| 0| 0| 0.088| 1.780
RTD| 0.336| 0.464| 1.822| 0| 0| 0.088| 1.822
RTD| 0.342| 0.464| 1.360| 0| 0| 0.088| 1.822
RTD| 0.327| 0.462| 2.297| 0| 0| 0.088| 2.297
RTD| 0.347| 0.463| 1.313| 0| 0| 0.088| 2.297
RTD| 0.314| 0.464| 1.465| 0| 0| 0.088| 2.297
RTD| 0.190| 0.464| 1.311| 0| 0| 0.088| 2.297
这里我们出现这样的错误,第1条的错误原因是权限不足,执行这样的语句就可以解决问题
sudo chmod -R 777 /dev/rtdm/memdev-private
sudo chmod -R 777 /dev/rtdm/mendev-shared
解决了第1条错误,之后的错误就不会出现了,虽然我不知道具体原因,但总之安装就完成了
Xenomai运行成功。
四、安装ROS1
我参考的是B站上古月居的ROS视频,链接如下:https://www.bilibili.com/video/av59458869?from=search&seid=6289533404409697815
手动跳转到P5跟着做就行了
参考的安装手册链接是:http://wiki.ros.org/kinetic/Installation/Ubuntu
1、添加ROS软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
2、添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
3、安装ROS
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
4、初始化rosdep
sudo rosdep init
rosdep update
5、设置环境变量
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
6、安装rosinstall
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
7、测试安装
roscore
至此,ROS的安装也完成了。