Продвинутая загрузка

(Различия между версиями)
Перейти к: навигация, поиск
(Сообщения, сопровождающие загрузку)
(Сообщения, сопровождающие загрузку)
Строка 119: Строка 119:
 
После того, как система загрузится, выполните
 
После того, как система загрузится, выполните
 
   /mnt/initfs/usr/bin/fb_update_mode manual
 
   /mnt/initfs/usr/bin/fb_update_mode manual
В противном случае воспроизведение на экране будет выполняться медленно.
+
В противном случае воспроизведение на экран будет выполняться медленно.
  
 
=== Проникновение в загрузочную файловую систему initfs ===
 
=== Проникновение в загрузочную файловую систему initfs ===

Версия 23:51, 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
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты