Загрузка baremetal-программы из внешней памяти
В настоящем руководстве иллюстрируется загрузка проекта из внешней памяти.
Применительно к комплекту отладочному Салют-ЭЛ24ПМ2, Салют-ЭЛ24ОМ1 загрузка происходит из SPI0, затем U-Boot загружает программу из NAND.
Монтирование NAND и копирование .elf
-
Загрузить Linux на отладочном модуле MCom-02 Buildroot версии не ниже v2.9.
к сведениюВ ядре 5.4 нет поддержки NAND.
-
Определить устройство NAND-носителя (ввести команду
mtdinfo -a
и найти в логе устройство «nand»):mtdinfo -a
mtd0
Name: arasan_nfc
Type: nand
Eraseblock size: 1048576 bytes, 1024.0 KiB
Amount of eraseblocks: 4096 (4294967296 bytes, 4.0 GiB)
Minimum input/output unit size: 8192 bytes
Sub-page size: 8192 bytes
OOB size: 448 bytes
Character device major/minor: 90:0
Bad blocks are allowed: true
Device is writable: true -
Отформатировать NAND-флеш, примонтировать устройство, подготовить раздел boot NAND, выделить под него память и примонтировать его:
ubiformat /dev/mtd0
ubiattach -p /dev/mtd0
ubimkvol /dev/ubi0 -N boot -s 128MiB
mkdir -p /mnt/boot
mount -t ubifs ubi0:boot /mnt/boot -
В данном руководстве представлено два варианта получения elf-файла программы: скачивание предсобранного примера sample_gpio или загрузка собственного проекта. При выборе варианта загрузки примера с ресурса из интернета, можно перейти на "Пример sample_gpio". В случае если загружаемый проект (.elf) находится на ПЭВМ, для записи его на модуль, в терминале которого посмотрим IP-адрес.
Вывод команды
ifconfig
:# ifconfig
eth0 Link encap:Ethernet HWaddr 66:DB:7B:71:A6:9C
inet addr:10.81.45.135 Bcast:10.81.45.255 Mask:255.255.255.0
inet6 addr: fe80::64db:7bff:fe71:a69c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21274 errors:0 dropped:4673 overruns:0 frame:0
TX packets:131 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1712757 (1.6 MiB) TX bytes:12165 (11.8 KiB)
Interrupt:55 Base address:0xf000 -
Переходим в ОС ПЭВМ. Копируем программу с ПЭВМ на отладочный модуль:
scp sample_gpio.elf root@10.81.45.135:/mnt/boot
-
При копировании модуль попросит пароль:
root
Запуск приложения (.elf файла)
-
Возвращаемся в ОС отладочного модуля, например, через команду
minicom –D /dev/ttyUSBn
. Где n-номер устройства. -
Отмонтировать раздел:
sync
umount /mnt/boot
ubidetach -d 0 -
Перезагрузить модуль:
reboot
-
Остановить загрузку на U-Boot:
Hit any key to stop autoboot: 0
Задать переменные:
setenv elf_name <your_app.elf>
setenv elf_addr 0x40000000где:
<your_app.elf>
- имя elf-файла- 0x40000000 - адрес в свободной памяти ОЗУ. Нужно выбирать адреса, которые не используются программой.
Пример используемых адресов baremetal-приложения в MCStudio -
Создаем новый таргет и устанавливаем его в boot_targets:
setenv bootcmd_elfubifs 'ubi part allnand && ubifsmount ubi0:boot; ubifsload ${elf_addr} ${elf_name}; bootelf ${elf_addr}'
setenv boot_targets elfubifsОпционально сохраняем:
saveenv
Загрузка:
boot
Если переменные были сохранены - после перезапуска загрузка elf файла будет происходить автоматически.
Так же рекомендуем Вам ознакомиться с ограничениями, накладываемыми на использование NAND-флэш.
Для возобновления загрузки Linux смотреть Способы загрузки Linux.
Пример sample_gpio
Находясь в ОС модуля, можно скачать готовый предсобранный проект "sample_gpio" из MCStudio:
-
Примонтировать NAND, как описано в пункте 3.
cd /mnt/boot
wget https://support.elvees.com/go/ex-smpl-gpio -O sample_gpio.elf -
Далее переходим к запуску elf.
-
После запуска на мод уле Салют-ЭЛ24ПМ должны мигать светодиоды.