Franka Linux 设置实时内核 PREEMPT_RT
为了使用 控制您的机器人libfranka
,工作站 PC 上的控制器程序必须在内核下以实时优先级PREEMPT_RT
运行 。本节介绍了修补内核以支持 PREEMPT_RT
并创建安装包的过程。
内核不支持 NVIDIA 二进制驱动程序PREEMPT_RT
。
sudo apt-get install build-essential bc curl ca-certificates gnupg2 libssl-dev lsb-release libelf-dev bison flex dwarves zstd libncurses-dev
然后,您必须决定使用哪个内核版本。要找到您当前正在使用的版本,请使用。实时补丁仅适用于部分内核版本,请参阅 https://www.kernel.org/pub/linux/kernel/projects/rt/。我们建议选择最接近您当前使用的版本。如果您选择其他版本,只需替换数字即可。决定版本后,使用下载源文件:uname -r
curl
对于使用内核版本 4.14.12 测试的 Ubuntu 16.04:
curl -SLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.xz curl -SLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.sign curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.12-rt10.patch.xz curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.12-rt10.patch.sign
对于使用内核版本 5.4.19 测试的 Ubuntu 18.04:
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.4.19.tar.xz curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.4.19.tar.sign curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-5.4.19-rt10.patch.xz curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-5.4.19-rt10.patch.sign
对于使用内核版本 5.9.1 测试的 Ubuntu 20.04:
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.sign curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.9/patch-5.9.1-rt20.patch.xz curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.9/patch-5.9.1-rt20.patch.sign
并使用以下命令解压缩:
xz -d *.xz
验证文件完整性
这些.sign
文件可用于验证下载的文件是否被损坏或篡改。此处显示的步骤改编自 Linux 内核档案,有关该过程的更多详细信息,请参阅链接页面。
您可以使用以下方法gpg2
来验证.tar
档案:
gpg2 --verify linux-*.tar.sign
gpg2 --verify patch-*.patch.sign
如果你的输出类似以下内容:
$ gpg2 --verify linux-*.tar.sign gpg: assuming signed data in 'linux-4.14.12.tar' gpg: Signature made Fr 05 Jan 2018 06:49:11 PST using RSA key ID 6092693E gpg: Can't check signature: No public key
您必须先下载签署上述文件的人的公钥。从上面的输出中可以看到,它的 ID 为6092693E
。您可以从密钥服务器获取它:
gpg2 --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 6092693E
对于补丁来说也类似:
gpg2 --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 2872E4CC
请注意,其他内核版本的密钥可能具有不同的 ID,您必须进行相应的调整。
下载密钥后,您现在可以验证源。以下是正确输出的示例:
$ gpg2 --verify linux-*.tar.sign gpg: assuming signed data in 'linux-4.14.12.tar' gpg: Signature made Fr 05 Jan 2018 06:49:11 PST using RSA key ID 6092693E gpg: Good signature from "Greg Kroah-Hartman <gregkh@linuxfoundation.org>" [unknown] gpg: aka "Greg Kroah-Hartman <gregkh@kernel.org>" [unknown] gpg: aka "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E
有关该警告的更多信息,请参阅Linux 内核档案。
编译内核
一旦确定文件已正确下载,您就可以提取源代码并应用补丁:
tar xf linux-*.tar cd linux-*/ patch -p1 < ../patch-*.patch
接下来将当前启动的内核配置复制为新实时内核的默认配置:
cp -v /boot/config-$(uname -r) .config
现在您可以使用此配置作为默认配置来配置构建:
make olddefconfig
make menuconfig
第二条命令会打开一个终端界面,您可以在其中配置抢占模型。使用箭头键导航至General Setup > Preemption Model并选择Fully Preemptible Kernel (Real-Time)。
之后导航至Cryptographic API >用于签名检查的证书 (位于列表最底部)>提供系统范围的可信密钥环> 默认系统密钥环的附加 X.509 密钥
从提示中删除“debian/canonical-certs.pem”并按 Ok。保存此配置并.config
退出 TUI。
如果你更喜欢 GUI而不是TUI,请使用make xconfig
make menuconfig
之后,您就可以编译内核了。由于这是一个漫长的过程,请将多线程选项设置-j
为 CPU 核心数:
make -j$(nproc) deb-pkg
最后,您可以安装新创建的包。确切的名称取决于您的环境,但您要寻找headers
没有后缀images
的包dbg
。要安装:
sudo dpkg -i ../linux-headers-*.deb ../linux-image-*.deb
验证新内核
重新启动系统。Grub 启动菜单现在应该允许您选择新安装的内核。要查看当前正在使用哪一个内核,请查看命令的输出。它应该包含您选择的字符串和版本号。此外,应该存在并包含数字。
uname -a
PREEMPT RT/sys/kernel/realtime1
允许用户为其进程设置实时权限
PREEMPT_RT
内核安装并运行 后,添加一个名为realtime 的组,并将控制机器人的用户添加到该组:
sudo addgroup realtime
sudo usermod -a -G realtime $(whoami)
随后,向/etc/security/limits.conf中的 实时组添加以下限制:
@realtime soft rtprio 99 @realtime soft priority 99 @realtime soft memlock 102400 @realtime hard rtprio 99 @realtime hard priority 99 @realtime hard memlock 102400
您退出并再次登录后将应用这些限制。