Создание microSD-карты с образом

Материал из Wiren Board

Запись полного образа на карточку

  • Скачайте архив с последним образом (расширение .dd, либо .dd.gz, либо img.zip) со страницы releases
  • Распакуйте образ архив с образом

Образ с названием, оканчивающимся на _wb28 предназначен для WB rev. 2.8 и не подходит для Wiren Board Smart Home!

Для Wiren Board Smart Home с серийными номерами больше 300 необходимо использовать образ с "newwifi" в названии

В стандартном образе нет раздела подкачки, из-за этого может не хватать оперативной памяти для полного обновления ОС (через apt-get), решением может быть как создание отдельного файла подкачки, так и создание раздела


Для Windows

  • скачайте программу для записи образов, например (Win32DiskImager)
  • вставьте флеш-карту в ридер
  • Найдите диск (например "F:"), соответствующий карте. Диск появляется в списке дисков, когда вы вставляете флешку.
  • Проигнорируйте сообщения о необходимости отформатировать диск перед использованием.
  • убедитесь, что другие программы не используют флеш-карту
  • В программе Win32DiskImager выберите распакованный образ карты, выберите букву диска и нажмите кнопку Write

Для Linux

  • вставьте флеш-карту в ридер
  • отмонтируйте раздел (umount /dev/mmcblk0p1, где /dev/mmcblk0p1 - раздел на флешке)
  • проверьте существование устройства флеш-карты, обычно это /dev/mmcblk0 для встроенного ридера и /dev/sdX (X - буква) - для внешнего.

Название устройства можно посмотреть например в dmesg | tail

  • накатите образ на флеш-карту

Не перепутайте название устройства! Неправильно указав название устройства, вы рискуете навсегда потерять все данные на вашем компьютере!

sudo dd if=sdcard.dd of=/dev/mmcblk0 bs=4M

здесь "sdcard.dd" - путь к распакованному файлу с образом.

Пример для Linux:

wget https://github.com/contactless/wirenboard/releases/download/0.6-20140614/sdcard_20140614.img.zip
unzip sdcard_20140614.img.zip
umount /dev/mmcblk0p2
umount /dev/mmcblk0p1
sudo dd if=sdcard_20140614.img of=/dev/mmcblk0 bs=4M conv=fdatasync
sync

Расширение корневого раздела

По-умолчанию образ рассчитан на флеш-карту размером 4Гб и в нём нет раздела подкачки памяти (swap-раздела). Если ваша флеш-карта большего размера, то рекомендуется создать swap раздел, а так же расширить корневой раздел так, чтобы он занимал всё доступное пространство.

  • Для начала нужно создать раздел подкачки (если вы считаете, что в нём нет необходимости, то можно пропустить этот шаг). Раздела размером 128Мб должно быть достаточно. Разместить раздел нужно в конце диска, чтобы осталось место для расширения корневого раздела (для этого можно воспользоваться дружелюбной утилитой cfdisk).
cfdisk /dev/mmcblk0

Далее нужно расширить корневой раздел на всё оставшееся место.

Менять таблицу разделов на этот раз будем при помощи утилиты fdisk. Процедура расширения раздела проста, мы удалим текущий раздел, а затем создадим новый, начинающийся ровно с того же цилиндра, но заканчивающийся на цилиндре перед наши разделом подкачки. При этом изменяться будет только таблица разделов, данные самих разделов меняться не будут.

  • Запустим fdisk.
fdisk -u /dev/mmcblk0
  • Выводим текущую таблицу разделов
Command (m for help): p

Disk /dev/mmcblk0: 8001 MB, 8001683456 bytes
4 heads, 16 sectors/track, 244192 cylinders, total 15628288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192       40959       16384   53  OnTrack DM6 Aux3
/dev/mmcblk0p2           40960     7796735     3877888   83  Linux
/dev/mmcblk0p3        13628288    15628287     1000000   83  Linux

Стартовый цилиндр изменяемого нами раздела имеет номер 40960, запомним его, он потребуется нам далее.

  • Удалим раздел
Command (m for help): d
Partition number (1-4): 2

Command (m for help): p

Disk /dev/mmcblk0: 8001 MB, 8001683456 bytes
4 heads, 16 sectors/track, 244192 cylinders, total 15628288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192       40959       16384   53  OnTrack DM6 Aux3
/dev/mmcblk0p3        13628288    15628287     1000000   83  Linux
  • И создадим заново, обратив внимание на то, что стартовый цилиндр и номер создаваемого раздела, должны быть в точности таким же, как у удаленного т.е. 40960 и 2.
Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (2048-15628287, default 2048): 40960
Last sector, +sectors or +size{K,M,G} (40960-13628287, default 13628287): '''<Enter>'''
  • Проверяем, что всё правильно, убеждаемся, что каждый следующий раздел начинается со следующего цилиндра от предыдущего.
Command (m for help): p

