用面向 DD-WRT 的高级提示和技巧向无线路由器添加 Linux 功能(2)
- UID
- 1066743
|
用面向 DD-WRT 的高级提示和技巧向无线路由器添加 Linux 功能(2)
nvram 命令nvram 具有多层含义。首先它是非可变性 RAM (non-volatile RAM) 的缩写,这种 RAM 是一种持久性内存,可在断电时保留数据。路由器内的闪存就是一种 nvram。 nvram 命令用于管理硬件设置,这些设置保存在闪存的最后一块内。这个内存段通常称为 “nvram”。nvram 命令有不同版本,比如 IBM、Cisco、Oracle 和 Apple 版。DD-WRT 内的 nvram 命令非常简单,因为它只是显示和更改分配给变量的值以及删除变量。无选项的情况下运行它可以看到选项和参数:
1
2
| root@linksys:~# nvram
usage: nvram [get name] [set name=value] [unset name] [show]
|
nvram show 显示了路由器上的所有设置,而且设置还不少。可以使用 less 将其分隔为一次一页:
1
| root@linksys:~# nvram show | less
|
或是用 grep 查找特定的变量,比如:
1
| root@linksys:~# nvram show | grep ssh
|
免费的快速提示:如果您无意间禁用了此 Web 界面,但仍有 telnet 或 SSH,可以以这种方式重新启用它:
1
2
3
| root@linksys:~# nvram set http_enable=1
root@linksys:~# nvram commit
root@linksys:~# reboot
|
更改会在重新启动之后应用。还记得 boot_wait 设置吧?GUI 不会让您更改其长度,但 nvram 可以。首先,查明它有多长:
1
2
3
| root@linksys:/etc# nvram show |grep wait
boot_wait=on
wait_time=5
|
我是比较紧张的类型,所以我想要它长 10 秒:
1
2
| root@linksys:/etc# nvram set wait_time=10
root@linksys:~# nvram commit
|
如何清除任何值的变量可参考如下所示:
1
2
| root@linksys:~# nvram set http_enable=""
root@linksys:~# nvram commit
|
如果不想让某个特定的更改在重新启动后仍存在,可以省略 nvram commit,这是在试验阶段可以采用的一种很好的策略,因为仅仅是重新启动就可以放弃更改。
nvram unset [variable] 可以完全删除变量。OpenWrt Wiki 上有一个很好的 nvram 命令参考,即 NVRAM 在 OpenWrt 'WhiteRussian' 上的使用(参见 )。
清除一团糟的配置的最后一个手段是将所有的设置重置为固件的默认设置,方法是通过按下路由器上的 reset 按钮并保持 30 秒,然后重新启动它。这会恢复 DD-WRT 的默认设置,而不是像很多人错误地理解为是恢复最初的固件。
创建第二个分区通常,DD-WRT 映像会占据 4MB 分区,即便闪存是 8MB 或更多,也是如此。可以在未使用的空间创建另一个分区并用其来存储文件。这应该主要是读存储 (read-storage),比如无线热点 splash 和配置页、Web 页、额外的配置文件以及面向 ipkg(针对嵌入式设备的 ItsyPackage Management System)的存储空间。不要将它用于像日志文件这样能生成大量写操作的文件,因为闪存只支持数量有限的写操作并最终会出现故障。现代的闪存都相当耐用,但它仍具有有限的写操作生命期限。用这个很好的旧 df 命令可以看到现有的文件系统:
1
2
3
| root@linksys:/# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 4.0M 4.0M 0 100% /
|
我的路由器具有 8 MB 闪存,那么剩下的那些去哪了呢?它闲置在那,等着被派上用场。访问 Administration > Management 并检查 JFFS2 > Enable 和 Clean JFFS2 > Enable。 单击 Apply Setting,继而 Reboot Router。当它重启时,应该会看到类似下面的结果:
1
2
3
4
| root@linksys:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 4.0M 4.0M 0 100% /
/dev/mtdblock/3 2.3M 196.0K 2.1M 9% /jffs
|
JFFS2(Journalling Flash File System 版本 2)是针对闪存存储媒介设计的。我们先来看看这种闪存属于哪种媒介。它是一种特殊的设备,称为 Memory Technology Device,缩写为 MTD。它不是一种像硬盘和 USB 棒那样的块设备,也不是像键盘或鼠标那样的字符设备。块设备通常以大小固定(比如 512 和 1024 字节)的分区组织而成。而 MTD 则具有大小为 128KB 和更大的擦写块 (eraseblock)。块设备可以做两件事:读区和写区。MTD 可以做三件事:从擦写块读、写到擦写块和擦除擦写块。
紧凑式闪存、SD 卡、USB 棒究其本质都是 MTD。但它们对于操作系统而言更像是块设备,因为它们具有 Flash Translation Layers (FTL),用于在闪存硬件之上模拟块设备。这种 FTL 可以位于主计算机上,也可以位于此设备内的硬件控制器的固件上。如果您愿意牺牲一个 USB 棒(为知识的进步所做的一次伟大的牺牲)并撬开它,那么您很有可能会看到一些 NAND 芯片(原始的闪存芯片)和一个微控制器。
了解有关闪存的几件事情将有助于您的 DD-WRT 探险之旅。第一,NAND 擦写块显示的是全或无(整个块必须在新的数据写上之前先被擦除)。第二,Linux 具有一个 MTD 子系统,和一个用来执行基本任务(比如擦除或向设备写映像)的 mtd 命令。可以在 DD-WRT 上运行无选项的 mtd 命令来查看语法和选项。在 DD-WRT 维基上还可以看到一些关于如何使用 mtd 命令的 how-to 文章,现在您该知道它是怎么回事了吧。第三,nvram 位于最后一个擦写块上,而无论擦写块有多大,它都被以编程的方式限制为 32KB。
命令行提示如下的提示可以为您探索 DD-WRT 提供指导:
- DD-WRT 构建于非常流行的嵌入式 Linux 工具包 BusyBox 之上。BusyBox 包含了核心 Linux 实用工具的精简版。为了节省空间,这里没有提供手册页,所以如果想要了解我们称之为 applet 的 BusyBox 命令,您可以阅读 busybox 手册页(参见 )。您还可以在 /sbin, /usr/bin 上或其他可执行的二进制目录上运行 ls -l /bin,来查看哪些命令是与 BusyBox 相链接的。
- DD-WRT 使用了 BusyBox 自带的 ash shell。在命令行键入 builtin 来查看所有的 shell 插件。
- 与一些成熟的大型 Linux 一样,您可以读取 /proc 和 /sys 伪文件系统来挖据硬件信息,并读取 /etc 中的配置文件。
|
|
|
|
|
|