如果这是一个简单的任务,我会先说原谅我的无知。我对 *nix 有足够的了解来设置和解决它,但是这个嵌入式版本有点不同(缺少 90% 以上的标准命令),而且我遇到了障碍。
我有一台运行 QNX 6.5.0 SP1 的设备。我可以通过它的串行端口访问,并且从那里我可以通过超级用户访问 shell。该设备有两个物理网络接口,en0 和 en1。启动时,设备使用 net.mgr 文件设置其网络信息。该文件为每个接口分配 IP 地址,但似乎只支持单个网关。我们正在寻找向第二个以太网端口添加一些东西并且需要一个路由命令,所以我串行到盒子中并使用标准路由命令来添加路由。这按预期工作,但重新启动后未保存更改。
我试图弄清楚如何让额外的路由命令在重新启动后持续存在,但我发现的大多数方法都不起作用。没有cron或类似的东西。我尝试过的事情:
- 修改 net.cfg 文件并添加另一个网关。这不起作用,因为它只使用输入的最后一个网关并且不允许多个
- 修改 net.cfg 文件并添加 route 命令。知道这行不通,但还是尝试了。
- 使用 route 命令添加 /etc/rc.local 文件。文件仍然存在,但似乎在启动时被忽略。
- 使用 route 命令添加 /etc/rc.d/rc.local 文件。(根据http://www.qnx.com/developers/docs/6.5.0/topic/com.qnx.doc.neutrino_user_guide/starting.html?resultof=%22%72%63%2e%6c上的 QNX 文档%6f%63%61%6c%22%20#rc.local)。文件在引导之间仍然存在,但也被忽略。
- 试图修改 /sys/bin/rc.local。我的更改被忽略(未写入文件)。我也无法通过 FTP 关闭该文件,以 0 字节文件的形式出现,而“cat rc.local”显示其内容,我可以根据该内容验证它是否正在使用该文件。尝试了 'cat >rc.local' 并复制旧内容,然后添加我的路由命令,但文件没有更改。chmod -x rc.local 返回文件不存在,但确实存在,我 99% 确定这是在启动时执行的内容。
我在想 /sys/bin 文件夹中的 rc.local 是只读的?我知道两个挂载之一是 /ffs0 并且 /sys/bin 在其中。我尝试使用“mount -uw /ffs0”安装它,进行更改,然后将其翻转回只读,但这似乎不起作用。所以我的想法已经用完了。
首先要了解 QNX 6.X 是有一个可以执行的启动映像。该映像通常包含微内核和基本驱动程序(磁盘等)。然而,对于只有闪存的情况,它可以完全独立(即微内核、驱动程序、每个命令、配置文件等)。在这种情况下,即使有一个包含配置文件(如 /etc/rc.d 中的)和其他目录的硬盘驱动器,也无法修改任何内容。
你可以通过查看 /proc/boot 得到一些提示。/proc 中的所有内容都是引导映像中膨胀到 RAM 中的内容。它实际上是一个 RAM 驱动器,因此您在其中看到的就是启动映像中的内容。如果您可以 ftp 关闭它并在其上执行“字符串”命令以查看正在运行的驱动程序和脚本,您可能会幸运地查看启动脚本(这是一个已编译的脚本)。
在正常的 QNX 启动映像(您在链接中看到的)中,启动脚本将在运行磁盘驱动程序后将控制权转移到 /etc/rc.d/rc.sysinit 和 /etc/rc.d/rc.local其他一些必需品。但是像您这样的嵌入式系统不必这样做。这就是您对这些文件的更改没有生效的原因。
我从未听说过/sys/bin/rc.local。这不是常规 QNX 6 安装的一部分,因此无论制造该设备的人添加了什么。sys 目录实际上可能只是回到引导映像 RAM 区域的软链接(这就是为什么你不能在那里更改任何东西,因为它是 RAM)。您可以通过根文件系统(即 sys 所在的位置)上的“ls -lrt”来判断是否如此,并查看它是否是回到 /proc 或其他地方的软链接。
蒂姆