Это уничтожит ВСЕ данные на вашей карте! не забудьте их СОХРАНИТЬ куда подальше
Вы делаете это все на свой страх и риск! ДАННЫЙ ПРИМЕР ДЛЯ ВНУТРЕННЕЙ КАРТЫ. ЗАМЕНИТЕ mmcblk0 на mmcblk1 и INT на EXT для внешней!!!
По сути вся операция идет в четыре этапа:
Самый хреновый - первый. Начнём :)
Для начала надо знать, какие карты и что где вообще:
Я разбил внутреннюю карту на 3 партиции(с помощью fdisk, не забыв про флаги совместимости):
Отформатировал:
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 на все вопросы:
После прошики не ребутимся, а жмём 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