在JetsonNano上安装PREEMPT-RT实时核+IghEtherCAT主站的详细步骤

news2024/11/25 5:46:02

特别说明:由于本人空闲时间有限,此博客中所有内容均是从本人的个人笔记中摘抄出来,命令行大多以图片形式展示,不能提供复制粘贴功能敬请体谅。此外,第一部分关于在 Jetson Nano 上安装PREEMPT-RT 实时核的步骤比较详细,而第二部分关于在 第一部分的基础上安装 Igh EtherCAT 主站的步骤比较繁杂无序,这也是因为本人空闲时间有限,没有进行梳理,在此也敬请体谅。

1. Real-time Linux for Jetson Nano (L4T 32.5)

1.1 参考博客

https://forums.developer.nvidia.com/t/applying-a-preempt-rt-patch-to-jetpack-4-5-on-jetson-nano/168428/4

1.2 总思路

在一台x86架构且装有Ubuntu系统的电脑中下载并解压好相关资源,然后打实时核补丁,设置编译环境,编译内核,生成镜像文件,烧录镜像文件到SD卡,成功进入系统界面并查看内核,最后进行实时性测试

1.3 具体步骤

(1) 安装需要的包

(2) 在根目录下新建一个目录

(3) 下载下列文件到上述新建的Jetson_nano目录下(这几个网址在参考博客里有)

(4) 在Jetson_nano目录下解压相关文件

 注意:从“ sudo tar -xjf Linux_for_Tegra/source/public/kernel_src.tbz2 -C Linux_for_Tegra/rootfs/usr/src/ ”这一行命令行开始,下述所有的命令行都跟参考博客“https://forums.developer.nvidia.com/t/applying-a-preempt-rt-patch-to-jetpack-4-5-on-jetson-nano/168428/4”有所不同,千万不要按参考博客去实操。

(5) 打实时核补丁

(6) 编译内核

 (7) 生成镜像文件

此步中所输入命令行的参数说明如下:

 

 注:到这一步时,要特别注意 -r 后面的参数,这个参数有三个选项,具体选哪一个,要看Jetson Nano板子底部的丝印注明的Jetson Nano款式,目前Jetson Nano有3款,A01、A02、B01,板子底部的款式丝印如下图所示,红色方框框住的地方就是款式。

 (8) 成功生成镜像文件

 

 镜像文件大小15.6 GB左右,如下图所示,精确值是16388096 KB。

 (9) 烧录镜像文件到SD卡

在烧录镜像到SD卡前,要先用DiskGenius软件对SD卡进行“擦除所有分区”、“新建分区”、“格式化为FAT32格式”等操作,才能让SD卡插入读卡器后插入电脑能被Win32DiskImager软件识别出来。

注意:当显示烧录完成后要马上拔出读卡器,否则容易造成电脑蓝屏。

 (10) 启动镜像并根据引导进行相关配置

① 将SD卡插入到Jetson Nano中,按下启动开关。

② 根据Ubuntu系统的引导进行使用语言、键盘布局、账户密码、需要连接的WIFI、磁盘最大可用空间等配置。

 (11) 成功进入系统界面,查看内核是否为实时核

 (12) 实时性测试

sudo apt-get install rt-tests

sudo cyclictest -t 5 -p 80 -n   #运行5个线程,线程优先级为80,无限循环

cyclictest参数说明如下图所示:

 测试结果如下图所示,最大抖动值(下图中的Max)为57us,表示实时核可正常运行:

2Igh ethercat for Jetson Nano (1.5.2)

2.1 参考博客

linux5.4内核搭建igh主站第二次尝试_ze3000的博客-CSDN博客

菜鸟笔记--scripts/basic/fixdep: Exec format error解决办法_中华田园巨龙的博客-CSDN博客

2.2 具体步骤

(1) 进入linux内核源码目录,修复内核源文件使用的编译器和架构问题

(2) 解压下载得到的igh ethercat源码压缩包,进入源码对应目录后运行 ./bootstrap生成configure文件。如果提示生成出错,则需要根据错误提示信息,使用apt-get安装缺失的应用程序。(igh ethercat源码使用ethercat_github_download的这份,是从网上下载的别人修改过的源码,用其它版本的源码会出现与Linux内核不兼容的问题)

·configure文件生成完成后,运行configure文件并编译:

./configure --with-linux-dir=/home/ubuntu/linux-3.18.59 --enable-8139too=no --enable-wildcards=yes --prefix=/opt/etherlab

make

make modules

其中,./configure命令需要输入一些选项对igh ethercat主站的编译安装过程进行配置。比较重要的选项是--with-linux-dir,用于指定linux内核源码的位置。用户需要指定打过实时补丁的内核源码,这里的示例路径为/home/ubuntu/linux-3.18.59。其余选项见下表:

