вторник, 19 ноября 2013 г.

Работа с файловой системой UBIFS развернутой на NAND

Как сохранить образ rootfs развернутой на NAND с файловой системой UBIFS

  1. Для начала, необходимо загрузиться с внешнего носителя.
    Для модуля Compulab CM-T35x процесс сетевой загрузки выглядит примерно так:
    • Подключаем RS232 к консоли модуля. Запускаем терминальную программу;
    • Например: minicom –con –D /dev/ttyUSB0 или putty в MS Windows
    • Объединяем в локальную сеть модуль и HOST машину;
    • Включаем питание. И в терминале нажимаем на любую клавишу;
    • В командной строке u-boot пишем:
    > dhcp; setenv serverip 192.168.1.100; saveenv; tftp 80400000 bootscr.img && source 80400000
    где 192.168.1.100 ip адрес HOST машины с настроенной tftp и NFS шарой.
    Причем содержимое паки tftp-шары должно быть следующим:
    $ ls /tftpboot
    bootscr.img  kernel.img  ramdisk.img 
    
    • После чего логинимся под root'ом.

  2. Необходимо примонтировать раздел с rootfs.
    В отлчии от традиционных файловых систем для ubifs дынный процесс происходит в несколько этапов.
    Пусть rootfs развернуто на NAND в разделе mtd4.
    Приаттачим mtd4 в ubi0 (должно появится /dev/ubi0 и /dev/ubi0_4 )
    $ ubiattach /dev/ubi_ctrl -m 4 -O 2048
    НА экране получим примерно следующее
    
    UBI: attaching mtd4 to ubi0
    UBI: physical eraseblock size:   131072 bytes (128 KiB)
    UBI: logical eraseblock size:    126976 bytes
    UBI: smallest flash I/O unit:    2048
    UBI: sub-page size:              512
    UBI: VID header offset:          2048 (aligned 2048)
    UBI: data offset:                4096
    UBI: attached mtd4 to ubi0
    UBI: MTD device name:            "rootfs"
    UBI: MTD device size:            505 MiB
    UBI: number of good PEBs:        4041
    UBI: number of bad PEBs:         2
    UBI: max. allowed volumes:       128
    UBI: wear-leveling threshold:    4096
    UBI: number of internal volumes: 1
    UBI: number of user volumes:     1
    UBI: available PEBs:             0
    UBI: total number of reserved PEBs: 4041
    UBI: number of PEBs reserved for bad PEB handling: 40
    UBI: max/mean erase counter: 57/2
    UBI: image sequence number: 0
    UBI: background thread "ubi_bgt0d" started, PID 1776
    UBI device number 0, total 4041 LEBs (513110016 bytes, 489.3 MiB),
    available 0 LEBs (0 bytes), LEB size 126976 bytes (124.0 KiB)
    
    Запомним параметр: total 4041 и LEB size 126976 bytes Теперь можно монтировать файловую систему
    $ mkdir fs 
    $ mount -t ubifs ubi0_4 ./fs 
  3. Необходимо примонтировать сетевую папку для сохранения образа
    $ mount -n 192.168.1.100:/nfsshare /mnt/net 
  4. С помощью mkfs.ubifs создаем ubifs образа
    $ mkfs.ubifs -r ./fs -m 2048 -e 126976 -c 4041 -o /mnt/net/ubifs.img
    где -e =LEB size, -c =total Если в сетевом образе ОС нет утилиты mkfs.ubifs можно сделать финт ушами и запустить ее из rootfs на NAND:
    $ export LD_LIBRARY_PATH=/home/root/fs/usr/lib
    $ /home/root/fs/usr/bin/mkfs.ubifs -r ./fs -m 2048 -e 126976 -c 4041 -o /mnt/net/ubifs.img
    После нескольких минут ожидания ubifs образ создан. Можно выключать питание.
    Теперь для записи данного образа на другие платы необходимо из полученного ubifs образа создать ubi образ.
  5. Для этого на HOST машине должны быть установлены mtd-utils.
    Если таковых нет, то под Ubuntu их можно поставить:
    $ sudo apt-get install mtd-utils
  6. Создаем в директории с ubifs.img файл cfg.ini следующего содержания:
    [rootfs]
    mode=ubi
    image=ubifs.img
    vol_id=4
    vol_type=dynamic
    vol_name=cm-t35-rootfs
    vol_flags=autoresize
  7. Создаем ubi.img образ:
    $ ubinize -o ubi.img -m 2048 -p 128KiB -s 512 -O 2048 -v cfg.ini
    Всё, данный образ можно разворачивать на других платах.

Как развернуть образ linux на NAND

  1. Загружаемся через сеть
    • Подключаем RS232 к консоли модуля. Запускаем терминальную программу
    • Включаем питание. И в терминале нажимаем на любую клавишу.
    • В командной строке u-boot пишем:
    > dhcp; setenv serverip 192.168.1.100; saveenv; tftp 80400000 bootscr.img && source 80400000
    Содержимое паки tftp-шары:
    bootscr.img  kernel.img  ramdisk.img 
    А NSFS-шары:
    ubi.img uImage.img
    • Логинимся под root'ом
  2. Монтируем сетевую папку с нужными образами
    $ mount -n 192.168.1.100:/nfsshare /mnt/net
  3. Очищаем разделы для записи ядра linux и rootfs
    $ flash_eraseall /dev/mtd3
    $ flash_eraseall /dev/mtd4
  4. Записываем в NAND ядро
    $ nandwrite -p /dev/mtd3 /mnt/net/uImage
  5. Разворачиваем rootfs
    $ ubiformat -O 2048 -s 512 /dev/mtd4 -f /mnt/net/ubi.img
    Ждем завершение процесса.
    Далее можно грузиться с NAND.
    Для этого в u-boot необходимо прописать:
    > setenv bootdelay 3; setenv bootcmd "nboot 82000000 nand0 2a0000; bootm" ;saveenv;boot

Комментариев нет:

Отправить комментарий