Высокопроизводительное 64-разрядное процессорное ядро серверного класса SCR9 c набором команд RISC-V и поддержкой многоядерных конфигураций
Общие сведения
Программа для ЭВМ «Высокопроизводительное 64-разрядное процессорное ядро серверного класса SCR9 c набором команд RISC-V и поддержкой многоядерных конфигураций» (далее по тексту ПО SCR9) представляет собой реализацию процессора архитектуры RISC-V для для широкого класса вычислительных систем, требующих высокоскоростную обработку данных с поддержкой Linux-подобных операционных систем.
ПО SCR9 предназначено для работы в составе систем на кристалле (СнК), реализованных непосредственно в кремнии или в программируемых логических интегральных схемах (ПЛИС), и может применяться в одноядерных и многоядерных конфигурациях.
ПО SCR9 является сложным функциональным СФ-блоком (Soft IP), передаваемым потребителю в виде описания на высокоуровневом языке описания аппаратуры SystemVerilog для дальнейшего использования в программах автоматизированного синтеза логических схем с привязкой к конкретной технологии ASIC или ПЛИС.
ПО разрабатывается с использованием собственных мощностей и ресурсов. Цена является договорной, размер вознаграждения за право использования зависит от конфигурации ПО. Обновление ПО производится силами разработчика.
Функциональные характеристики
ПО SCR9 реализует собой 64-х разрядный высокопроизводительный, высокоэффективный суперскалярный процессор серверного класса, с архитектурой RISC-V, с поддержкой многоядерных конфигураций с когерентностью памяти, предназначенный для использования в составе различных вычислительных систем, где требуется полнофункциональная поддержка ОС Linux.
Программа обеспечивает выполнение арифметических и логических операций с целочисленными операндами и вычислений с плавающей точкой одинарной и двойной точности; поддержку 16- и 32- битных инструкций и 64/32/16/8-битных операндов, идентификацию ядер в многоядерных конфигурациях СнК.
Основные функциональные характеристики ПО SCR9:
- Гарвардская архитектура (раздельные шины команд и данных);
- Поддержка симметричной многопроцессорности (SMP) и межъядерного взаимодействия с настраиваемой конфигурацией от 1 до 16 процессорных ядер в кластере;
- Набор команд: RV64IMСAFD
- базовый набор с целочисленными операциями, 64-битный (RV64I);
- команды операций целочисленное умножения и деления (М расширение);
- команды компактного формата для увеличения плотности кода (16-битовые, С расширение);
- атомарные операции (А расширение);
- арифметические операции с плавающей точкой над числами одинарной точности (Single-Precision Floating-Point, F расширение);
- арифметические операции с плавающей точкой над числами двойной точности (Double-Precision Floating-Point, D расширение).
- Три уровня привилегированности и соответствующих им режимов исполнения команд: машинный уровень (режим M-mode), пользовательский уровень (режим U-mode), уровень супервизора (режим - S-mode);
- Многоуровневый конвейер с реализацией внеочередного исполнения команд;
- Высокопроизводительный модуль операций с плавающей запятой одинарной и двойной точности (Floating-Point Unit);
- Конфигурируемая подсистема памяти:
- поддержка виртуальной памяти с помощью модуля управления памятью (MMU);
- контроль доступа к физической памяти с помощью модуля защиты памяти (PMP — Physical Memory Protection unit);
- поддержка кэш-памяти L1 и L2 (с опцией коррекции ошибок) с когерентностью памяти:
- кэш команд уровня L1 размером от 8 до 64 Кб;
- кэш данных уровня L1 размером от 8 до 64 Кб;
- поддержка кэш данных уровня L2 размером до 2 Мб;
- опциональная поддержка кэш-памяти уровня L3 размером до 16 Мб с поддержкой когерентности по всем ядрам в кластере;
- Поддержка конфигурируемого контроллера прерываний уровня платформы (PLIC) с возможностью приема большого количества внешних запросов прерываний (до 1023) и с динамическим заданием (изменением) приоритета прерываний;
- Встроенный 64-битный таймер часов реального времени (Real Time Clock) с настраиваемым коэффициентом деления;
- Встроенный контроллер отладки с поддержкой аппаратных точек останова, совместимый со стандартом IEЕЕ 1149.1-2001 (JTAG);
- Конфигурируемый внешний интерфейс, совместимый с шиной AXI (Advanced extensible Interface) с поддержкой когерентности в многоядерной системе - протоколов ACE (AXI Coherency Extensions) и CHI (Coherent Hub Interface).
Состав ПО
ПО SCR9 в базовой конфигурации включает в себя:
- Исходный код на языке SystemVerilog, пригодный для моделирования и синтеза;
- Исходный код тестового окружения (Testbench) для выполнения функциональной верификации до и после синтеза;
- Наборы скриптов для проведения моделирования и синтеза с файлами входных ограничений в формате (.sdc).
- Комплект разработчика на базе ПЛИС (SCR9 SDK):
- пример проекта СнК на основе ПО SCR9;
- образы загрузки ПЛИС и объектных модулей прикладного ПО для выполнения на ядре SCR9.
- Инструментальные средства разработки:
- набор инструментальных средств, основанных на GCC 8.x, 9.x: компилятор, отладчик, компоновщик, функциональный симулятор, бинарные утилиты binutils, newlib, openocd;
- IDE на базе Eclipse (для Linux и Windows).
- Прикладное ПО:
- начальный загрузчик;
- набор архитектурных тестов и тестов совместимости;
- примеры простых приложений (baremetal) и тестов производительности;
- операционная система Linux для платы SCR9 SDK.
- Сопроводительная документация:
- руководство пользователя ПО SCR9 (SCR9 UM);
- спецификация внешней архитектуры ПО SCR9 (SCR9 EAS);
- руководство по системе команд (SCR9 ISM);
- руководство на комплект разработчика (SCR9 SDK);
- руководство по инструментам разработчика (SCRx development tools);
- руководство на тестовое окружение.
Требования к работе с ПО
Типом реализующей ЭВМ для ПО SCR9 является Система-на-Кристалле (СнК) в составе полузаказных интегральных микросхем или программируемых логических интегральных схем (ПЛИС).
При реализации собственных функционально законченных СнК пользователь должен самостоятельно дополнить основу (микропроцессорную структуру ПО SCR9) необходимыми ему дополнительными модулями в виде отдельных СФ-блоков или инфраструктурами СФ-блоков.
Для логического синтеза и функциональной верификации ПО SCR9 в составе СнК, пользователю предоставляется набор средств разработки “SCR9 SDK” для физического прототипирования на ПЛИС, основными компонентами которого являются:
- Пример проекта СнК для ПЛИС на основе ПО SCR9;
- Предварительно собранные образы процессорного ядра ПО SCR9, начального загрузчика и ОС Linux;
- Тестовое программное обеспечение для проверки работоспособности ПО SCR9.
Необходимое обеспечение для работы с ПО SCR9
Для работы с ПО SCR9 необходимо следующее обеспечение:
- Персональный компьютер (ПК) с объёмом оперативной памяти не менее 8 Гб.
- Установленные на ПК программы:
- ОС Windows или Linux;
- пакет программ Xilinx Vivado WebPack Edition версии не ниже 2020.1 (скачивается бесплатно после регистрации на сайте xilinx.com);
- система отладки OpenOCD.
- Отладочная плата Virtex UltraScale+ FPGA VU19P - HTG-960
(http://www.hitechglobal.com/Boards/VirtexUltraScale+_VU19P_Board.htm). - Адаптер для соединения с отладчиком OpenOCD (JTAG Cable Adapter): Olimex ARM-USB-OCD-H (or ARM-USB-OCD)
(https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/). - Программатор встроенных генераторов платы HTG-960 : ClockBuilder Pro Field Programmer (cbprog-dongle)
(https://www.skyworksinc.com/en/products/timing/evaluation-kits/general/clockbuilder-pro-field-programmer). - Адаптер для программирования FPGA платы HTG-960 : Digilent JTAG-HS2
(https://digilent.com/shop/jtag-hs2-programming-cable/). - Набор стандартных кабелей типа:
- USB Type A (m) - Type B (m), 2 шт. (из состава комплектов Olimex ARM-USBOCD-H и cbprog-dongle);
- USB Type A (m) - Type B micro (m), 2 шт. (из состава комплектов платы HTG-960 и Digilent JTAG-HS2).
Компиляция ПО
Процесс компиляции образа ПО SCR9 описан в руководстве на комплект разработчика (SCR9 SDK). В состав ПО входит Zip-архив, содержащий скомпилированные образы, созданные согласно руководству на комплект разработчика пример проекта СнК на основе ПО SCR9. В следующих разделах описан процесс установки и тестирования ПО SCR9 в составе проекта СнК.
Установка ПО
Процесс установки ПО заключается в выполнении процедуры программирования встроенных генераторов и дальнейшей загрузки ПЛИС.
Для установки и работы с ПО SCR9 персональный компьютер подключается к отладочной плате HTG-960 стандартными кабелями USB.
Подключение кабелей к отладочной плате HTG-960
- Подключите один кабель "USB Type A (m) - Type B micro (m)" между хост компьютером и портом USB UART (115200 - 8N1) на плате HTG-960 (J20);
- Подключите второй кабель "USB Type A (m) - Type B micro (m)" между хост компьютером и портом USB адаптера Digilent JTAG-HS2, затем подключите его к плате HTG-960 - JTAG Header (J7);
- Подключите один кабель "USB Type A (m) - Type B (m)" между хост компьютером и портом USB отладчика ARM-USBOCD-H, затем подключите его к плате HTG-960 - User Header #1 (J1);
- Подключите второй кабель "USB Type A (m) - Type B (m)" между хост компьютером и портом USB адаптера cbprog-dongle, затем подключите его к плате HTG-960 - Generator Header (J4);
- Подключите кабель источника питания (есть в комплекте платы HTG-960) к разъему "PWR Connector" (J18).
Это подключение выполняет следующие функции:
- подачу питания +12В на отладочную плату HTG-960;
- обеспечение конфигурирования внутренних генераторов через Generator Header;
- обеспечение конфигурирования ПЛИС через JTAG Header;
- обеспечение функциональности консольного порта при выполнении программы на процессорном ядре SCR9 через USB UART порт;
- обеспечение управления процессорным ядром SCR9 через отладчик ARM-USBOCD-H.
Подключение кабелей к отладочной плате HTG-960 приведено на Рисунке 1.
Рисунок 1: Подключение кабелей к отладочной плате HTG-960
- Распакуйте архив, находящийся в дереве каталогов ПО SCR9 в папке SDK:<
SDK_HOME >/images/htg960_scr9.tar.gz. В архиве находятся два файла: htg960_scr9.bin и htg960_0x75.slabtimeproj. - После подачи питания на плату HTG-960, запустите пакет программ Clockbuilder Pro Software (CBPRO) на инструментальном ПК.
- Проверьте подключение адаптера cbprog-dongle, затем откройте файл-проект - htg960_0x75.slabtimeproj - из меню CBPRO - Open Project.
- Настройте параметры генератора в окне Interface - I2C, 3.3V, 0x75, 100 kHz и выполните его программирование выбрав опцию - Write Design to DUT.
- Запустите пакет программ Vivado на инструментальном ПК.
- Проверьте подключение кабеля USB JTAG, затем запустите утилиту «Hardware Manager» из меню или командной строки консоли Vivado. Выполните команду «Open Target» с опцией «Auto Connect», должно произойти подключение к микросхеме ПЛИС xcvu19p_0 отладочной платы HTG-960 по интерфейсу JTAG.
Примечание: Если подключение не произошло (микросхемы нет в списке обнаруженных), необходимо установить необходимые USB-драйвера для ОС Windows или для ОС Linux настроить правила сервиса UDEV-rules, как описано в AR# 66440 Vivado - Linux OS - Digilent and Xilinx USB cable installation check
- Указать на ПЛИС xcvu19p_0 и вызвать контекстное меню - выбрать опцию "Program Device", в открывшимся диалогом окне "Program Device" добавить файл "прошивки" ПЛИС - Bitstream file - htg960_scr9.bin -
затем в этом окне выполнить команду - Program. - После успешного завершения процесса программирования ПЛИС (можно проконтролировать по сообщениям в диалоговом окне), в терминал uart должно отобразится приглашение загрузчика:
SCR loader v1.3-g2600ce7 Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV64IMAFDCV [800000000034112D] IMPID: 0000000022101940 BLDID: 22111200 Platform: htg960_scr9_ymp, cpuclk 80MHz, sysclk 80MHz 0: start Linux v: int flash load g: start @addr d: mem dump m: mem modify
ПО SCR9 установлено и готово к работе.
Запуск тестов на процессоре SCR9 с использованием отладчика OpenOCD
В качестве тестов работоспособности ПО SCR9 в составе проекта СнК используется запуск bare metal тестов производительности и запуск ОС Linux на платформе SCR9 SDK.
Open On-Chip Debugger (открытый отладчик для чипов) является программой с открытым исходным кодом. OpenOCD предоставляет доступ к адаптеру для отладки (JTAG debug adapter) и обеспечивает инструментарий отладки (debugging) и внутрисхемного программирования для встраиваемых систем.
Установка OpenOCD
Инструкции по установке OpenOCD приведены на вики-странице OpenOCD-for-sc_riscv32
Запуск сервера OpenOCD на ПК
- Настройка переменных окружения:
$ export OOCD_ROOT=<
Path to the OpenOCD installation directory > - Запуск OpenOCD сервера - вводится в одну строку (в Ubuntu):
$ ${OOCD_ROOT}/bin/openocd -s ./share/openocd/scripts \ -f ${OOCD_ROOT}/share/openocd/scripts/interface/ftdi/olimex-arm-usb-ocd-h.cfg \ -f ${OOCD_ROOT}/share/openocd/scripts/target/syntacore_riscv_quad.cfg
После выполнения в текущий терминал будет выдано сообщение о подключении к ядрам RISC-V:
Open On-Chip Debugger 0.10.0+dev-01974-g3d33e05 (2019-05-22-21:03) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html init_targets Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections adapter speed: 2000 kHz trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst Info : auto-selecting first available session transport "jtag". To override use 'transport select <
transport >'. Info : clock speed 2000 kHz Info : JTAG tap: riscv_core0.cpu tap/device found: 0x00000001 (mfg: 0x000 (< invalid >), part: 0x0000, ver: 0x0) Info : JTAG tap: riscv_core1.cpu tap/device found: 0x00000001 (mfg: 0x000 (< invalid >), part: 0x0000, ver: 0x0) Info : riscv_core0.cpu: datacount=4 progbufsize=6 Info : riscv_core0.cpu: Exposing additional CSR 3008 Info : riscv_core0.cpu: Exposing additional CSR 3009 Info : riscv_core0.cpu: Exposing additional CSR 3010 Info : riscv_core0.cpu: Exposing additional CSR 3011 Info : riscv_core0.cpu: Exposing additional CSR 3012 Info : riscv_core0.cpu: Exposing additional CSR 3013 Info : riscv_core0.cpu: Exposing additional CSR 3014 Info : riscv_core0.cpu: Exposing additional CSR 3015 Info : riscv_core0.cpu: Exposing additional CSR 4033 Info : riscv_core0.cpu: Exposing additional CSR 4034 Info : riscv_core0.cpu: Examined RISC-V core; found 1 harts Info : riscv_core0.cpu: hart 0: XLEN=64, misa=0x800000000034112d Info : Listening on port 3333 for gdb connections - Откройте второй терминал (терминал 2) и введите команду:
$ telnet localhost 4444 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger
В терминале 1 выводится подтверждение запуска telnet сессии:
Info : accepting 'telnet' connection on tcp/4444
OpenOCD запущен и готов к работе. Терминал 2 представляет собой интерактивную консоль OpenOCD. По команде help можно вывести список доступных команд openocd.
Загрузка и запуск на выполнение бинарных образов bare metal тестов производительности
Запуск теста Dhrystone benchmark
- Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода:
> targets TargetName Type Endian TapName State -- ------------------ --------- ------ ------------------ ------------ 0* riscv_core0.cpu riscv little riscv_core0.cpu running > >reset halt >load_image dhrystone.bin 0xffffffffffff0000 bin 17824 bytes written at address 0xffffffffffff0000 downloaded 17824 bytes in 0.412235s (61.984 KiB/s) >resume 0xffffffffffff0000
- Работа тестов начинается после команды resume с выводом лога в терминал uart:
Platform: SCR9/RV64 Syntacore FPGA @ 80.000 MHz Compiler: Syntacore Clang 16.0.0 (SC git:/tools/llvm/llvm-project/ 1eb617c08a2ca6c359ead66853f114856805a288) Flags: -O3 -mllvm -riscv-enable-gep-opt=true -mllvm -simplifycfg-hoist-cond-stores=false -falign-functions=4 -falign-loops=4 -mtune=scr9 Dhrystone Benchmark, Version 2.1 (Language: C) Program compiled without 'register' attribute Execution starts, 5000 runs through Dhrystone Execution ends Final values of the variables used in the benchmark: Int_Glob: 5 should be: 5 Bool_Glob: 1 should be: 1 Ch_1_Glob: A should be: A Ch_2_Glob: B should be: B Arr_1_Glob[8]: 7 should be: 7 Arr_2_Glob[8][7]: 5010 should be: Number_Of_Runs + 10 Ptr_Glob-> Ptr_Comp: 0xffffffffffff43f8 should be: (implementation-dependent) Discr: 0 should be: 0 Enum_Comp: 2 should be: 2 Int_Comp: 17 should be: 17 Str_Comp: DHRYSTONE PROGRAM, SOME STRING should be: DHRYSTONE PROGRAM, SOME STRING Next_Ptr_Glob-> Ptr_Comp: 0xffffffffffff43f8 should be: (implementation-dependent), same as above Discr: 0 should be: 0 Enum_Comp: 1 should be: 1 Int_Comp: 18 should be: 18 Str_Comp: DHRYSTONE PROGRAM, SOME STRING should be: DHRYSTONE PROGRAM, SOME STRING Int_1_Loc: 5 should be: 5 Int_2_Loc: 13 should be: 13 Int_3_Loc: 7 should be: 7 Enum_Loc: 1 should be: 1 Str_1_Loc: DHRYSTONE PROGRAM, 1'ST STRING should be: DHRYSTONE PROGRAM, 1'ST STRING Str_2_Loc: DHRYSTONE PROGRAM, 2'ND STRING should be: DHRYSTONE PROGRAM, 2'ND STRING Microseconds for one run through Dhrystone: 99.2 Dhrystones per Second: 10080.2 10080/1757/80=0.071713147
Запуск теста Coremark benchmark
- Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода:
> targets TargetName Type Endian TapName State -- ------------------ --------- ------ ------------------ ------------ 0* riscv_core0.cpu riscv little riscv_core0.cpu running > >reset halt >load_image coremark.bin 0xffffffffffff0000 bin 27824 bytes written at address 0xffffffffffff0000 downloaded 27824 bytes in 0.648472s (62.376 KiB/s) >resume 0xffffffffffff0000
- Работа тестов начинается после команды resume с выводом лога в терминал uart:
CoreMark 1.0 Platform: SCR9/RV64 Syntacore FPGA @ 80.000 MHz 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 928542173 Total time (secs): 11.606777 Iterations/Sec : 516.939392 Iterations : 6000 Compiler version : Syntacore Clang 16.0.0 (SC git:/tools/llvm/llvm-project/ 1eb) Compiler flags : -O3 -funroll-loops -finline-functions -mllvm --enable-dfa-ju9 Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0xa14c Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 516.939392 / Syntacore Clang 16.0.0 (SC git:/tools/llvm/llvm-proK 516.939392/80=6.4617424
Загрузка и запуск на выполнение бинарного образа ОС Linux на платформе SCR9 SDK
- Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода:
> targets TargetName Type Endian TapName State -- ------------------ --------- ------ ------------------ ------------ 0* riscv_core0.cpu riscv little riscv_core0.cpu running > > halt ; load_image vmlinux.bin 0x0 bin; resume 6994412 bytes written at address 0x00000000 downloaded 6994412 bytes in 104.754578s (65.205 KiB/s) >resume >
Примечание: Команда загрузки предполагает расположение файла в текущей директории. При другом расположении, имя загружаемого файла должно включать относительный путь.
- После завершения загрузки и выполнении команды "0" в загрузчике начнется запуск Linux с выводом лога в терминал uart:
Starting Linux ... hart_init: FEATURE: old[0x43] new[0x0] ;;;;;vvvvvvvvv SSSSSSS rrrr;;;vvvvvvv SS s TM rrrrrr;;vvvvvv SS s s sss ssss sss sss sss sss sss rrrrrr;;vvvvv; SSSSSS s s s s s s s s s s s s rrrr;;;vvvvv;; SS s s s s s sssss s s s s sssss rr;;;vvvvvv;;r SS ssss s s s s s s s s s s rrr;;vvvvv;;rr SSSSSSS s s s ss sss sss sss s sss rrrr;;vvv;;rrr sss rrrrr;;v;;rrrr rrrrrr;;;rrrrr CUSTOM CORES AND TOOLS [ 0.000000] Linux version 5.15.45 (matsi@voyager) (riscv64-unknown-linux-gnu-gcc (GCC) 12.1.1 20220701, GNU ld (GNU Binutils) 2.38.20220701) #8 Tue Dec 13 11:49:58 MSK 2022 [ 0.000000] Machine model: Syntacore SCR9 SDK board [ 0.000000] earlycon: sbi0 at I/O port 0x0 (options '') [ 0.000000] printk: bootconsole [sbi0] enabled [ 0.000000] scr_sdk_dma_setup: created DMA memory pool at 0x0000000007800000, size 8 MiB [ 0.000000] OF: reserved mem: initialized node scr-dma@fe000000, compatible id scr-sdk-dma-pool [ 0.000000] Zone ranges: [ 0.000000] DMA32 [mem 0x0000000000000000-0x00000000077fffff] [ 0.000000] Normal empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000000000-0x00000000077fffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x00000000077fffff] [ 0.000000] SBI specification v0.3 detected [ 0.000000] SBI implementation ID=0x8 Version=0x3 [ 0.000000] SBI TIME extension detected [ 0.000000] riscv: base ISA extensions acdfim [ 0.000000] riscv: ELF capabilities acdfim [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 30240 [ 0.000000] Kernel command line: earlycon=sbi console=hvc0,115200 [ 0.000000] Dentry cache hash table entries: 16384 (order: 5, 131072 bytes, linear) [ 0.000000] Inode-cache hash table entries: 8192 (order: 4, 65536 bytes, linear) [ 0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off [ 0.000000] Memory: 100220K/122880K available (7071K kernel code, 4018K rwdata, 2048K rodata, 4968K init, 291K bss, 22660K reserved, 0K cma-reserved) [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0 [ 0.000000] riscv-intc: 64 local interrupts mapped [ 0.000000] plic: interrupt-controller@fffffffe000000: mapped 16 interrupts with 1 handlers for 2 contexts. [ 0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0] [ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1d854df40, max_idle_ns: 3526361616960 ns [ 0.000035] sched_clock: 64 bits at 1000kHz, resolution 1000ns, wraps every 2199023255500ns [ 0.022162] Console: colour dummy device 80x25 [ 0.032628] printk: console [hvc0] enabled [ 0.032628] printk: console [hvc0] enabled [ 0.053020] printk: bootconsole [sbi0] disabled [ 0.053020] printk: bootconsole [sbi0] disabled [ 0.075247] Calibrating delay loop (skipped), value calculated using timer frequency.. 2.00 BogoMIPS (lpj=4000) [ 0.092629] pid_max: default: 32768 minimum: 301 [ 0.109973] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear) [ 0.125255] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear) [ 0.205059] ASID allocator disabled (0 bits) [ 0.229255] devtmpfs: initialized [ 0.292747] SCRxDMA: reserved coherent memory PHYS 0x7800000 - 0x7ffffff VA ffffffd000380000 [ 0.296589] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns [ 0.332374] futex hash table entries: 256 (order: 0, 6144 bytes, linear) [ 0.382515] NET: Registered PF_NETLINK/PF_ROUTE protocol family [ 0.826243] SCSI subsystem initialized [ 0.849620] pps_core: LinuxPPS API ver. 1 registered [ 0.859992] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <
giometti@linux.it > [ 0.879943] PTP clock support registered [ 0.913308] clocksource: Switched to clocksource riscv_clocksource [ 1.179859] NET: Registered PF_INET protocol family [ 1.195528] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear) [ 1.232090] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear) [ 1.249073] TCP established hash table entries: 1024 (order: 1, 8192 bytes, linear) [ 1.265917] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear) [ 1.281708] TCP: Hash tables configured (established 1024 bind 1024) [ 1.299751] UDP hash table entries: 256 (order: 1, 8192 bytes, linear) [ 1.314902] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear) [ 1.334567] NET: Registered PF_UNIX/PF_LOCAL protocol family [ 1.368485] RPC: Registered named UNIX socket transport module. [ 1.378487] RPC: Registered udp transport module. [ 1.387189] RPC: Registered tcp transport module. [ 1.395873] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 1.408770] PCI: CLS 0 bytes, default 32 [ 1.527737] workingset: timestamp_bits=46 max_order=15 bucket_order=0 [ 2.526068] NFS: Registering the id_resolver key type [ 2.536233] Key type id_resolver registered [ 2.543851] Key type id_legacy registered [ 2.555985] nfs4filelayout_init: NFSv4 File Layout Driver Registering... [ 2.569164] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering... [ 2.668227] 9p: Installing v9fs 9p2000 file system support [ 2.696348] NET: Registered PF_ALG protocol family [ 2.707770] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251) [ 2.722269] io scheduler mq-deadline registered [ 2.730243] io scheduler kyber registered [ 2.757840] simple-pm-bus soc: SCRxDMA: use platform dma ops [ 2.770649] simple-pm-bus ffffffff000000.bridge: SCRxDMA: use platform dma ops [ 5.641878] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled [ 5.758438] of_serial ffffffff010000.serial: SCRxDMA: use platform dma ops [ 5.784799] ffffffff010000.serial: ttyS0 at MMIO 0xffffffff010000 (irq = 1, base_baud = 4062500) is a 16550A [ 6.253556] loop: module loaded [ 6.270636] st: Version 20160209, fixed bufsize 32768, s/g segs 256 [ 6.396090] xilinx_axienet ffffffff040000.ethernet: SCRxDMA: use platform dma ops [ 6.414395] xilinx_axienet ffffffff040000.ethernet: autodetected 64-bit DMA range [ 6.428514] xilinx_axienet ffffffff040000.ethernet: Ethernet core IRQ not defined [ 6.442025] xilinx_axienet ffffffff040000.ethernet (unnamed net_device) (uninitialized): Setting assumed host clock to 65000000 [ 12.400492] riscv-pmu-sbi: SBI PMU extension is available [ 12.410408] riscv-pmu-sbi: 0 firmware and 6 hardware counters [ 12.434625] scr-l2cache-pmu scr-l2cache-pmu: Registered scr-l2cache-pmu, type: 6 [ 12.487630] NET: Registered PF_INET6 protocol family [ 12.548466] Segment Routing with IPv6 [ 12.559310] In-situ OAM (IOAM) with IPv6 [ 12.570925] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver [ 12.608204] NET: Registered PF_PACKET protocol family [ 12.625898] 9pnet: Installing 9P2000 support [ 12.638945] Key type dns_resolver registered [ 13.105595] Freeing unused kernel image (initmem) memory: 4968K [ 13.118657] Run /init as init process Starting syslogd: OK Starting klogd: OK Running sysctl: OK Saving random seed: [ 17.409185] random: dd: uninitialized urandom read (32 bytes read) OK Starting network: OK Starting dropbear sshd: OK Welcome to SCR RV64 development board htg960 login: root
- После выдачи приглашения, Linux загружен и готов для использования.
- Выполнив следующие команды можно вывести информацию о загруженной операционной системе и процессорной платформе:
$ uname -a Linux htg960 5.15.45 #8 Tue Dec 13 11:49:58 MSK 2022 riscv64 GNU/Linux $ cat /proc/cpuinfo processor : 0 hart : 0 isa : rv64imafdc_sscofpmf mmu : sv39 uarch : syntacore,scr9