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

Материал из FRUCT Maemo wiki (Russian)
(Различия между версиями)
Перейти к: навигация, поиск
(Проникновение в загрузочную файловую систему initfs)
(Альтернативная загрузка)
 
(не показаны 4 промежуточные версии 2 участников)
Строка 2: Строка 2:
  
 
=={{PAGENAME}}==
 
=={{PAGENAME}}==
В данной статье рассматриваются процедуры расширенной загрузки и опции конфигурации.  Для подавляющего большинства людей статья [[Загрузка с карты флэш памяти]] будет содержать всю необходимую информацию.   
+
В данной статье рассматриваются процедуры продвинутой загрузки и варианты конфигурации, хотя статья [[Загрузка с флеш-карты]] содержит информацию, достаточную для подавляющего большинства пользователей.   
  
 
__TOC__
 
__TOC__
Строка 8: Строка 8:
 
=== Альтернативная загрузка ===
 
=== Альтернативная загрузка ===
  
Процесс настройки альтернативной загрузки подобен [[загрузке с карты флэш памяти]].
+
Процесс настройки альтернативной загрузки подобен привденному в статье [[Загрузка с флеш-карты]].
Убедитесь, что первый раздел диска – раздел с файловой системой FAT – это все упрощает.
+
Убедитесь, что первый раздел диска – раздел с файловой системой FAT. Это все упрощает.
  
 
Пример расположения разделов на карте емкостью 8 Гб:
 
Пример расположения разделов на карте емкостью 8 Гб:
Строка 19: Строка 19:
 
* 512 Mб – логический тест 3 (Diablo)
 
* 512 Mб – логический тест 3 (Diablo)
  
Имейте в виду, что загрузочная файловая система initfs ядра поддерживает ограниченное количество разделов; оно может быть увеличено до 6, но не больше. Для этого требуется отредактировать /home/user/local/bin/initfs_flasher/initfs.bootmenu.jffs2, добавив узлы dev, используя mknod
+
Имейте в виду, что загрузочная файловая система ядра initfs поддерживает ограниченное количество разделов. Оно может быть увеличено до 6, но не более. Для этого требуется отредактировать /home/user/local/bin/initfs_flasher/initfs.bootmenu.jffs2, добавив узлы dev, используя mknod
 
(например, mknod -m600 initfs/dev/mmcblk0p5 b 254 5).
 
(например, mknod -m600 initfs/dev/mmcblk0p5 b 254 5).
  
Строка 25: Строка 25:
 
  TARGET=/dev/mmcblk0p5 ./nupgrade.sh 1
 
  TARGET=/dev/mmcblk0p5 ./nupgrade.sh 1
  
Чтобы создать первоначальные образы операционных систем Diablo/Chinook, следуйте инструкциям по [[Модифицированию образа корня]]. Если извлечен образ rootfs.jffs2, можно следовать инструкциям по установке и синхронизировать rootfs при помощи rsync на планшет.
+
Чтобы создать первоначальные образы операционных систем Diablo/Chinook, следуйте инструкциям по [[Модификация образа root|Модифицированию образа root]]. Если извлечен образ rootfs.jffs2, можно следовать инструкциям по установке и синхронизировать rootfs при помощи rsync на планшет.
  
 
Используйте следующий сценарий:
 
Используйте следующий сценарий:
Строка 77: Строка 77:
 
=== Сообщения, сопровождающие загрузку ===
 
=== Сообщения, сопровождающие загрузку ===
  
При желании увидеть журнал загрузки ядра или результат использования команды dmesg при загрузке, следуйте инструкциям (выражаем благодарность пользователю [[User:qwerty12|qwerty12]] за указатели)
+
При желании увидеть журнал загрузки ядра или результат использования команды dmesg при загрузке, следуйте инструкциям ниже (выражаем благодарность пользователю [[User:qwerty12|qwerty12]] за указатели).
  
Проверьте, чтобы загрузочная файловая система initfs отвечала последним требованиям и существовал данный файл:
+
Проверьте, чтобы загрузочная файловая система initfs отвечала последним требованиям и существовал файл
 
  /mnt/initfs/usr/bin/fb_update_mode
 
  /mnt/initfs/usr/bin/fb_update_mode
 
Если нет, установите меню загрузки/initfs, предложенные пользователем fanoush.
 
Если нет, установите меню загрузки/initfs, предложенные пользователем fanoush.
  
