Продвинутая загрузка
(→Альтернативная загрузка) |
(→Сообщения, сопровождающие загрузку) |
||
Строка 79: | Строка 79: | ||
При желании увидеть журнал загрузки ядра или результат использования команды dmesg при загрузке, следуйте инструкциям (выражаем благодарность пользователю [[User:qwerty12|qwerty12]] за указатели) | При желании увидеть журнал загрузки ядра или результат использования команды dmesg при загрузке, следуйте инструкциям (выражаем благодарность пользователю [[User:qwerty12|qwerty12]] за указатели) | ||
− | Проверьте, | + | Проверьте, чтобы загрузочная файловая система initfs отвечает последним требованиям и существовал данный файл: |
/mnt/initfs/usr/bin/fb_update_mode | /mnt/initfs/usr/bin/fb_update_mode | ||
Если нет, установите меню загрузки/initfs, предложенные пользователем fanoush. | Если нет, установите меню загрузки/initfs, предложенные пользователем fanoush. | ||
Строка 118: | Строка 118: | ||
После того, как система загрузится, выполните | После того, как система загрузится, выполните | ||
/mnt/initfs/usr/bin/fb_update_mode manual | /mnt/initfs/usr/bin/fb_update_mode manual | ||
− | В противном случае воспроизведение на экране будет выполняться медленно. | + | В противном случае воспроизведение на экране будет выполняться медленно. |
=== Проникновение в загрузочную файловую систему initfs === | === Проникновение в загрузочную файловую систему initfs === |
Версия 23:39, 17 декабря 2009
Продвинутая загрузка
В данной статье рассматриваются процедуры расширенной загрузки и опции конфигурации. Для подавляющего большинства людей статья Загрузка с карты флэш памяти будет содержать всю необходимую информацию.
Содержание |
Альтернативная загрузка
Процесс настройки альтернативной загрузки подобен загрузке с карты флэш памяти. Убедитесь, что первый раздел диска – раздел с файловой системой 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, следуйте инструкциям по Модифицированию образа корня. Если извлечен образ 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, если установить ее в режиме чтения записи:
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 и добавление нескольких дополнительных команд для интерфейса командной строки и так далее гораздо легче, чем выполнение всего этого вручную. Или можно запустить еще один командный процессор, пока сценарий 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