【原创】xenomai环境下开源实时数控系统LinuxCNC编译安装
linuxcnc 在xenomai下的构建简单记录,参考链接https://www.linuxcnc.org/docs/devel/html/code/building-linuxcnc.html
1.环境
软硬件环境
桌面环境:Ubuntu 24.04+xenomai3.3
硬件:rk3588(nanoPi R6/T6)
对xenomai内核要求
要在使linuxcnc在xenomai上运行,内核配置Local version必须是-xenomai
,即CONFIG_LOCALVERSION="-xenomai"
,这样linuxcnc编译配置时才能识别xenomai环境,否则不实时。
General setup ---> (-xenomai) Local version - append to kernel release
使用uname -a
命令确认:
对xenomai库要求
如果你需要编译生成linuxcnc debian安装包,由于生成linuxcnc debian安装包过程中会处理库的安装依赖生成依赖信息,这就要求xenomai库文件libcobalt.so属于某个debian包,通俗的说要求我们的xenomai库也是通过debian包安装的,而不是直接make install这种方式直接安装的,否则会产生如下类似错误。
dpkg-shlibdeps: error: no dependency information found for /usr/xenomai/lib/libcobalt.so.2 (used by debian/linuxcnc-uspace/usr/lib/libuspace-xenomai.so.0)
解决方式1:xenomai通过构建debian库来安装,可以参考本博客其他文章编译构建xenomai库debian安装包
解决方式2:找到Debian/rules
,打开之后找到override_dh_shlibdeps
,在dpkg-shlibdeps
那一行最后加上如下选项:
--dpkg-shlibdeps-params=--ignore-missing-info
以忽依赖信息。
安装依赖包
先安装依赖的工具和库,我遇到的有这些,不同的环境有差别,出错再对应安装不具备的即可。
sudo apt install pkg-config build-essential automake libtool m4 autoconf libudev-dev libmodbus-dev libusb-1.0-0-dev libgpiod-dev libglib2.0-dev libgtk-3-dev yapps2 intltool libboost-dev python3-dev libboost-python-dev gtkwave bwidget tclx libeditreadline-dev python3-pip python3-tk libglu1-mesa-dev libxmu-dev asciidoc devscripts debhelper libtirpc-dev libtirpc-common tcl8.6-dev tk8.6-dev python3-opengl python3-full
2.本地编译linuxcnc
首先需要安装该工具( sudo apt install git
)然后拉取代码,如下所示:
$ git clone https://github.com/LinuxCNC/linuxcnc.git linuxcnc-source-dir
配置
拉代码生成配置文件
$ git clone https://github.com/LinuxCNC/linuxcnc.git linuxcnc-source-dir
$ cd linuxcnc-source-dir/src
$ ./autogen.sh
生成得configure
,它需要许多可选参数。通过运行以下命令列出configure
的所有参数:
$ cd linuxcnc-source-dir/src
$ ./configure --help
最常用的参数是:
--with-realtime=uspace
为任何实时平台或非实时平台构建。生成的 LinuxCNC 可执行文件将在带有 Preempt-RT 补丁的 Linux 内核(提供实时机器控制)和普通(未打补丁)Linux 内核(提供 G 代码模拟,但不提供实时机器控制)上运行。
如果安装了 Xenomai(通常来自 libxenomai-dev 软件包)或 RTAI(通常来自名称以 “rtai-modules ”开头的软件包)的开发文件,也将启用对这些实时内核的支持。
--with-realtime=/usr/realtime-$VERSION
使用旧的“内核实时”模型构建 RTAI 实时平台。这要求您在
/usr/realtime-$VERSION
中安装 RTAI 内核和 RTAI 模块。生成的 LinuxCNC 可执行文件将仅在指定的 RTAI 内核上运行。--enable-build-documentation
除了可执行文件之外,还构建文档。此选项会显着增加了编译所需的时间,因为构建文档非常耗时。如果不需要构建文档,则可省略此参数。
--disable-build-documentation-translation
禁用为所有可用语言构建翻译文档。翻译文档的构建需要花费大量时间,因此如果不是真正需要的话,建议跳过它。
$ ./configure --with-realtime=uspace --enable-build-documentation
....
checking for xeno-config... /usr/bin/xeno-config
checking for realtime API(s) to use... uspace+xenomai
...
######################################################################
# LinuxCNC - Enhanced Machine Controller #
######################################################################
# #
# LinuxCNC is a software system for computer control of machine #
# tools such as milling machines. LinuxCNC is released under the #
# GPL. Check out http://www.linuxcnc.org/ for more details. #
# #
# #
# It seems that ./configure completed successfully. #
# This means that RT is properly installed #
# If things don't work check config.log for errors & warnings #
# #
# Next compile by typing #
# make #
# sudo make setuid #
# (if realtime behavior and hardware access are required) #
# #
# Before running the software, set the environment: #
# . (top dir)/scripts/rip-environment #
# #
# To run the software type #
# linuxcnc #
# #
######################################################################
配置编译
$ make -j $(nproc)
...
Linking rtapi_app
Linking libuspace-xenomai.so.0
....
之后,如果只想构建 LinuxCNC 的特定部分,可以在make
命令行上命名想要构建的部分。例如,正在开发名为froboz
的组件,则可以通过运行以下命令来构建其可执行文件:
$ cd linuxcnc-source-dir/src
$ make ../bin/froboz
如果在支持实时的系统上运行(请参阅下面的实时部分),此时需要一个额外的构建步骤:
$ sudo make setuid
成功构建 LinuxCNC 后,就可以运行测试了:
$ source ../scripts/rip-environment
$ runtests
pi@NanoPi-R6S:~/linuxcnc-source-dir/src$ linuxcnc
LINUXCNC - 2.10.0~pre0
Machine configuration directory is '/home/pi/linuxcnc-source-dir/configs/sim/axis'
Machine configuration file is 'canterp.ini'
Starting LinuxCNC...
linuxcncsvr (61089) emcsvr: machine 'Canterp Example' version '1.1'
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Note: Using XENOMAI (posix-skin) realtime
milltask (61103) task: machine 'Canterp Example' version '1.1'
halui (61105) halui: machine 'Canterp Example' version '1.1'
Found file(LIB): /home/pi/linuxcnc-source-dir/lib/hallib/basic_sim.tcl
....
这也可能会失败!阅读整个文档,尤其是设置测试环境部分。
3. 构建debian安装包
构建 Debian 软件包时,LinuxCNC 从源代码编译并包含依赖信息,同时可选地包含文档(这会增加构建时间,但可以跳过)。编译后的 LinuxCNC 存储在 .deb
文件中,该文件可安装在相同架构的任何计算机上。安装后,LinuxCNC 可在 /usr/bin
和 /usr/lib
中运行,如同其他系统软件。
此构建模式主要用于:
- 打包软件以交付给最终用户。
- 为未安装构建环境或无法访问互联网的计算机构建软件。
构建 Debian 软件包需要 dpkg-buildpackage
工具(由 dpkg-dev
提供),并确保所有必要的脚本都已安装,这通常通过安装 build-essential
虚拟包来实现。
$ sudo apt-get install build-essential
构建 Debian 软件包还要求安装所有特定于软件包的构建依赖项。安装所有构建依赖项的最直接方法是执行(从同一目录):
$ cd linuxcnc-source-dir
$ ./debian/configure
$ sudo apt-get build-dep .
可以使用dpkg-checkbuilddeps
来检查依赖是否满足 (也来自作为构建必需依赖项的一部分安装的 dpkg-dev 软件包)程序来完成其工作(请注意,它需要从linuxcnc-source-dir
目录运行:
$ dpkg-checkbuilddeps
满足这些先决条件后,构建 Debian 软件包包括两个步骤。
第一步是通过运行以下命令从 git 存储库生成 Debian 包脚本和元数据:
$ cd linuxcnc-dev
$ ./debian/configure
Note:
debian/configure
根据您构建的平台接受参数,它默认在用户空间(“uspace”)中运行 LinuxCNC,期望 preempt_rt 内核将延迟降至最低。
no-docs
:跳过构建文档。uspace
:配置为 Preempt-RT 实时或非实时(兼容两者),或使用noauto
禁用自动检测。
配置 Debian 软件包脚本和元数据后,通过运行dpkg-buildpackage
来构建软件包:
$ dpkg-buildpackage -b -uc -j$(nproc)
Note:
要构建的典型 Debian 软件包,您可以运行不带任何参数的 dpkg-buildpackage。如上所述,该命令传递了两个额外的选项。与所有优秀的 Linux 工具一样,手册页包含
man dpkg-buildpackage
的所有详细信息。
-uc
不要对生成的二进制文件进行签名。仅当您想将软件包分发给其他人时,您才需要使用自己的 GPG 密钥对软件包进行签名。未设置该选项并且无法对包进行签名不会影响 .deb 文件。
-b
这对于避免编译与硬件无关的内容非常有帮助,对于 LinuxCNC 来说就是文档。无论如何,该文档可以在线获取。
如果您在编译时遇到困难,请在线查看 LinuxCNC 论坛。目前正在出现的是对 DEB_BUILD_OPTIONS 环境变量的支持。将其设置为
nodocs
要跳过构建文档,最好使用
-B
标志来 dpkg-buildpackage。
nocheck
跳过 LinuxCNC 构建过程的自检。这可以节省一些时间并减少对某些可能不适用于您的系统的软件包(尤其是 xvfb)的需求。您不应该设置此选项来对构建按预期执行有额外的信心,除非遇到依赖项方面的困难。
环境变量可以与命令的执行一起设置,例如
DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -uc -B
4.安装构建的Debian软件包
Debian 软件包可以通过其 .deb 扩展名来识别。安装它的工具dpkg
是每个 Debian 安装的一部分。 dpkg-buildpackage
创建的 .deb 文件可以在 linuxcnc-source-dir 上面的目录中找到,即在..
中。要查看包中提供了哪些文件,请运行
dpkg -c ../linuxcnc-uspace*.deb
LinuxCNC 的版本将是文件名的一部分,旨在与星号匹配。列出的文件可能太多,无法显示在您的屏幕上。如果您无法在终端中向上滚动,请添加| more
该命令的| more
是使其输出通过所谓的“寻呼机”传递。用“q”退出。
要安装软件包,请运行
sudo dpkg -i ../linuxcnc*.deb
5. latency-test
通过命令行测试
pi@NanoPi-R6S:~$ latency-test
Note: Using XENOMAI (posix-skin) realtime
测试的是cpu0的实时性,会差一些,以隔离的cpu核latency测试为准。此时可以通过cat /proc/xenomai/sched/threads
确认已经在xenomai内核调度运行。
pi@NanoPi-R6S:~$ cat /proc/xenomai/sched/threads
CPU PID CLASS TYPE PRI TIMEOUT STAT NAME
0 0 idle core -1 - R [ROOT/0]
1 0 idle core -1 - R [ROOT/1]
2 0 idle core -1 - R [ROOT/2]
3 0 idle core -1 - R [ROOT/3]
4 0 idle core -1 - R [ROOT/4]
5 0 idle core -1 - R [ROOT/5]
6 0 idle core -1 - R [ROOT/6]
7 0 idle core -1 - R [ROOT/7]
0 126087 rt cobalt 0 - X rtapi_app
0 126090 rt cobalt 98 43us D rtapi_app
0 126091 rt cobalt 97 255us D rtapi_app
pi@NanoPi-R6S:~$ cat /proc/xenomai/sched/stat
CPU PID MSW CSW XSC PF STAT %CPU NAME
0 0 0 2971573 0 0 00018008 83.6 [ROOT/0]
1 0 0 0 0 0 00018000 100.0 [ROOT/1]
2 0 0 0 0 0 00018000 100.0 [ROOT/2]
3 0 0 0 0 0 00018000 100.0 [ROOT/3]
4 0 0 0 0 0 00018000 100.0 [ROOT/4]
5 0 0 0 0 0 00018000 100.0 [ROOT/5]
6 0 0 0 0 0 00018000 100.0 [ROOT/6]
7 0 0 0 0 0 00018000 100.0 [ROOT/7]
0 126087 1 1 5 0 000680c0 0.0 rtapi_app
0 126090 1 1759321 1759322 0 00048044 16.0 rtapi_app
0 126091 1 43964 43964 0 00048044 0.4 rtapi_app
【原创】xenomai环境下开源实时数控系统LinuxCNC编译安装的更多相关文章
- Ubuntu环境下Postgres源码文件编译安装步骤
step1:官网下载postgres源码 URL:https://www.postgresql.org/ftp/source/ step2:解压源码文件 tar -zxvf postgresql-12 ...
- centos7环境下apache2.2.34的编译安装
.获取apache2..34的源码包 http://archive.apache.org/dist/httpd/httpd-2.2.34.tar.gz .获取apache的编译参数 apache的编译 ...
- 20180831-Linux环境下Python 3.6.6 的安装说明
20180831-Linux环境下Python 3.6.6 的安装说明 摘要:Python3 安装部署,普通用户,编译安装 Author: andy_yhm@yeah.net Date: 201808 ...
- 实验三:xen环境下的第一个虚拟机的安装
实验名称: xen环境下的第一个虚拟机的安装 实验环境: 我们这里继续上面实验二来完成这个实验: 环境则是xen的安装环境,如下图: 开启虚拟机的的硬件辅助虚拟化功能: 实验要求: 这里我们通过安装b ...
- (转 留存)Windows环境下的NodeJS+NPM+GIT+Bower安装配置步骤
Windows环境下的NodeJS+NPM+GIT+Bower安装配置步骤 标签: NodeJSnpmbower 2015-07-17 16:38 3016人阅读 评论(0) 收藏 举报 分类: G ...
- win10+anaconda环境下pyqt5+qt tools+eric6.18安装及汉化过程
最近需要用python编写一个小程序的界面,选择了pyqt5+eric6的配套组合,安装过程中遇到一些坑,特此记录.参考书籍是电子工业出版社的<PyQt5快速开发与实战>. 因为我使用an ...
- [原创]win7环境下搭建eclipse+python+django开发环境
一)工具下载 a)eclipse(最新版4.3.1)官网下载地址 http://www.eclipse.org/downloads/ b)python (2.X版本)官网下载地址 http://pyt ...
- win10 win7 环境下 oracle 11g和Plsql的安装、卸载遇到的问题。
* win7一体机在安装好oracle和PlSQL后,无法连接到orcl数据库,同时也忘记了sys设置的密码.(在这里应注意在安装过程中,应选择统一口令,这里我均设置成了orcl,同时也应该注意在最后 ...
- BizTalk开发系列(三) 单机环境下的BizTalk Server 2006 R2安装
大部分的开发环境都是在单机环境下进行的,今天整理了一下BizTalk Server 2006 R2在单机环境下的安装步骤. 1. 软件需求 在独立服务器中完整安装BizTalk Server 2006 ...
- Centos环境下部署游戏服务器-编译
游戏服务器是在windows环境开发的,相关跨平台的东西在这里不谈了,只谈如何将Visual Studio 工程转换到Linux下编译.这里涉及到的软件分别为:Centos版本为6.4,Visual ...
随机推荐
- WPF中的ListBox怎么添加删除按钮并删除所在行
直接上代码: 第一步:创建测试类 public class BeautifulGirl { public string Name { get; set; } } 第二步:创建viewmodel和数据源 ...
- Android Perfetto 系列 2:Perfetto Trace 抓取
使用 Perfetto 分析问题跟使用 Systrace 分析问题的步骤是一样的: 首先你需要抓取 Perfetto 文件 在ui.perfetto.dev 中打开 Trace 文件进行分析或者使用命 ...
- 4.2 等差数列及其前n项和
\(\mathbf{{\large {\color{Red} {欢迎到学科网下载资料学习}} } }\)[[高分突破系列]高二数学下学期同步知识点剖析精品讲义! \(\mathbf{{\large { ...
- 2. 说一下vue2和vue3的区别 ?
1. vue3 使用 proxy 替换Object.defineProperty 实现数据响应式 ,所以vue3 的性能得到了提升 : 2. vue3 使用组合式 API 替代了 vue2 中的选项式 ...
- 35. vue响应式的get和set如何触发或者过程
首先 ,vue 内部使用 Object.defineProperty 给data中的数据添加了 getter 和 setter 函数 : 当我们访问数据的时候,会触发getter 函数 retur ...
- kotlin协程——>异步流
异步流 挂起函数可以异步的返回单个值,但是该如何异步返回多个计算好的值呢?这正是 Kotlin 流(Flow)的 ⽤武之地. 表示多个值 在 Kotlin 中可以使⽤集合来表⽰多个值.⽐如说,我们可以 ...
- AOT漫谈专题(第三篇): 如何获取C#程序的CPU利用率
一:背景 1. 讲故事 上篇聊到了如何对AOT程序进行轻量级的APM监控,有朋友问我如何获取AOT程序的CPU利用率,本来我觉得这是一个挺简单的问题,但一研究不是这么一回事,这篇我们简单的聊一聊. 二 ...
- NIO聊天室
SocketChannel 和 ServerSocketChannel ServerSocketChannel 用于创建服务器端套接字,而 SocketChannel 用于创建客户端套接字.它们都支持 ...
- 基于surging的木舟平台如何上传模块热部署
一.概述 通过3个月的赶工,基本上快完成1.0版本的研发,将在下个月发布社区1.0版本. 木舟 (Kayak) 是什么? 木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行 ...
- 24暑集训Week1
24暑集训Week1 夜行的人,若你不唱歌的话,不惊醒这黑夜的话,就永远也走不出呼蓝别斯了. 这重重的森林,这崎岖纤细的山路,这孤独疲惫的心. 亲爱的,哪怕后来去到了城市,走夜路时也要大声地唱歌,像喝 ...