请解释一下我是如何误解这两个命令的:
root@DD-WRT:/tmp/var/log# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "boot"
mtd1: 00180000 00020000 "nvram"
mtd2: 01e00000 00020000 "linux"
mtd3: 01c60000 00020000 "rootfs"
mtd4: 05000000 00020000 "ddwrt"
root@DD-WRT:/tmp/var/log# nvram show >/dev/null
size: 52341 bytes (78731 left)
我的路由器上的闪存页面为 128 kB (0x20000),有 12 个页面 (0x18/0x02) 专用于 NVRAM。那么,为什么我的可用 NVRAM 总数只有一页 (52341+78731 B)?
答案1
由于缺乏答案,我得出结论,这些额外的页面永远不会被写入,所以,是的,NVRAM 可以做得更大。
需要明确的是,这也意味着没有闪存磨损均衡(即,尽管循环 12 个页面会将闪存寿命延长 12 倍,但同一页面正在被覆盖),所以我猜我的路由器可能会在 100,000 次 NVRAM 覆盖后出现故障。另外,我发现庞大的mtd4也完全是空的,所以mtd1只是冰山一角。请参阅下面我使用的简单命令来确认这些点(除了 mtd1 的前半页之外,所有闪存读取都是空的),如果我错了,请纠正我。
当然,开发人员很慷慨地编写了这段代码,而且我知道针对每个系统进行优化会更加复杂,所以我没有抱怨(老实说,除了磨损均衡之外,我不确定我会做什么更多内存,即使我有编写固件的技能)。
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd1 count=1 skip=0
<REDACTED BUT NOT EMPTY>
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd1 count=1 skip=102
<REDACTED BUT NOT EMPTY>
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd1 count=1 skip=103
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd1 count=1 skip=256
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd1 count=1 skip=3071
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd1 count=1 skip=3072
0+0 records in
0+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd4 count=1 skip=0
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd4 count=1 skip=256
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd4 count=1 skip=183839
1+0 records in
1+0 records out
root@DD-WRT:/tmp/var/log# dd if=/dev/mtd4 count=1 skip=183840
0+0 records in
0+0 records out