Загрузка с NAND — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
(Прошивка NAND из админки)
 
Строка 215: Строка 215:
 
===Памятка===
 
===Памятка===
  
Надо сделать более простое редактирование параметров ядра в режиме загрузке с NAND (из админки)
+
Надо сделать более простое редактирование параметров ядра в режиме загрузке с NAND (из админки). А пока можно редактировать параметры ядра из командной строки, описание вот тут - [[UEnv.txt]]
  
  

Текущая версия на 14:41, 24 ноября 2014

Содержание

Про встроенную NAND память

Виртурилка имеет на борту 256 мегабайт NAND памяти на базе чипа

Micron MT29F2G08ABAEAH4 256MiB page size: 2048 OOB size: 64

NAND разбита на три раздела:

Раздел Объём Метка
mtd0 4 Mb bootloader
mtd1 4 Mb kernel
mtd2 247 Mb fs


Установка режима загрузки с NAND

Необходимо надеть обычный джампер на пины разъёма SA2 (см. Схема компонентов virt2real 1.1) Это два штырька около мезонина Wi-Fi. При отсутствии джампера контакты можно замкнуть любым другим способом.

После этого загрузка будет происходить с NAND. Однако, если в NAND не обнаружен загрузчик, будет производиться обычная загрузка с microSD (если флешка установлена в слот).


Подготовка к загрузке с NAND

Сначала необходимо скопировать загрузчик (с параметрами запуска), ядро и файловую систему в разделы NAND. Кроме этого, раздел с файловой системой (mtd2 - "fs") должен быть отформатирован одним из типов файловых систем, предназначенных специально для NAND. На данный момент, поддерживаются JFFS2 и UBIFS. При загрузке ядра необходимо ему сообщить, какой именно тип файловой системы использовать.

Это всё очень сложно выглядит, но на самом деле всё проще простого. В стандартной прошивке Виртурилки уже есть всё что нужно, надо лишь запустить скрипт, который скопирует всё в NAND, после чего можно снимать джампер и грузиться.


Прошивка NAND из командной строки (не в админке)

Необходимо перейти в каталог /etc/virt2real/nand_flasher

cd /etc/virt2real/nand_flasher

В этом каталоге находятся два скрипта.

  • read_nand.sh - для сохранения загрузчика в файл (иногда может понадобиться)
  • write_nand.sh - для копирования загрузчика, ядра и файловой системы в соответствующие разделы NAND.


Итак, теперь необходимо запустить скрипт прошивки. Запускать его надо с параметром, который означает тип файловой системы, который мы хотим использовать.

Так как файловая система JFFS2 очень медленная при работе на ARM устройствах, будем считать основным типом файловой системы - UBIFS. Так что запускаем скрипт с параметром "ubi"

./write_nand.sh ubi

Начнётся процесс записи. При этом должен погаснуть синий светодиод и начать моргать красный. По окончании копирования красный светодиод перестанет моргать и снова зажжётся синий (точнее, все светодиоды вернутся в то состояние, в котором они находились до запуска процесса копирования).


Процесс копирования состоит из стадий

  • Очистка раздела загрузчика ("bootloader") и копирование в него предварительно сохранённого образа загрузчика и строки параметров запуска ядра.
  • Очистка раздела ядра ("kernel") и копирование в него текущего ядра с флешки.
  • Очистка раздела файловой системы ("fs") и форматирование его указанным типом файловой системы (UBIFS)
  • Монтирование раздела файловой системы NAND в локальный каталог /mnt/nand2
  • Копирование всего текущего содержимого флешки (microSD с которой в данный момент загружена система) в примонтированый раздел NAND.
  • Синхронизация и размонтирование раздела NAND


При этом в консоли будет выводиться много сообщений, не пугайтесь.


Прошивка NAND из админки

Проще всего прошить NAND из админки. Для этого служит раздел "Периферия" -> "NAND"

Скриншот админки

Под заголовком "Прошивка NAND" есть переключатель для выбора требуемого типа файловой системы (по умолчанию будет использоваться UBIFS).

Запуск прошивки начнётся при нажатии ссылки "[ Прошить ]"

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


Теперь можно убрать джампер выбора типа загрузки, вытащить microSD флэшку и загрузиться с NAND. Главное - необходимо не просто перезагрузить Виртурилку командой reboot в консоли, а отключить и снова подключить питание (или замкнуть пины RESET и GND на гребёнке). Иначе в процессоре сохранится прошлое состояния типа загрузки и Виртурилка снова будет пытаться загрузиться с microSD.