Войдите в систему и снова установите загрузочную файловую систему initfs так, чтобы можно было ее редактировать напрямую.
+
Войдите в систему и снова установите загрузочную файловую систему initfs так, чтобы можно было редактировать ее напрямую.
 
   mount -o remount,rw /mnt/initfs
 
   mount -o remount,rw /mnt/initfs
  
Строка 123: Строка 123:
 
=== Проникновение в загрузочную файловую систему initfs ===
 
=== Проникновение в загрузочную файловую систему initfs ===
  
'''Внимание''' – при работе с загрузочной файловой системой initfs и прошивкой планшета могут возникнут трудности.
+
'''Внимание''' – ошибки при работе с загрузочной файловой системой initfs и прошивкой планшета могут привести к поломке планшета.  
  
Обратите внимание: Инструменты и данные, используемые во время прошивки, следует хранить в файловых системах Linux – не на FAT/FAT32.
+
Обратите внимание: Инструменты и данные, используемые во время прошивки, следует хранить в файловых системах Linux – не FAT/FAT32.
  
В случае уверенности в своих силах можно непосредственно отредактировать загрузочную файловую систему initfs, если установить ее в режиме чтения записи:
+
В случае уверенности в своих силах можно непосредственно отредактировать загрузочную файловую систему initfs, если установить ее в режиме чтения и записи (read-write):
 
   mount -oremount,rw /mnt/initfs
 
   mount -oremount,rw /mnt/initfs
 
   vi $random_files
 
   vi $random_files
Строка 134: Строка 134:
 
   mount -oremount,ro /mnt/initfs
 
   mount -oremount,ro /mnt/initfs
  
Данная процедура может быть произвольно опасна, если раздел initfs практически заполнен (это справедливо в отношении любой операционной системы до Diablo), так как в загрузочной файловой системе initfs закончится свободное место при сохранении в силу того, как работают системы jffs2/flash. В сущности, может возникнуть ситуация, при которой даже команда rm file возвращает сообщение «нет свободного места на устройстве». Обновление для Diablo увеличило раздел initfs с 2 Mб до 4 Mб, поэтому здесь достаточно свободного места для надлежащей работы программы очистки памяти от ненужных данных jffs2 (при условии, что оно снова не занято).
+
Данная процедура иногда может быть опасна, если раздел initfs сильно заполнен (это справедливо в отношении любой операционной системы до Diablo), так как в загрузочной файловой системе initfs может закончиться свободное место при сохранении в силу специфики работы системы jffs2/flash. В сущности, может возникнуть ситуация, при которой даже команда rm file возвращает сообщение «нет свободного места на устройстве». Обновление для Diablo увеличило раздел initfs с 2 Mб до 4 Mб, поэтому здесь достаточно свободного места для надлежащей работы программы очистки памяти от ненужных данных jffs2 (при условии, что оно снова не будет занято).
  
 
Более безопасный подход (взят из сценария пользователя fanoush):
 
Более безопасный подход (взят из сценария пользователя fanoush):
Строка 158: Строка 158:
 
После этого перезагрузитесь (/sbin/reboot) как можно быстрее. Демоны dsme и bme  запускаются из старой загрузочной файловой системы initfs. Перепрошивка лежащей в основе файловой системы – просто неблагодарное занятие. Кэширование, выполненное до прошивки, не решает проблему полностью.
 
После этого перезагрузитесь (/sbin/reboot) как можно быстрее. Демоны dsme и bme  запускаются из старой загрузочной файловой системы initfs. Перепрошивка лежащей в основе файловой системы – просто неблагодарное занятие. Кэширование, выполненное до прошивки, не решает проблему полностью.
  
На данном этапе возможно станет понятным, что использование сценария пользователя fanoush и добавление нескольких дополнительных команд для интерфейса командной строки и так далее гораздо легче, чем выполнение всего этого вручную. Или можно запустить еще один командный процессор, пока сценарий initfs_flash ожидает ответа (включая telnet/dropbear/bootmenu.conf?) и модифицировать содержание в initfs_flasher/initfs/.
+
На данном этапе возможно станет понятным, что использование сценария пользователя fanoush и добавление нескольких дополнительных команд для интерфейса командной строки и так далее гораздо легче, чем выполнение всего этого вручную. Или можно запустить еще один командный процессор (shell), пока сценарий initfs_flash ожидает ответа (включая telnet/dropbear/bootmenu.conf?), и модифицировать содержание в initfs_flasher/initfs/.
  
  

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