Если уж точнее, то дело обстоит так (на примере прошивки Олега ...-10 и роутера wl-500gp) -
Bся flash-память роутера делится на 5 областей (местами перекрывающихся):
Code:
0x00000000-0x00020000 : "boot"
0x00020000-0x003f0000 : "linux"
0x000c4000-0x003f0000 : "rootfs"
0x003f0000-0x00400000 : "nvram"
0x003c0000-0x003f0000 : "flashfs"
- boot - загрузчик (бутлоадер), сюда лучше не пытаться писать, может
закончиться необходимостью выпаивания микросхемы с flash-памятью. - linux - сюда записывается файл прошивки при перепрошивке роутера.
- rootfs - часть раздела linux. Содержит корневую файловую систему (~ 3 МБ).
- nvram - в этот раздел пишутся параметры nvram (команда nvram commit).
- flashfs - также является частью раздела linux (идёт внутри него после rootfs).
Размер этого раздела - всё не занятое остальными разделами место (у меня ~ 4 МБ).
Здесь хранится то, что называется flashfs (по факту - один файл в формате .tar.gz).
Раздел доступен для записи. Сюда пишет команда flashfs commit.
Так вот, раздел
rootfs содержит корневую файловую систему в формате
squashfs. Мало того,
что сам раздел защищён от записи (запись в него косвенно идёт только во время перепрошивки,
т.к. он - часть раздела
linux), так ещё и
squashfs - принципиально
read-only файловая система.
После монтирования
squashfs на
/ мы имеем полностью
read-only ФС (мы тут не рассматриваем
/dev и
/proc).
Но после этого на
/tmp монтируется
ramfs (ФС, сидящая в оперативной памяти), и она уже доступна для записи.
Затем в
/tmp создаётся некоторая структура папок. Если присмотреться, некоторые папки в
squashfs - это
символические ссылки на подпапки в
/tmp (
/etc -> /tmp/etc, /usr/local -> /tmp/local, /usr/tmp -> /tmp),
таким образом, в них тоже можно писать.
После этого распаковывается
*.tar.gz-архив, лежащий в
flashfs. Обычно всё его содержимое попадает в
/usr/local/
(который, на самом деле,
/tmp/local/), но это зависит от того, что вы туда сохраните командами :
Code:
flashfs save && flashfs commit
Команда flashfs save сохраняет всё содержимое
/tmp/local/, а также все файлы и папки, пути к которым указаны в файле
/usr/local/.files (если он есть), в архив
/tmp/flash.tar.gz.
Команда flashfs commit записывает этот архив в раздел
flashfs.
Команда flashfs enable записывает в один из параметров
nvram (конкретно, в
boot_local) специальное значение - версию
текущей прошивки. Если при загрузке роутера значение из
nvram равно номеру версии текущей прошивки, то архив из
flashfs распаковывается. Если нет - то не распаковывается. Есть также специальное значение этого параметра - "
enabled"
(задаётся
командой flashfs enabled), при таком значении
flashfs распаковывается независимо от версии текущей прошивки.
Команда flashfs disable очищает этот параметр, так что архив из
flashfs больше при загрузке не распаковывается.
Таким образом, совсем не обязательно каждый раз выполнять
flashfs enable, достаточно одного раза после каждой смены
прошивки или вообще одного раза
flashfs enabled. Вообще, по поводу
flashfs полезно почитать
cat /sbin/flashfs.