Инструменты пользователя

Инструменты сайта


клонирование_os_на_внешнюю_или_внутреннюю_sd_карту

Клонирование системы на внутреннюю/внешнюю карту

АХТУНГ!!

Это уничтожит ВСЕ данные на вашей карте! не забудьте их СОХРАНИТЬ куда подальше

Вы делаете это все на свой страх и риск! ДАННЫЙ ПРИМЕР ДЛЯ ВНУТРЕННЕЙ КАРТЫ. ЗАМЕНИТЕ mmcblk0 на mmcblk1 и INT на EXT для внешней!!!

По сути вся операция идет в четыре этапа:

  1. Разбиентие карты на партиции, форматирование
  2. Монтирование флеша на одну папку и партиции карты на другую
  3. Копирование из папки в папку :P
  4. Настройка и установка бутлоадера

Самый хреновый - первый. Начнём :)

Разбиение карты а партиции

Для начала надо знать, какие карты и что где вообще:

  • /dev/mtdblock4 - внутренний флеш, партиция 4(где наша система)
  • /dev/mmcblk0 - внутренняя карта
    • /dev/mmcblk0p1
    • /dev/mmcblk0p2
    • /dev/mmcblk0p3
    • /dev/mmcblk0p4
  • /dev/mmcblk1 - внешняя карта
    • /dev/mmcblk1p1
    • /dev/mmcblk1p2
    • /dev/mmcblk1p3
    • /dev/mmcblk1p4

Я разбил внутреннюю карту на 3 партиции(с помощью fdisk, не забыв про флаги совместимости):

  1. vfat 512Mb /dev/mmcblk0p1
  2. ext2 1500Mb /dev/mmcblk0p2
  3. swap (все оставшееся от 2гб) /dev/mmcblk0p3

Отформатировал:

mkfs.vfat /dev/mmcblk0p1
mkfs.ext2 /dev/mmcblk0p2
mkswap /dev/mmcblk0p3

И подгрузил модули ядра для дальнейшей работы с картой:

insmod /mnt/initfs/lib/modules/2.6.21-omap1/mbcache.ko
insmod /mnt/initfs/lib/modules/2.6.21-omap1/ext2.ko

На этом часть 1 кончилась :)

Монтирование

mkdir /os
mkdir /card
mount /dev/mmcblk0p2 /card
mount -t jffs2 -o ro /dev/mtdblock4 /os

Перенос

tar cf - -C /os . | tar xf - -C /card
umount /os
umount /card
rmdir /os
rmdir /card

Бутлоадер

Качаем утилиту initfs_flasher

Распаковываем:

tar zxf initfs_flasher.tgz

И редактируем конфиг:

vi bootmenu.conf.n8*.example
mv bootmenu.conf.n8*.example bootmenu.conf

Вот в такой:

MENU_TIMEOUT=10
MENU_MIN=1  
MENU_1_NAME="SD card, partition 2, ext2"
MENU_1_ID="mmc2"
MENU_1_DEVICE="${INT_CARD}p2"
MENU_1_MODULES="mbcache jbd ext2"
MENU_1_FSTYPE="ext2"
MENU_1_FSOPTIONS="noatime"
[ -d "/sys/block/${INT_CARD}/${MENU_2_DEVICE}" ] || MENU_2_NAME="(${MENU_2_NAME}) N/A"
MENU_2_NAME="Power off"
MENU_2_ID="off"
MENU_MAX=2

Шьём, запустив initfs_flash

sudo chmod +x initfs_flash && sudo ./initfs_flash

Отвечаем yes на все вопросы:

  • Are you sure to continue?
  • Remove unneeded extra (and factory testing) stuff?
  • bootmenu.conf found, do you want to add it to initfs? (Если этого вопроса так и не было, значит что-то не так)
  • Ready for flashing this image?

После прошики не ребутимся, а жмём Ctrl+C

Теперь надо настроить вызов бутменю. Если мы хотим, что бы оно появлялось всегда, то

sudo chroot /mnt/initfs cal-tool --set-root-device ask:mmc2

иначе ask: надо убрать, тоесть

sudo chroot /mnt/initfs cal-tool --set-root-device mmc2

Так мы поставили пункт меню по-дефолту. Если приспичит грузиться изнутри, жмем Home при включении и выбираем Internal Flash. Всё, reboot и девайс грузится с внутренней SD карты, наличие свопа (/mmcblk0p3) проверяется командой free.

Завершающий штрих:

открываем '/usr/sbin/osso-mmc-unmount.sh'

Ищем кусок

if [ $? = 0]; then
umount $MP 2> /dev/null
RC=$?
else

и заменяем строку

umount $MP 2> /dev/null

на

if ["$MP" != "/"]; then umount $MP 2> /dev/null; fi



Готово!


(C)Xlab

клонирование_os_на_внешнюю_или_внутреннюю_sd_карту.txt · Последние изменения: 2009/11/21 22:22 — dik