(3) 安装完成后,会在/opt/目录下生成一个etherlab文件夹,其中包括igh ethercat的库文件。进入该文件夹:

cd /opt/etherlab

并修改ethercat主站配置文件:

sudo vim etc/sysconfig/ethercat

在MASTER0_DEVICE=""填写希望配置成ethercat主站网卡的网卡MAC地址(网卡MAC地址使用ifconfig命令获得),同时找到DEVICE_MODULES一栏,改为DEVICE_MODULES="generic",保存退出。

之后,在/etc目录下新建一个sysconfig文件夹,将修改后的ethercat文件复制到刚刚新建的文件中:

mkdir /etc/sysconfig/

cp etc/sysconfig/ethercat  /etc/sysconfig/

ln -s /opt/etherlab/etc/init.d/ethercat  /etc/init.d/

然后需要检测模块的相依性,以供modprobe在安装模块时使用:

sudo depmod

(4) 启动主站,输入:

/etc/init.d/ethercat start

如果安装没有问题,会出现下面的提示:

Starting EtherCAT master 1.5.2  done

(5) 安装完成后,需要链接一下,让igh ethercat控制台工具能够直接在命令行运行。

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

(6) 修改ethercat设备权限:

运行程序时,要打开/dev/EtherCAT0文件需要root权限,为了不每次都手动修改权限,所以要进行设备权限设置。

运行:sudo vim /etc/udev/rules.d/99-ethercat.rules

添加如下的内容:

KERNEL=="EtherCAT[0-9]",MODE="0777"

保存后退出,然后执行sudo udevadm control --reload-rules,重启。

(7) 连接从站,输入以下查看从站名称,如下图(此图仅作参考,并不与本博客内容完全对应)所示:

ethercat slaves

(8) 设置EtherCAT 主站的开机自启动功能:

ubuntu18.04不再使用 inited 管理系统,改用 systemd
但是个人认为开机启动的rc.local更加好用,所以可以自己配置rc.local

systemd 默认会读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接 /lib/systemd/system/ 下的文件。一般系统安装完 /lib/systemd/system/ 下会有 rc-local.service 文件,即我们需要的配置文件。

将 /lib/systemd/system/rc-local.service 链接到 /etc/systemd/system/ 目录下面来:

ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

修改文件内容:

sudo vim /etc/systemd/system/rc-local.service

在文件末尾增加:

[Install]

WantedBy=multi-user.target

Alias=rc-local.service

创建/etc/rc.local文件:

sudo touch /etc/rc.local

编辑/etc/rc.local文件:

sudo vim /etc/rc.local

添加以下内容到rc.local文件中后保存退出:

#!/bin/bash

sudo /etc/init.d/ethercat start

rc.local文件增加可执行权限:

sudo chmod +x /etc/rc.local

做完这一步后,把ubuntu重启就可以自启动ethercat。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业工商四要素核验 API:有效应对商业欺诈和恶意交易的利器

引言 企业工商四要素核验是一种用于验证企业基本信息的方法,主要包括企业名称、社会统一信用代码、法人名称、法人身份证四个要素。这些要素是企业注册时必须提供的信息,通过对这些信息的验证,可以确定企业的真实性和合法性,通常…

【力扣-21】合并两个有序链表

🖊作者 : Djx_hmbb 📘专栏 : 数据结构 😆今日分享 : 英文文章里 : TL;DR 或者 tl;dr。 网上英文解释有两种,一种是Too long;Don’t read,另一种是Too long;Didn’t read。意思是:“文章太长了,读…

Stable Diffusion MacBookAir 手把手安装教程,以及checkpoint安装、Lora安装、civitai介绍。

目标: 本地部署Stable Diffusion 安装步骤: 安装git Git - Downloadshttps://git-scm.com/downloads安装python 3.10.6 Python Releases for macOS | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downl…

再捐1亿元种树治沙:蚂蚁集团持续七年支持内蒙古生态治理

今天(4月22日)是“世界地球日”,内蒙古自治区林草局与蚂蚁集团启动战略合作:由蚂蚁集团在三年内再捐资1亿元,通过公益项目“蚂蚁森林”支持浑善达克沙地的生态治理。这1亿元将用于当地林草生态的修复保护、沙化土地的治…

助力电力行业数字化,BI 大有可为

各地密集上马的电力工程为上下游产业链发展带去了更多市场机遇,“三零”“三省”办电服务的推广让企业获得了看得见、摸得着的实惠,电力行业正在以自身高质量发展新成效助力经济稳增长,为扎实推进中国式现代化建设注入强劲动能。 电力行业是…

Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)

Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947) 0x00 前言 Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问…

plt.title()函数中文无法显示问题

文章目录 问题描述解决办法plt.title()函数参数说明 问题描述 由于画图时plt.title()默认是显示英文,如果我们设置标题为中文,会无法显示,如图: plt.title(训练损失) plt.plot(np.arange(len(losses)), losses, -o, colorred) p…

