Ports/riscv64: различия между версиями

Материал из ALT Linux Wiki
м (очепятка)
(Быстрое введение в отладку HiFive Unleashed при помощи OpenOCD.)
Строка 46: Строка 46:


RPM/SRPM репозиторий можно найти по [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/ этой ссылке].
RPM/SRPM репозиторий можно найти по [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/ этой ссылке].
== '''OpenOCD''' ==
OpenOCD ([http://openocd.org/documentation/ docs]) это инструмент для отладки, внутрисхемного программирования и периферийного сканирования встраиваемых систем. В частности, этот инструмент полезен для
низкоуровневой отладки загрузчиков, ядра Linux, и т.д., при помощи ([https://www.gnu.org/software/gdb/ GDB]).
Чтобы выполнить отладку HiFive Unleashed через OpenOCD и GDB, необходимо выполнить следующие шаги:
# Подключить HiFive Unleashed к ПК через USB и включить её. USB интерфейс предоставляет UART0 (/dev/ttyUSB1) и JTAG интерфейсы через FTDI FT2232H ([https://www.ftdichip.com/Products/ICs/FT2232H.html ссылка]).
# Запустить (см. простейший конфигурационный файл ниже, а так же не забыть добавить пользователя в группу plugdev): <source lang=shell>$ openocd -s <путь к директории с hifive-u.cfg> -f hifive-u.cfg</source>OpenOCD будет слушать порт 3333 в ожидании подключения GDB.
# Запустить GDB собранный с поддержкой цели (target) riscv64.
# Подключить GDB к OpenOCD: <source lang=shell>gdb$ target extended-remote localhost:3333</source>
# Теперь можно устанавливать точки останова (breakpoints), исследовать память, дизассемблировать области памяти, и т.д. Для удобства возможно подгружать ELF файлы с отладочной информацией для импорта символов, что даёт возможность устанавливать точки останова на эти символы.
Пример простейшего конфигурационного файла hifive-u.cfg:
<source lang="shell>
adapter_khz 1000
interface ftdi
ftdi_device_desc "Dual RS232-HS"
ftdi_vid_pid 0x0403 0x6010
ftdi_channel 0
ftdi_layout_init 0x0018 0x001b
set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000913
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1
init
halt
echo "Ready for Remote Connections"
</source>


== Полезные ссылки: ==
== Полезные ссылки: ==

Версия от 12:08, 10 декабря 2019

RISC-V

RISC-V является архитектурой с открытым набором комманд (ISA). ISA RISC-V имеют лицензию Creative Commons license (CC BY 4.0). Любой желающий может получить финальную версию ISA пользовательского уровня и черновик ISA привилегированного уровня.

Другая ключевая особенность архитектуры RISC-V - её расширяемость, что позволяет создавать разнообразные реализации. Минимальная спецификация архитектуры RISC-V включает в себя только инструкции для записи, сохранения, переходов и целочисленной арифметики. Код инструкций не зависит от размера регистра, минимальная спецификация обозначается RV32I, RV64I или RV128I ("I" означает integer) для размеров операнда 4, 8 или 16 байт соответственно. На данный момент порт Linux работает со спецификацией "RV64IMAFDC" или "RV64GC" ("G" == "IMAFD"):

  • I - целочисленные базовые инструкции;
  • M - умножение и деление целых чисел;
  • A - атомарные операции;
  • F - число с плавающей запятой одинарной точности;
  • D - число с плавающей запятой двойной точности;
  • C - сжатые 16-битные инструкции.

На данной странице можно найти последнюю информацию о статусе порта ALT на RISC-V (RV64GC). Сборка системы ведётся на плате SiFive HiFive Unleashed. Для целей тестирования выполняется сборка образов для QEMU и платы HiFive Unleashed. Подробнее об этом можно прочитать тут.

Рабочий план

  • Следующие ядра Linux были протестированы на SiFive HiFive Unleashed:
  • Методы загрузки (boot):
    • Berkeley bootloader -- ГОТОВО
    • U-BOOT (link) -- ГОТОВО
  • Порт Sisyphus -- В ПРОЦЕССЕ
    1. Toolchain -- ГОТОВО
    2. Linux Kernel -- ГОТОВО
    3. X11 -- ГОТОВО
    4. Desktop Environments -- В ПРОЦЕССЕ
  • Образ ALT metaprofile -- ГОТОВО
  • Girar Builder -- ГОТОВО
  • Образ для QEMU (ссылка) -- ГОТОВО

RPM/SRPM репозиторий можно найти по этой ссылке.

OpenOCD

OpenOCD (docs) это инструмент для отладки, внутрисхемного программирования и периферийного сканирования встраиваемых систем. В частности, этот инструмент полезен для низкоуровневой отладки загрузчиков, ядра Linux, и т.д., при помощи (GDB).

Чтобы выполнить отладку HiFive Unleashed через OpenOCD и GDB, необходимо выполнить следующие шаги:

  1. Подключить HiFive Unleashed к ПК через USB и включить её. USB интерфейс предоставляет UART0 (/dev/ttyUSB1) и JTAG интерфейсы через FTDI FT2232H (ссылка).
  2. Запустить (см. простейший конфигурационный файл ниже, а так же не забыть добавить пользователя в группу plugdev):
    $ openocd -s <путь к директории с hifive-u.cfg> -f hifive-u.cfg
    
    OpenOCD будет слушать порт 3333 в ожидании подключения GDB.
  3. Запустить GDB собранный с поддержкой цели (target) riscv64.
  4. Подключить GDB к OpenOCD:
    gdb$ target extended-remote localhost:3333
    
  5. Теперь можно устанавливать точки останова (breakpoints), исследовать память, дизассемблировать области памяти, и т.д. Для удобства возможно подгружать ELF файлы с отладочной информацией для импорта символов, что даёт возможность устанавливать точки останова на эти символы.

Пример простейшего конфигурационного файла hifive-u.cfg:

adapter_khz 1000

interface ftdi
ftdi_device_desc "Dual RS232-HS"
ftdi_vid_pid 0x0403 0x6010

ftdi_channel 0
ftdi_layout_init 0x0018 0x001b

set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000913

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1

init
halt
echo "Ready for Remote Connections"

Полезные ссылки: