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