快速学会 IDEA 中 Git 的使用与 GitHub 仓库创建、连接、发布

🍎道阻且长,行则将至。🍓 目录 一、Git 🌴1.Git 工作流程2.Git 安装3.常用命令4.分支 二、远程仓库 GitHub 🌵1.注册使用2.配置 SSH 公钥3.在 IDEA 中配置3.IDEA to GitHub4.创建分支5.commit 到仓库6.从远程仓库中抓…

【数据结构与算法】无队头指针的队列置空队、判队空 、入队和出队算法

题目 Qestion: 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点 (注意不设头指针) ,试编写相应的置空队、判队空、入队和出队等算法。 核心思路 该队列的特殊之处: 用链表来表示队列该链表为带头节点的链表该…

VM ware workstation安装mac虚拟机

一. 工具准备 VMware workstation mac os的镜像文件(链接:https://pan.baidu.com/s/1AdDGFU186bqKvW4wuGtpqw ,提取码:tdvc) 下载一个auto-unlocker文件(https://github.com/paolo-projects/auto-unlocke…

人工智能十大流行算法,通俗易懂讲明白

人工智能是什么?很多人都知道,但大多又都说不清楚。 事实上,人工智能已经存在于我们生活中很久了。 比如我们常常用到的邮箱,其中垃圾邮件过滤就是依靠人工智能;比如每个智能手机都配备的指纹识别或人脸识别&#x…

「QT」QT中new的对象不需要delete的原因

博客主页:何曾参静谧的博客 文章专栏:「QT」QT5快速学习 目录 说明注意事项说明 在QT中,一般来说,通过new关键字创建的对象由QT的对象树来管理,而通过其他方式创建的对象就需要手动释放。QT的对象树可以看做是QT提供的一种内存管理机制,它能够自动地管理和释放对象的内存…

Xilinx之7系列时钟规划失败解析

目录 一 、前言 二、时钟规划 ​2.1 时钟单元经过非时钟路径 2.2 资源不足 2.3 跨半区 一 、前言 在设计的工程中,经常会在implementation的布局或布线阶段失败,下面将针对xilinx 7系列时钟规划失败的场景进行分类描述。本文示例器件为xc7k480tffv1…

华为笔记本怎么录屏?分享2个实用方法

案例:如何对华为笔记本电脑进行屏幕录制? 【今天刚刚了解到电脑可以录屏,但是我拿着我的华为电脑找了半天,也找不到它的屏幕录制功能在哪。华为电脑录屏功能在哪?华为笔记本怎么录屏?有没有大神可以教教我…

DNS缓存失效,nginx死循环访问造成连接数瞬间飚高的问题

0.背景介绍 某服务domain.com.cn 之前DNS解析到服务真实地址10.1.1.11,后面需要对用户登录增加黑名单功能,于是在openresty针对服务domain.com.cn的特性完成了黑名单功能。黑名单功能已经上线几个月,但是DNS从服务真实地址10.1.1.11切换到ope…

Spring MVC 参数解析(13)

目录 简介 调用流程 1. 首先,还是需要进行到前端控制器的doDispatch方法,这是我们的调用Spring MVC的核心入口方法 2. 在doDispatch方法内部,我们调用到了HandlerAdapter.handle(*****) 方法 3. 最终,我们会来到 RequestMappi…

完美解决丨2. `TypeError: list indices must be integers or slices, not str`

‘tuple’ object does not support item assignment 原因: tuple 是一个元素不可变的列表,如果尝试对 tuple 中的某个元素进行修改,会报错。 解决办法: 需要将 tuple 转换为 list,然后再把 list 转换为 tuple。 示例…

最长公共上升子序列LCIS

最长公共上升子序列LCIS 题目链接: acwing272. 最长公共上升子序列 题目描述: 输入输出: 题解: 首先考虑 最长上升子序列和 最长公共子序列问题 最长上升子序列的状态表示与状态转移如下: 状态表示: 用f[i],来表示以A[i]结尾的A[1~i]最长上升子序列的长度(注意,该上…

WPF教程(三)--事件Event调用

1、WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序才停止运行。 ShutDown 是隐式或显式发生,可以通过指定 ShutdownMode 的属性值来进行设置。 对ShutdownMode选项的更改,可以直接在App.xaml中更改&a…

coinex // 撮合引擎 逻辑流程 (两种数据源 初始化源和前端源)

目录 1 生产者 数据源 1.1. match-server 一启动 初始化数据 自动查询数据库 查询level2要展示的数据 1.2 match-server接收 前端发给Exchange-server的数据 2. 将查询/接受的数据EntrustOrder 转成 Order 解耦 过滤掉不要的属性 3.Order转成 OrderEvent 4. 分配序号发布…