Продвинутая загрузка
(Новая страница: «Category:Users») |
(→Альтернативная загрузка) |
||
(не показаны 16 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
− | [[Category: | + | [[Category:Пользователи]] |
+ | |||
+ | =={{PAGENAME}}== | ||
+ | В данной статье рассматриваются процедуры продвинутой загрузки и варианты конфигурации, хотя статья [[Загрузка с флеш-карты]] содержит информацию, достаточную для подавляющего большинства пользователей. | ||
+ | |||
+ | __TOC__ | ||
+ | |||
+ | === Альтернативная загрузка === | ||
+ | |||
+ | Процесс настройки альтернативной загрузки подобен привденному в статье [[Загрузка с флеш-карты]]. | ||
+ | Убедитесь, что первый раздел диска – раздел с файловой системой FAT. Это все упрощает. | ||
+ | |||
+ | Пример расположения разделов на карте емкостью 8 Гб: | ||
+ | * 2 Гб - основной раздел vfat | ||
+ | * 2 Гб - основной раздел для повседневного использования | ||
+ | * 2 Гб - основной раздел Debian | ||
+ | * 512 Mб – логический тест 1 (Diablo) | ||
+ | * 512 Mб – логический тест 2 (Chinook) | ||
+ | * 512 Mб – логический тест 3 (Diablo) | ||
+ | |||
+ | Имейте в виду, что загрузочная файловая система ядра initfs поддерживает ограниченное количество разделов. Оно может быть увеличено до 6, но не более. Для этого требуется отредактировать /home/user/local/bin/initfs_flasher/initfs.bootmenu.jffs2, добавив узлы dev, используя mknod | ||
+ | (например, mknod -m600 initfs/dev/mmcblk0p5 b 254 5). | ||
+ | |||
+ | При клонировании можно отредактировать файл nupgrade.sh, удалив строку '''TARGET=''', и выполнить: | ||
+ | TARGET=/dev/mmcblk0p5 ./nupgrade.sh 1 | ||
+ | |||
+ | Чтобы создать первоначальные образы операционных систем Diablo/Chinook, следуйте инструкциям по [[Модификация образа root|Модифицированию образа root]]. Если извлечен образ rootfs.jffs2, можно следовать инструкциям по установке и синхронизировать rootfs при помощи rsync на планшет. | ||
+ | |||
+ | Используйте следующий сценарий: | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # This script connects to the tablet and sends the selected rootfs to the selected partition | ||
+ | |||
+ | FLASHER3=/everything/Downloads/Hardware/nokia_n800/flasher-3.0 | ||
+ | F_IMAGE=/everything/Downloads/Hardware/nokia_n800/RX-34_2008SE_2.2007.51-3_PR_COMBINED_MR0_ARM.bin | ||
+ | IMAGE_DIR=chinook_fiasco | ||
+ | PART=/dev/mmcblk0p6 | ||
+ | |||
+ | mkdir -p $IMAGE_DIR | ||
+ | |||
+ | # unpack fiasco | ||
+ | (cd $IMAGE_DIR; $FLASHER3 -F $F_IMAGE -u) | ||
+ | |||
+ | # https://wiki.maemo.org/Modifying_the_root_image | ||
+ | mknod /tmp/mtdblock0 b 31 0 | ||
+ | modprobe loop | ||
+ | losetup /dev/loop0 $IMAGE_DIR/rootfs.jffs2 | ||
+ | modprobe block2mtd | ||
+ | modprobe mtdblock | ||
+ | # Note that on a host running 2.6.27-rc2 (and probably *much* earlier), the ,128KiB sets the erase size. | ||
+ | echo "/dev/loop0,128KiB" > /sys/module/block2mtd/parameters/block2mtd | ||
+ | modprobe jffs2 | ||
+ | mkdir /tmp/jffs2 | ||
+ | # mount the rootfs ro | ||
+ | mount -t jffs2 -o ro /tmp/mtdblock0 /tmp/jffs2 | ||
+ | |||
+ | # copy files | ||
+ | ssh root@nut insmod /mnt/initfs/lib/modules/2.6.21-omap1/ext2.ko \; mkdir /tst \; mount $PART -o noatime /tst | ||
+ | (cd /tmp/jffs2;tar cf - . | ssh root@nut cd /tst\;tar xf -) | ||
+ | # rsync may not work | ||
+ | # rsync -av /tmp/jffs2/ root@nut:/tst/ | ||
+ | ssh root@nut umount /tst \; rmdir /tst | ||
+ | |||
+ | #clean up | ||
+ | umount /tmp/jffs2 | ||
+ | rmmod jffs2 | ||
+ | rmmod mtdblock | ||
+ | rmmod block2mtd | ||
+ | losetup -d /dev/loop0 | ||
+ | rm -f /tmp/mtdblock0 | ||
+ | rmdir /tmp/jffs2 | ||
+ | rm -rf $IMAGE_DIR | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | === Сообщения, сопровождающие загрузку === | ||
+ | |||
+ | При желании увидеть журнал загрузки ядра или результат использования команды dmesg при загрузке, следуйте инструкциям ниже (выражаем благодарность пользователю [[User:qwerty12|qwerty12]] за указатели). | ||
+ | |||
+ | Проверьте, чтобы загрузочная файловая система initfs отвечала последним требованиям и существовал файл | ||
+ | /mnt/initfs/usr/bin/fb_update_mode | ||
+ | Если нет, установите меню загрузки/initfs, предложенные пользователем fanoush. | ||
+ | |||
+ | Войдите в систему и снова установите загрузочную файловую систему initfs так, чтобы можно было редактировать ее напрямую. | ||
+ | mount -o remount,rw /mnt/initfs | ||
+ | |||
+ | Теперь получите несколько модулей ядра здесь: | ||
+ | http://fanoush.wz.cz/maemo/modules-diablo-2.6.21-200842maemo1.tar.gz | ||
+ | |||
+ | и скопируйте 4 модуля из | ||
+ | ./drivers/video/console/ | ||
+ | в | ||
+ | /mnt/initfs/lib/modules/`uname -r`/ | ||
+ | |||
+ | Извлеките их на хост и выполните: | ||
+ | scp drivers/video/console/* root@nut:/mnt/initfs/lib/modules/2.6.21-omap1/ | ||
+ | |||
+ | Теперь для каждого меню загрузки, где необходим журнал загрузки, отредактируйте файл /mnt/initfs/bootmenu.sh и добавьте | ||
+ | softcursor bitblit font fbcon | ||
+ | во все строки MENU_N_MODULES= | ||
+ | |||
+ | Также добавьте подобную строку (где MENU_2 будет другим): | ||
+ | MENU_2_FBMODE="auto" | ||
+ | |||
+ | Например: | ||
+ | MENU_4_NAME="Diablo Test" | ||
+ | MENU_4_ID="mmc5" | ||
+ | MENU_4_DEVICE="${INT_CARD}p5" | ||
+ | MENU_4_MODULES="mbcache ext2 softcursor bitblit font fbcon" | ||
+ | MENU_4_FSTYPE="ext2" | ||
+ | MENU_4_FSOPTIONS="noatime" | ||
+ | MENU_4_FBMODE="auto" | ||
+ | [ -d "/sys/block/${INT_CARD}/${MENU_4_DEVICE}" ] || MENU_4_NAME="(${MENU_4_NAME}) N/A" | ||
+ | |||
+ | Наконец, снова установите загрузочную файловую систему initfs в режим только для чтения и перезагрузитесь. | ||
+ | mount -oremount,ro /mnt/initfs/ | ||
+ | |||
+ | После того, как система загрузится, выполните | ||
+ | /mnt/initfs/usr/bin/fb_update_mode manual | ||
+ | В противном случае воспроизведение на экран будет выполняться медленно. | ||
+ | |||
+ | === Проникновение в загрузочную файловую систему initfs === | ||
+ | |||
+ | '''Внимание''' – ошибки при работе с загрузочной файловой системой initfs и прошивкой планшета могут привести к поломке планшета. | ||
+ | |||
+ | Обратите внимание: Инструменты и данные, используемые во время прошивки, следует хранить в файловых системах Linux – не FAT/FAT32. | ||
+ | |||
+ | В случае уверенности в своих силах можно непосредственно отредактировать загрузочную файловую систему initfs, если установить ее в режиме чтения и записи (read-write): | ||
+ | mount -oremount,rw /mnt/initfs | ||
+ | vi $random_files | ||
+ | |||
+ | Не забудьте вернуть эту загрузочную файловую систему обратно: | ||
+ | mount -oremount,ro /mnt/initfs | ||
+ | |||
+ | Данная процедура иногда может быть опасна, если раздел initfs сильно заполнен (это справедливо в отношении любой операционной системы до Diablo), так как в загрузочной файловой системе initfs может закончиться свободное место при сохранении в силу специфики работы системы jffs2/flash. В сущности, может возникнуть ситуация, при которой даже команда rm file возвращает сообщение «нет свободного места на устройстве». Обновление для Diablo увеличило раздел initfs с 2 Mб до 4 Mб, поэтому здесь достаточно свободного места для надлежащей работы программы очистки памяти от ненужных данных jffs2 (при условии, что оно снова не будет занято). | ||
+ | |||
+ | Более безопасный подход (взят из сценария пользователя fanoush): | ||
+ | cd somewhere_on_a_linux_fs | ||
+ | mkdir initfs.orig | ||
+ | mount -t jffs2 /dev/mtdblock3 initfs.orig | ||
+ | cp -a initfs.orig initfs | ||
+ | umount initfs.orig | ||
+ | # edit intifs/... | ||
+ | |||
+ | В этом случае после редактирования можно создать jffs2 и записать его | ||
+ | mkfs.jffs2 -r initfs -o my_initfs.jffs2 -e 128 -l -n | ||
+ | sync | ||
+ | chroot /mnt/initfs mount -t jffs2 -o remount,ro /dev/mtdblock3 / | ||
+ | echo " *** caching old initfs to memory (for crash prevention)" | ||
+ | # block level, probably useless | ||
+ | dd if=/dev/mtdblock3 of=/dev/null bs=65536 2>/dev/null | ||
+ | # file level, read all interesting stuff (should be enough to cache dsme and bme) | ||
+ | tar cf - /mnt/initfs/usr /mnt/initfs/lib /mnt/initfs/bin /mnt/initfs/sbin >/dev/null 2>/dev/null | ||
+ | flash_eraseall -j /dev/mtd3 | ||
+ | echo " *** flashing $1 image ..." | ||
+ | nandwrite -a -p /dev/mtd3 $1 | ||
+ | После этого перезагрузитесь (/sbin/reboot) как можно быстрее. Демоны dsme и bme запускаются из старой загрузочной файловой системы initfs. Перепрошивка лежащей в основе файловой системы – просто неблагодарное занятие. Кэширование, выполненное до прошивки, не решает проблему полностью. | ||
+ | |||
+ | На данном этапе возможно станет понятным, что использование сценария пользователя fanoush и добавление нескольких дополнительных команд для интерфейса командной строки и так далее гораздо легче, чем выполнение всего этого вручную. Или можно запустить еще один командный процессор (shell), пока сценарий initfs_flash ожидает ответа (включая telnet/dropbear/bootmenu.conf?), и модифицировать содержание в initfs_flasher/initfs/. | ||
+ | |||
+ | |||
+ | ==== Устройства ==== | ||
+ | |||
+ | Стандартная загрузочная файловая система initfs отсутствует на некоторых устройствах, что может пригодиться на SD картах памяти с большим количеством разделов, поэтому: | ||
+ | mknod -m600 initfs/dev/mmcblk0p3 b 254 3 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk0p4 b 254 4 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk0p5 b 254 5 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk0p6 b 254 6 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk0p7 b 254 7 2>/dev/null | ||
+ | |||
+ | mknod -m600 initfs/dev/mmcblk1p3 b 254 11 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk1p4 b 254 12 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk1p5 b 254 13 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk1p6 b 254 14 2>/dev/null | ||
+ | mknod -m600 initfs/dev/mmcblk1p7 b 254 15 2>/dev/null | ||
+ | |||
+ | |||
+ | [[Category:Пользователи]] | ||
+ | [[Category:Продвинутые]] |
Текущая версия на 23:05, 18 марта 2010
Продвинутая загрузка
В данной статье рассматриваются процедуры продвинутой загрузки и варианты конфигурации, хотя статья Загрузка с флеш-карты содержит информацию, достаточную для подавляющего большинства пользователей.
Содержание |
Альтернативная загрузка
Процесс настройки альтернативной загрузки подобен привденному в статье Загрузка с флеш-карты. Убедитесь, что первый раздел диска – раздел с файловой системой FAT. Это все упрощает.
Пример расположения разделов на карте емкостью 8 Гб:
- 2 Гб - основной раздел vfat
- 2 Гб - основной раздел для повседневного использования
- 2 Гб - основной раздел Debian
- 512 Mб – логический тест 1 (Diablo)
- 512 Mб – логический тест 2 (Chinook)
- 512 Mб – логический тест 3 (Diablo)
Имейте в виду, что загрузочная файловая система ядра initfs поддерживает ограниченное количество разделов. Оно может быть увеличено до 6, но не более. Для этого требуется отредактировать /home/user/local/bin/initfs_flasher/initfs.bootmenu.jffs2, добавив узлы dev, используя mknod (например, mknod -m600 initfs/dev/mmcblk0p5 b 254 5).
При клонировании можно отредактировать файл nupgrade.sh, удалив строку TARGET=, и выполнить:
TARGET=/dev/mmcblk0p5 ./nupgrade.sh 1
Чтобы создать первоначальные образы операционных систем Diablo/Chinook, следуйте инструкциям по Модифицированию образа root. Если извлечен образ rootfs.jffs2, можно следовать инструкциям по установке и синхронизировать rootfs при помощи rsync на планшет.
Используйте следующий сценарий:
#!/bin/bash # This script connects to the tablet and sends the selected rootfs to the selected partition FLASHER3=/everything/Downloads/Hardware/nokia_n800/flasher-3.0 F_IMAGE=/everything/Downloads/Hardware/nokia_n800/RX-34_2008SE_2.2007.51-3_PR_COMBINED_MR0_ARM.bin IMAGE_DIR=chinook_fiasco PART=/dev/mmcblk0p6 mkdir -p $IMAGE_DIR # unpack fiasco (cd $IMAGE_DIR; $FLASHER3 -F $F_IMAGE -u) # https://wiki.maemo.org/Modifying_the_root_image mknod /tmp/mtdblock0 b 31 0 modprobe loop losetup /dev/loop0 $IMAGE_DIR/rootfs.jffs2 modprobe block2mtd modprobe mtdblock # Note that on a host running 2.6.27-rc2 (and probably *much* earlier), the ,128KiB sets the erase size. echo "/dev/loop0,128KiB" > /sys/module/block2mtd/parameters/block2mtd modprobe jffs2 mkdir /tmp/jffs2 # mount the rootfs ro mount -t jffs2 -o ro /tmp/mtdblock0 /tmp/jffs2 # copy files ssh root@nut insmod /mnt/initfs/lib/modules/2.6.21-omap1/ext2.ko \; mkdir /tst \; mount $PART -o noatime /tst (cd /tmp/jffs2;tar cf - . | ssh root@nut cd /tst\;tar xf -) # rsync may not work # rsync -av /tmp/jffs2/ root@nut:/tst/ ssh root@nut umount /tst \; rmdir /tst #clean up umount /tmp/jffs2 rmmod jffs2 rmmod mtdblock rmmod block2mtd losetup -d /dev/loop0 rm -f /tmp/mtdblock0 rmdir /tmp/jffs2 rm -rf $IMAGE_DIR
Сообщения, сопровождающие загрузку
При желании увидеть журнал загрузки ядра или результат использования команды dmesg при загрузке, следуйте инструкциям ниже (выражаем благодарность пользователю qwerty12 за указатели).
Проверьте, чтобы загрузочная файловая система initfs отвечала последним требованиям и существовал файл
/mnt/initfs/usr/bin/fb_update_mode
Если нет, установите меню загрузки/initfs, предложенные пользователем fanoush.
Войдите в систему и снова установите загрузочную файловую систему initfs так, чтобы можно было редактировать ее напрямую.
mount -o remount,rw /mnt/initfs
Теперь получите несколько модулей ядра здесь:
http://fanoush.wz.cz/maemo/modules-diablo-2.6.21-200842maemo1.tar.gz
и скопируйте 4 модуля из
./drivers/video/console/
в
/mnt/initfs/lib/modules/`uname -r`/
Извлеките их на хост и выполните:
scp drivers/video/console/* root@nut:/mnt/initfs/lib/modules/2.6.21-omap1/
Теперь для каждого меню загрузки, где необходим журнал загрузки, отредактируйте файл /mnt/initfs/bootmenu.sh и добавьте
softcursor bitblit font fbcon
во все строки MENU_N_MODULES=
Также добавьте подобную строку (где MENU_2 будет другим):
MENU_2_FBMODE="auto"
Например:
MENU_4_NAME="Diablo Test" MENU_4_ID="mmc5" MENU_4_DEVICE="${INT_CARD}p5" MENU_4_MODULES="mbcache ext2 softcursor bitblit font fbcon" MENU_4_FSTYPE="ext2" MENU_4_FSOPTIONS="noatime" MENU_4_FBMODE="auto" [ -d "/sys/block/${INT_CARD}/${MENU_4_DEVICE}" ] || MENU_4_NAME="(${MENU_4_NAME}) N/A"
Наконец, снова установите загрузочную файловую систему initfs в режим только для чтения и перезагрузитесь.
mount -oremount,ro /mnt/initfs/
После того, как система загрузится, выполните
/mnt/initfs/usr/bin/fb_update_mode manual
В противном случае воспроизведение на экран будет выполняться медленно.
Проникновение в загрузочную файловую систему initfs
Внимание – ошибки при работе с загрузочной файловой системой initfs и прошивкой планшета могут привести к поломке планшета.
Обратите внимание: Инструменты и данные, используемые во время прошивки, следует хранить в файловых системах Linux – не FAT/FAT32.
В случае уверенности в своих силах можно непосредственно отредактировать загрузочную файловую систему initfs, если установить ее в режиме чтения и записи (read-write):
mount -oremount,rw /mnt/initfs vi $random_files
Не забудьте вернуть эту загрузочную файловую систему обратно:
mount -oremount,ro /mnt/initfs
Данная процедура иногда может быть опасна, если раздел initfs сильно заполнен (это справедливо в отношении любой операционной системы до Diablo), так как в загрузочной файловой системе initfs может закончиться свободное место при сохранении в силу специфики работы системы jffs2/flash. В сущности, может возникнуть ситуация, при которой даже команда rm file возвращает сообщение «нет свободного места на устройстве». Обновление для Diablo увеличило раздел initfs с 2 Mб до 4 Mб, поэтому здесь достаточно свободного места для надлежащей работы программы очистки памяти от ненужных данных jffs2 (при условии, что оно снова не будет занято).
Более безопасный подход (взят из сценария пользователя fanoush):
cd somewhere_on_a_linux_fs mkdir initfs.orig mount -t jffs2 /dev/mtdblock3 initfs.orig cp -a initfs.orig initfs umount initfs.orig # edit intifs/...
В этом случае после редактирования можно создать jffs2 и записать его
mkfs.jffs2 -r initfs -o my_initfs.jffs2 -e 128 -l -n sync chroot /mnt/initfs mount -t jffs2 -o remount,ro /dev/mtdblock3 / echo " *** caching old initfs to memory (for crash prevention)" # block level, probably useless dd if=/dev/mtdblock3 of=/dev/null bs=65536 2>/dev/null # file level, read all interesting stuff (should be enough to cache dsme and bme) tar cf - /mnt/initfs/usr /mnt/initfs/lib /mnt/initfs/bin /mnt/initfs/sbin >/dev/null 2>/dev/null flash_eraseall -j /dev/mtd3 echo " *** flashing $1 image ..." nandwrite -a -p /dev/mtd3 $1
После этого перезагрузитесь (/sbin/reboot) как можно быстрее. Демоны dsme и bme запускаются из старой загрузочной файловой системы initfs. Перепрошивка лежащей в основе файловой системы – просто неблагодарное занятие. Кэширование, выполненное до прошивки, не решает проблему полностью.
На данном этапе возможно станет понятным, что использование сценария пользователя fanoush и добавление нескольких дополнительных команд для интерфейса командной строки и так далее гораздо легче, чем выполнение всего этого вручную. Или можно запустить еще один командный процессор (shell), пока сценарий initfs_flash ожидает ответа (включая telnet/dropbear/bootmenu.conf?), и модифицировать содержание в initfs_flasher/initfs/.
Устройства
Стандартная загрузочная файловая система initfs отсутствует на некоторых устройствах, что может пригодиться на SD картах памяти с большим количеством разделов, поэтому:
mknod -m600 initfs/dev/mmcblk0p3 b 254 3 2>/dev/null mknod -m600 initfs/dev/mmcblk0p4 b 254 4 2>/dev/null mknod -m600 initfs/dev/mmcblk0p5 b 254 5 2>/dev/null mknod -m600 initfs/dev/mmcblk0p6 b 254 6 2>/dev/null mknod -m600 initfs/dev/mmcblk0p7 b 254 7 2>/dev/null
mknod -m600 initfs/dev/mmcblk1p3 b 254 11 2>/dev/null mknod -m600 initfs/dev/mmcblk1p4 b 254 12 2>/dev/null mknod -m600 initfs/dev/mmcblk1p5 b 254 13 2>/dev/null mknod -m600 initfs/dev/mmcblk1p6 b 254 14 2>/dev/null mknod -m600 initfs/dev/mmcblk1p7 b 254 15 2>/dev/null