Перейти к основному содержимому

Загрузка baremetal-программы из внешней памяти

В настоящем руководстве иллюстрируется загрузка проекта из внешней памяти.

Применительно к комплекту отладочному Салют-ЭЛ24ПМ2, Салют-ЭЛ24ОМ1 загрузка происходит из SPI0, затем U-Boot загружает программу из NAND.

Монтирование NAND и копирование .elf

  1. Загрузить Linux на отладочном модуле MCom-02 Buildroot версии не ниже v2.9.

    к сведению

    В ядре 5.4 нет поддержки NAND.

  2. Определить устройство 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
  3. Отформатировать 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
  4. В данном руководстве представлено два варианта получения 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
  5. Переходим в ОС ПЭВМ. Копируем программу с ПЭВМ на отладочный модуль:

    scp sample_gpio.elf root@10.81.45.135:/mnt/boot
  6. При копировании модуль попросит пароль: root

Запуск приложения (.elf файла)

  1. Возвращаемся в ОС отладочного модуля, например, через команду minicom –D /dev/ttyUSBn. Где n-номер устройства.

  2. Отмонтировать раздел:

    sync
    umount /mnt/boot
    ubidetach -d 0
  3. Перезагрузить модуль:

    reboot
  4. Остановить загрузку на 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
  5. Создаем новый таргет и устанавливаем его в 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:

  1. Примонтировать NAND, как описано в пункте 3.

    cd /mnt/boot
    wget https://support.elvees.com/go/ex-smpl-gpio -O sample_gpio.elf
  2. Далее переходим к запуску elf.

  3. После запуска на модуле Салют-ЭЛ24ПМ должны мигать светодиоды.