Disk /dev/mmcblk0: 8001 MB, 8001683456 bytes
4 heads, 16 sectors/track, 244192 cylinders, total 15628288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192       40959       16384   53  OnTrack DM6 Aux3
/dev/mmcblk0p2           40960    13628287     6793664   83  Linux
/dev/mmcblk0p3        13628288    15628287     1000000   83  Linux
  • Записываем изменения на диск.
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Устройство или ресурс занято.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
  • Выходим из parted набрав q и и просим ядро обновить свою информацию о разделе командой partx.
root@wirenboard:~# partx /dev/mmcblk0p2
# 2:     40960- 13628287 ( 13587328 sectors,   6956 MB)
  • Обновляем таблицу ФС для нового размера командой resize2fs.
root@wirenboard:~# resize2fs /dev/mmcblk0p2 
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
[ 1159.480000] EXT4-fs (mmcblk0p2): resizing filesystem from 969472 to 1698416 blocks
[ 1159.910000] EXT4-fs (mmcblk0p2): resized filesystem to 1698416
The filesystem on /dev/mmcblk0p2 is now 1698416 blocks long.

Перезагружаем машину и убеждаемся, что всё прошло хорошо.

root@wirenboard:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          6.4G  801M  5.4G  13% /
...

Осталось доделать раздел подкачки.

  • Форматируем раздел подкачки
root@wirenboard:~# mkswap /dev/mmcblk0p3
  • Добавляем раздел подкачки в /etc/fstab и активируем его.
echo "/dev/mmcblk0p3   swap        swap   defaults            0   0" >> /etc/fstab
swapon -a

Создание образа по частям

не нужно в случае записи полного образа по инструкции выше

Сборка вместе

Согласно [1]

  • разбить флешку на два раздела
  • записать u-boot на первый раздел
  • создать фс на втором разделе
  • скопировать rootfs на второй раздел

Сначала надо выяснить имя устройства с флеш-картой. Воспользуйтесь поиском. Можно, к примеру, попробовать запустить gparted и посмотреть в нём. Устройство может быть /dev/sdb, а может выглядеть и как /dev/mmcblk0

Найдя устройство создаем переменную чтобы облегчить себе использование нижеследующих комманд

MYDISK="/dev/sdb"

Между кавычками пишем название своего устройства с флеш-картой.

Таблица разделов

Перед запуском убедитесь, что разделы на карточке не примонтированы.

Теперь с помощью скрипта создадим разделы на карте. [2]

Скачиваем скрипт:

wget [https://raw.github.com/contactless/wirenboard/master/image/create_partitions.sh]

Запускаем скрипт и указываем ему имя устройства с флеш-картой:

sudo bash create_partitions.sh $MYDISK

Загрузчик

См. Сборка U-Boot.

Готовый образ u-boot для записи в раздел: u-boot

Скачиваем образ

wget "https://github.com/contactless/wirenboard/blob/master/contrib/u-boot/u-boot.sb.cl25?raw=true" -O u-boot.sb

Теперь выясняем имена разделов на карте. Скрипт выше отработал и разделил карту на разделы, нам надо узнать название первого из этих разделов. Если название устройства microSD-карты имело вид /dev/sdX, то первый раздел будет иметь название /dev/sdX1. Если устройство называлось /dev/mmcblkX , то первый раздел - /dev/mmcblkXp1 (обратите внимание на p перед номером раздела).

Найдя имя первого раздела укажите его тут:

MYDISK1="/dev/sdb1"

Теперь заливаем образ раздела на карту

sudo dd if=u-boot.sb of=$MYDISK1 bs=512 seek=4

Создание фс

Находим название второго раздела на флешке и прописываем его в переменную

MYDISK2="/dev/sdb2"

rootfs станет названием этого раздела.

sudo mkfs.ext4 $MYDISK2 -L rootfs

Копирование образа на раздел

Готовый образ (включая ядро, dtbs, модули и прошивки): https://github.com/contactless/wirenboard/releases

См. также Сборка образа

wget https://github.com/contactless/wirenboard/releases/download/0.1/rootfs.tar.gz

Теперь надо примонтировать созданную файловую систему созданную нами ранее. Как это сделать в терминале?

По-умолчанию в Ubuntu она монтируется в /media/$USER/rootfs/. Найдите куда система смонтировалась на вашем компьютере.

Распаковываем образ на раздел:

 sudo tar xfpz rootfs.tar.gz -C /media/$USER/rootfs/


Отмонтируем файловую систему:

umount /media/user/rootfs


Пример

ОС Ubuntu, свежая SD-карта подключенная к встроенному считывателю и определяющаяся как /dev/mmcblk0. Репозиторий https://github.com/contactless/wirenboard/ скачан, мы находимся в его корне.

Образ rootfs.tar.gz находится внутри папки rootfs.

cd image
sudo umount /dev/mmcblk0p1
sudo ./create_partitions.sh  /dev/mmcblk0
sudo dd if=../contrib/u-boot/u-boot.sb  of=/dev/mmcblk0p1 bs=512 seek=4
sudo ./create_fs.sh /dev/mmcblk0p2


# Ubuntu automount:
udisksctl mount -b /dev/mmcblk0p2

#extract rootfs
sudo tar xfpz ../rootfs/rootfs.tar.gz -C /media/$USER/rootfs/

umount /dev/mmcblk0p2


См. также Стандартный образ ФС.