特别说明:由于本人空闲时间有限,此博客中所有内容均是从本人的个人笔记中摘抄出来,命令行大多以图片形式展示,不能提供复制粘贴功能敬请体谅。此外,第一部分关于在 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,表示实时核可正常运行:
2. Igh 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。