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

Материал из FRUCT Maemo wiki (Russian)
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Category:Users»)
 
(Альтернативная загрузка)
 
(не показаны 16 промежуточных версий 3 участников)
Строка 1: Строка 1:
[[Category:Users]]
+
[[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
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты