Ports/riscv64: различия между версиями
м (очепятка) |
Arei (обсуждение | вклад) (Быстрое введение в отладку 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> | |||
== Полезные ссылки: == | == Полезные ссылки: == |
Версия от 15: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 -- В ПРОЦЕССЕ
- Toolchain -- ГОТОВО
- Linux Kernel -- ГОТОВО
- X11 -- ГОТОВО
- Desktop Environments -- В ПРОЦЕССЕ
- Образ ALT metaprofile -- ГОТОВО
- Girar Builder -- ГОТОВО
- Образ для QEMU (ссылка) -- ГОТОВО
RPM/SRPM репозиторий можно найти по этой ссылке.
OpenOCD
OpenOCD (docs) это инструмент для отладки, внутрисхемного программирования и периферийного сканирования встраиваемых систем. В частности, этот инструмент полезен для низкоуровневой отладки загрузчиков, ядра Linux, и т.д., при помощи (GDB).
Чтобы выполнить отладку HiFive Unleashed через OpenOCD и GDB, необходимо выполнить следующие шаги:
- Подключить HiFive Unleashed к ПК через USB и включить её. USB интерфейс предоставляет UART0 (/dev/ttyUSB1) и JTAG интерфейсы через FTDI FT2232H (ссылка).
- Запустить (см. простейший конфигурационный файл ниже, а так же не забыть добавить пользователя в группу plugdev): OpenOCD будет слушать порт 3333 в ожидании подключения GDB.
$ openocd -s <путь к директории с hifive-u.cfg> -f hifive-u.cfg
- Запустить GDB собранный с поддержкой цели (target) riscv64.
- Подключить GDB к OpenOCD:
gdb$ target extended-remote localhost:3333
- Теперь можно устанавливать точки останова (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"
Полезные ссылки:
- утилиты для Berkeley bootloader для слияния ядра Linux в bbl.bin с dummy payload.
- RISC-V ISA
- All Aboard -- интересный блог Палмера Даббелта о RISC-V, toolchain, и т.д.
- OSSDEVCONF-2018