Параметры ядра

При загрузке с microSD флешки параметры ядра содержатся в файле uEnv.txt, а вот при загрузке с NAND такого файла нет, параметры берутся из специальной области NAND, куда их можно записать с помощью загрузчика U-boot.

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

По умолчанию используются вот такие параметры:

Для типа файловой системы UBIFS

mem=99M rootwait root=ubi0:fs rw rootfstype=ubifs rootdelay=0 ubi.mtd=2,2048 davinci_enc_mngr.ch0_output=COMPOSITE davinci_enc_mngr.ch0_mode=PAL davinci_display.cont2_bufsize=3145728 vpfe_capture.cont_bufoffset=3145728 vpfe_capture.cont_bufsize=6291456 video=davincifb:osd1=0x0x8:osd0=720x480x16,1350K@0,0 console=ttyS0,115200n8 dm365_imp.oper_mode=0 vpfe_capture.interface=1 coherent_pool=1M pwrled=on redled=none greenled=cpu0 wifi=on usbwifi=on lan0=on 1wire=10 1wirepullup=11 spi0=off ap=off uart1=off camera=ov2643

Для типа файловой системы JFFS

mem=99M rootwait root=/dev/mtdblock2 rw rootfstype=jffs2 rootdelay=0 davinci_enc_mngr.ch0_output=COMPOSITE davinci_enc_mngr.ch0_mode=PAL davinci_display.cont2_bufsize=3145728 vpfe_capture.cont_bufoffset=3145728 vpfe_capture.cont_bufsize=6291456 video=davincifb:osd1=0x0x8:osd0=720x480x16,1350K@0,0 console=ttyS0,115200n8 dm365_imp.oper_mode=0 vpfe_capture.interface=1 coherent_pool=1M pwrled=on redled=none greenled=cpu0 wifi=on usbwifi=on lan0=on 1wire=10 1wirepullup=11 spi0=off ap=off uart1=off camera=ov2643


Редактирование параметров ядра

Менять параметры ядра придётся в загрузчике. Для этого понадобится подключение аппаратной консоли (UART). Консоль через USB-gadget не подойдёт!

Редактировать параметры следует после прошивки. Т.е. общая последовательность такая:


  • Сначала, как обычно, загружаемся с microSD флэшки
  • Запускаем прошивку NAND одним из вышеперечисленных способов
  • Отключаем питание Виртурилки
  • Убираем джампер с разъёма SA2
  • Вытаскиваем microSD флешку из слота
  • Подключаем консоль через любой UART-переходник (можно использовать отладочно-макетный шилд (Макетная плата 1.0)
  • Запускаем любую программу-терминал на компьютере, к которому подключён UART-переходник. Например, Putty (для Windows) или minicom (для Linux).
  • Подключаем питание к Виртурилке

При включении Виртурилки в консоль выводятся примерно такие сообщения:


TI UBL Version: 1.50
Booting Catalog Boot Loader
BootMode = NAND
Starting NAND Copy...
Valid magicnum, 0xA1ACED66, found in block 0x00000019.
   DONE
Jumping to entry point at 0x82000000.


U-Boot 2011.03-00000-g5940852-dirty (Feb 07 2014 - 12:54:13)

Cores: ARM 297 MHz
DDR:   243 MHz
I2C:   ready
DRAM:  128 MiB
NAND:  256 MiB
MMC:   davinci: 0, davinci: 1
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
Net:   Ethernet PHY: GENERIC @ 0x00
DaVinci-EMAC
Hit any key to stop autoboot:  1


Сообщение "BootMode = NAND" означает что всё в порядке и Виртурилка действительно загружается из NAND.

Для редактирования параметров ядра при появлении надписи "Hit any key to stop autoboot" необходимо нажать любую клавишу для прерывания процесса загрузки.

Это действие примерно аналогично входу в BIOS обычного компьютера. Когда при включении компа надо ESC или F2 (или другую клавишу, в зависимости от производителя) нажиммать чтоб зайти в настройки.


При нажатии на любую клавишу процесс загрузки прервётся и появится приглашение загрузчика U-boot

virt2real >#

Теперь можно вводить команды с клавиатуры. Список команд можно получить, введя "?" и нажав "Enter"


Описание всех команд выходит за рамки этой статьи, так что ограничимся редактированием строки параметров ядра.

Сначала надо посмотреть текущие параметры. Делается это командой printenv bootargs

virt2real ># printenv bootargs

Видим список

bootargs=mem=99M rootwait root=ubi0:fs rw rootfstype=ubifs rootdelay=0 
ubi.mtd=2,2048 davinci_enc_mngr.ch0_output=COMPOSITE 
davinci_enc_mngr.ch0_mode=PAL  
davinci_display.cont2_bufsize=3145728 vpfe_capture.cont_bufoffset=3145728 
vpfe_capture.cont_bufsize=6291456 video=davincifb:osd1=0x0x8:osd0=720x480x16,1350K@0,0 
console=ttyS0,115200n8 dm365_imp.oper_mode=0 vpfe_capture.interface=1 
coherent_pool=1M pwrled=on redled=none greenled=cpu0 wifi=on usbwifi=on lan0=on 
1wire=10 1wirepullup=11 spi0=off ap=off uart1=off camera=ov2643

Далее, для удобства, можно скопировать текст из консоли (после "bootargs=") в любой текстовый редактор и исправить там. Например, добавим параметр, отключающий консольный вывод ядра (экономит пару секунд при загрузке). Для этого в конец строки добавим параметр "quiet". Теперь скопируем полученную строчку в консоль, добавив в начале команду установки переменной "setenv bootargs ".

Внимание! Это должна быть именно одна строка. Нижеприведённый текст разбит на несколько строчек для корректного отображения в браузере, если вставить в консоль именно его - не сработает.

virt2real ># setenv bootargs "mem=99M rootwait root=ubi0:fs rw rootfstype=ubifs rootdelay=0 
ubi.mtd=2,2048 davinci_enc_mngr.ch0_output=COMPOSITE davinci_enc_mngr.ch0_mode=PAL   
davinci_display.cont2_bufsize=3145728 vpfe_capture.cont_bufoffset=3145728 
vpfe_capture.cont_bufsize=6291456 video=davincifb:osd1=0x0x8:osd0=720x480x16,1350K@0,0 
console=ttyS0,115200n8 dm365_imp.oper_mode=0 vpfe_capture.interface=1 coherent_pool=1M pwrled=on 
redled=none greenled=cpu0 wifi=on usbwifi=on lan0=on 1wire=10 1wirepullup=11 spi0=off 
ap=off uart1=off camera=ov2643 quiet"


Нажимаем "Enter" и команда выполняется. В консоли не должно появиться никаких сообщений (если операция успешно произведена).

Теперь необходимо сохранить внесённые изменения. Для этого надо ввести команду "saveenv".

virt2real ># saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x3e0000 -- 100% complete.
Writing to Nand... done


Всё, внесённые изменения параметров ядра сохранены и будут использованы при загрузке.

По окончании работы с командной строкой загрузчика U-boot можно продолжить загрузку командой

virt2real ># boot

или перезагрузить Виртурилку командой

virt2real ># reset


Памятка

Надо сделать более простое редактирование параметров ядра в режиме загрузке с NAND (из админки). А пока можно редактировать параметры ядра из командной строки, описание вот тут - UEnv.txt


Для экспертов

Всё вышенаписанное предназначено для пользователей, не знакомых с общими принципами работы с U-boot и прочими прелестями. Для облегчения процесса мы постарались сделать всё максимально простым, пусть даже и с потерей многих расширенных возможностей, коими обладает U-boot. Полное описание его возможностей выходит за рамки данной статьи.

Однако, есть небольшая специфическая утилита для первоначальной прошивки NAND на платах с процессорами семейства Davinci DM36x. Утилита называется "SD card boot and flashing tool for DM355 and DM365", про неё можно почитать по следующим ссылкам:

SD card boot and flashing tool for DM355 and DM365

Форум TI с обсуждением SD Card Boot and Flashing Tool for DM355 and DM365


Эта утилита добавлена в Virt2real SDK, находится в каталоге "nand_flasher". Основные операции доступны в нашем стандартном Makefile от SDK (не в каталоге утилиты!).

Доступны команды

make nandbuild

соберёт утилиту

make nandformatcard

отформатирует microSD карточку в нужном для утилиты формате

make nandinstallcard

скопирует на карточку необходимые для работы утилиты компоненты (загрузчик ubl, uboot, ядро, дефолтный образ файловой системы).

Затем, после загрузки с получившейся карточки и после процедуры установки (опция "install") всё запишется в NAND, но ядро и образ файловой системы грузиться не будут! Эту утилиту добавили в SDK только для прошивки загрузчика. От её использования можно будет вообще отказаться, когда получится сделать прошивку произвольного загрузчика из запущенного на Виртурилке линукса.



Дополнительные ссылки

Работа с UBIFS

Про разные типы загрузки ядра