Tabla de contenido
- Introducción al OSE
- Extensión del OSE
-
- Extensión de base (EID #0x10)
- Extensiones heredadas (EID #0x00 - #0x0F)
- Extensión del temporizador (EID #0x54494D45 "TIME")
- Extensión IPI (EID #0x735049 "sPI: IPI en modo s")
- Extensión RFENCE (EID #0x52464E43 "RFNC")
- Extensión de administración de Hart State (EID #0x48534D "HSM")
- Extensión de reinicio del sistema (EID #0x53525354 "SRST")
- Extensión de la unidad de monitoreo de desempeño (EID #0x504D55 "PMU")
- Extensión de la consola de depuración (EID n.º 0x4442434E "DBCN")
- Extensión de suspensión del sistema SBI (EID #0x53555350 "SUSP")
- Extensión CPPC (EID n.º 0x43505043 "CPPC")
- Espacio de extensión experimental de SBI (EID #0x08000000 - #0x08FFFFFF)
- Espacio de extensión SBI específico del proveedor (EID #0x09000000 - #0x09FFFFFF)
- Espacio de extensión SBI específico del firmware (EID #0x0A000000 - #0x0AFFFFFF)
Referencias
- Arquitectura de nivel de privilegios RISC-V e inicio del sistema
- Núcleo RISC-V SiFive U64 - Monitor de rendimiento de hardware HPM
- Especificación de la interfaz binaria del supervisor RISC-V
- Inicio rápido de RISC-V OpenSBI
- riscv-software-src/opensbi
Introducción al OSE
SBI
Es decir , agrega una capa intermedia a la RISC-V Supervisor Binary Interface
arquitectura original al abstraer la funcionalidad específica de la plataforma , lo que permite que la aplicación sea portátil en todas las implementaciones.s-u mode
hs mode
s-mode
risc-v
qemu
Instalado por defecto en nuevas versiones.opensbi
$ qemu-system-riscv64 \
--machine virt \
--nographic \
--bios default
OpenSBI v0.4 (Jul 2 2023 11:53:53)
____ _____ ____ _____
/ __ \ / ____| _ \_ _|
| | | |_ __ ___ _ __ | (___ | |_) || |
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
| |__| | |_) | __/ | | |____) | |_) || |_
\____/| .__/ \___|_| |_|_____/|____/_____|
| |
|_|
Platform Name : QEMU Virt Machine
Platform HART Features : RV64ACDFIMSU
Platform Max HARTs : 8
Current Hart : 0
Firmware Base : 0x80000000
Firmware Size : 112 KB
Runtime SBI Version : 0.1
PMP0: 0x0000000080000000-0x000000008001ffff (A)
PMP1: 0x0000000000000000-0xffffffffffffffff (A,R,W,X)
Convención de llamada
SBI
Siga las siguientes especificaciones de convención de llamadas:
ecall
instrucción como instrucción de transferencia de control deHS-Mode
aSEE
a7
DefinidoSBI extension ID(EID)
a6
DefinidoSBI function ID (FID)
- Cuando se llama, el destinatario debe conservar todos los valores de registro
a0
exceptoa1
- La función devuelve: una estructura con
a0
suma como estructura, donde está el código de errora1
a0
struct sbiret {
long error;
long value;
};
SBI
Código de error de retorno estándar
Tipo de error | Valor |
---|---|
OSE_ÉXITO | 0 |
SBI_ERR_FAILED | -1 |
SBI_ERR_NOT_SUPPORTED | -2 |
SBI_ERR_INVALID_PARAM | -3 |
SBI_ERR_DENIED | -4 |
SBI_ERR_INVALID_ADDRESS | -5 |
SBI_ERR_ALREADY_AVAILABLE | -6 |
SBI_ERR_ALREADY_STARTED | -7 |
SBI_ERR_ALREADY_STOPPED | -8 |
Parámetro de lista HART
hart
¿Qué es? Generalmente denominado mecanismo que gestiona RISC-V
el procesador, lo que en riscv
el modelo se denominará riscv
, core
y hart
en ocasiones también denominado hardware thread
, hilos de hardware.
Hart State Management Extension (EID #0x48534D “HSM”)
visible desde
Si SBI
una función necesita pasar una lista al modo de privilegios más altos, debe usar una máscara hart
definida de la siguiente manerahart
unsigned long hart_mask
es unhartids
escalar que contieneunsigned long hart_mask_base
: es el inicio del vector de bits que debe calcularsehartid
El número máximo de corazones que se pueden configurar en una sola SBI
llamada de función es siempreXLEN
hart_mask_base
Se puede establecer en -1, lo que significa que se puede ignorar hart_mask
y todo está disponible.hart
RISC-V
Los registros de nivel de privilegio mencionados aquí
Primero, veamos el registro general: RV32I
es uno de los conjuntos de instrucciones de números enteros, que admite 32 registros enteros generales. Cada registro tiene 32 bits, representados por, x0~x31
donde x0
el registro está reservado como una constante 0. En lenguaje ensamblador, en general grupo de registros Cada registro de
Registro | Nombre ABI | Descripción |
---|---|---|
x0 | cero | Cero cableado |
x1 | real academia de bellas artes | Dirección del remitente |
x2 | sp | puntero de pila |
x3 | GP | puntero global |
x4 | tp | puntero de hilo |
x5-7 | t0-2 | Temporales |
x8 | s0/fp | Registro guardado/puntero de fotograma |
x9 | s1 | Registro guardado |
x10-11 | a0-1 | Argumentos de función/valores de retorno |
x12-17 | a2-7 | Argumentos de función |
x18-27 | T2-11 | Registro guardado |
x28-31 | t3-6 | Temporales |
Además de los registros generales, RISC-V
también se definen una serie de registros de estado de control de niveles de privilegios para cada nivel de privilegios.
misa
: Indica las extensiones de arquitectura admitidas por hart, incluidas extensiones de números enteros, multiplicación y división, atómicas, de punto flotante, de punto flotante de doble precisión y de instrucciones comprimidas, etc.mhartid
: El código que se está ejecutando actualmente.hartid
medeleg
: De forma predeterminada, todas las excepciones seM
manejan en modo. Cuando se establece elmedeleg
bit correspondiente, la excepción es manejada directamente porS
el modo oU
modomideleg
: De forma predeterminada, todas las interrupciones seM
manejan en modo. Cuando se establece el bit correspondientemideleg
, esta interrupción es manejada directamente porS
el modo oU
modomtime
:Almacenar el valor de conteo del reloj actualmtimecmp
: Comparador de conteo de relojes.mtime
Cuando el valor en el registro actual es mayor quemtimecmp
el valor en, se activa una interrupción del relojmstatus
: Indica el estado actual de control del procesador, incluido el bit de habilitación de interrupción global. Nivel de privilegio de memoria, bits de control de orden de bytes, etc.mtvec
: guardetrap
la dirección a la que el procesador debe saltar cuando esto ocurramip
: Indica el tipo de interrupción que se está procesando.EIP
Representa una interrupción externa,TIP
representa una interrupción del reloj ySIP
representa una interrupción del software. Cuando el bit de interrupción correspondiente es 1, indica que hay una interrupción de este tipo para procesar.mie
: Indica los tipos de interrupción actualmente habilitados e ignorados por el procesador.EIP
Representa una interrupción externa,TIP
representa una interrupción del reloj ySIP
representa una interrupción del software. Cuando el bit de interrupción correspondiente se establece en 1, indica que el procesador puede responder a este tipo de interrupción.mscratch
: Guardahart
un puntero al contexto actual.mepc
: Guarde la instrucción que provocó la excepción.mtval
: Guardatrap
información adicional: la dirección del error en la dirección de excepción, la instrucción misma donde ocurrió la excepción de instrucción ilegal y para otrastrap
, su valor es 0mcause
: Indicatrap
el tipo de ocurrencia. Cuando el bit más alto es 1, el campo de orden inferior indica el tipo de interrupción; cuando el bit más alto es 0, el campo de orden inferior indica el tipo de excepción o llamada al sistema.
opensbi
Es M
una implementación del patrón. Cada uno hart
tiene su propio estado de contexto. El puntero del estado de contexto se almacena en mscratch
el registro. opensbi
Primero, el espacio de la pila se asigna de acuerdo con el número de harts definidos por la plataforma y el tamaño del hart stack, y luego hart
se inicializasbi scratch
la estructura para cada uno de ellos, incluyendo la dirección del firmware en la memoria, la dirección de entrada del código que se ejecutará en la siguiente fase de inicio, los parámetros, el nivel de privilegio y otra información, y se asigna sbi scratch
el dirección mscratch
al registro
Modo de ejecución
RISC-V
Se definen tres modos de privilegios.
Machine Mode
: El modo máquina, denominadoM
modo, corresponde al nivel de privilegio 3. Este es el modo de mayor privilegio que se puede ejecutarRISC-V
enhart
Supervisor Mode
: Modo supervisor, denominadoS
modo, correspondiente al nivel de privilegio 1User Mode
: Modo de usuario, denominadoU
modo, correspondiente al nivel de privilegio 0
Además, se define un nivel de privilegio reservado 2 y el modo se expandirá al modo H
en la extensión S
HS
Generalmente hay tres combinaciones:
M Mode
: Generalmente sistemas integrados simplesM Mode + U Mode
: Este sistema puede distinguir entre los modos de usuario y máquina para lograr la protección de recursos.M Mode + U Mode + U Mode
: Este sistema puede implementar un sistema operativo tipo Unix
Extensión del OSE
Extensión de base (EID #0x10)
Base Extension
Las secciones están diseñadas para ser lo más pequeñas posible. Por lo tanto, solo contiene la funcionalidad de detectar qué SBI
extensiones están disponibles y consultar SBI
la versión.
Todas SBI
las implementaciones deben admitir todas las funciones de la extensión base, por lo que no se definen retornos de error.
Get SBI specification version (FID #0)
: Devuelve la SBI
versión de especificación actual
struct sbiret sbi_get_spec_version(void);
Get SBI implementation ID (FID #1)
: Devuelve la SBI
implementación actual ID
, cada SBI
implementación ID
es diferente
struct sbiret sbi_get_impl_id(void);
Get SBI implementation version (FID #2)
: Devuelve la SBI
versión de implementación actual
struct sbiret sbi_get_impl_version(void);
Probe SBI extension (FID #3)
: Devuelve 0 si la SBI
extensión dada no está disponible, o 1 si está disponible, a menos que la implementación defina que sea cualquier otro valor distinto de ceroID (EID)
struct sbiret sbi_probe_extension(long extension_id);
Get machine vendor ID (FID #4)
: Devuelve un mvendorid CSR
valor legal, 0 es siempre CSR
un valor legal de esto
struct sbiret sbi_get_mvendorid(void);
Get machine architecture ID (FID #5)
: Devuelve un marchid CSR
valor legal, y 0 es siempre CSR
un valor legal para esto
struct sbiret sbi_get_marchid(void);
Get machine implementation ID (FID #6)
: Devuelve un mimpid CSR
valor legal, y 0 es siempre CSR
un valor legal para esto
struct sbiret sbi_get_mimpid(void);
Extensiones heredadas (EID #0x00 - #0x0F)
Legacy Extension
usado diferenteCall Convention
a6
SBI
Los campos de función en los registrosID
se ignoran porque están codificados como múltiplesSBI
extensionesID
a1
No devolver nada en el registro- En
SBI
una llamada, el destinatario debe conservara0
todos los registros excepto a0
El valor devuelto en el registro es específicoSBI Legacy Extensions
de
SBI Legacy Extensions
En desuso en favor de otras extensiones que se enumeran a continuación
Extension: Set Timer (EID #0x00)
:
long sbi_set_timer(uint64_t stime_value)
Extension: Console Putchar (EID #0x01)
: ch
Escribe los datos que aparecen en la consola de depuración.
long sbi_console_putchar(int ch)
Extension: Console Getchar (EID #0x02)
: Lee un byte desde la consola de depuración
long sbi_console_getchar(void)
Extension: Clear IPI (EID #0x03)
:
Extension: Send IPI (EID #0x04)
: Envía una interrupción entre procesadores a hart_mask
todos los definidos en . hart
Las interrupciones entre procesadores aparecen en el extremo receptor como interrupciones de software administrado.
long sbi_send_ipi(const unsigned long *hart_mask)
Extension: Remote FENCE.I (EID #0x05)
: Indica hart
la ejecución remota FENCE.I
de instrucciones.
long sbi_remote_fence_i(const unsigned long *hart_mask)
Extension: Remote SFENCE.VMA (EID #0x06)
: Indica la ejecución remota hart
de una o más SFENCE.VMA
instrucciones que cubren el rango de direcciones virtuales entre la dirección de inicio y el tamaño.
long sbi_remote_sfence_vma(const unsigned long *hart_mask,
unsigned long start,
unsigned long size)
Extension: Remote SFENCE.VMA with ASID (EID #0x07)
: Indica al corazón remoto que ejecute una o más SFENCE.VMA
instrucciones que cubran el rango de direcciones virtuales entre la dirección inicial y el tamaño. Esto solo incluye lo dadoASID
long sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
unsigned long start,
unsigned long size,
unsigned long asid)
Extension: System Shutdown (EID #0x08)
: Ponga todos los dispositivos en estado de apagado desde la perspectiva del administrador
void sbi_shutdown(void)
Extensión del temporizador (EID #0x54494D45 “TIEMPO”)
Esto reemplazará el legado, legacy timer extension (EID #0x00)
es decir.Extension: Set Timer (EID #0x00)
Function: Set Timer (FID #0)
:
struct sbiret sbi_set_timer(uint64_t stime_value)
Extensión IPI (EID #0x735049 “sPI: IPI en modo s”)
Esto Extension
reemplazó legacy extension (EID #0x04)
Extensión RFENCE (EID #0x52464E43 “RFNC”)
Esto Extension
reemplazólegacy extensions (EIDs #0x05 - #0x07)
Extensión de administración de Hart State (EID #0x48534D “HSM”)
Hart State Management(HSM)
La extensión introduce un conjunto Hart State
y un conjunto de Hart State
funciones que permiten que el software del modo de gestión solicite cambios.
El estado Hart que se muestra a continuación HSM
describe todos los estados posibles y el estado HSM
único de cada estado.HSM
id
identificación estatal | Nombre del Estado | Descripción |
---|---|---|
0 | COMENZÓ | Hart está físicamente iniciado y funcionando normalmente. |
1 | INTERRUMPIDO | hart no se ejecuta en modo S ni en ningún modo con privilegios inferiores. Si la plataforma tiene un mecanismo para cerrar hart, esto puede deberse a que fue cerrada por una instancia de SBI. |
2 | START_PENDING | Otros Harts requieren continuar o iniciar este Hart desde el estado DETENIDO, y la instancia de SBI está intentando que este Hart entre en el estado INICIADO. |
3 | DETENER_PENDING | El corazón solicitó ser detenido o apagado desde el estado INICIADO y la instancia de SBI está intentando poner el corazón en el estado DETENIDO. |
4 | SUSPENDIDO | El corazón está en un estado de suspensión (o de bajo consumo) específico de la plataforma |
5 | SUSPENDER_PENDING | El corazón solicita pasar del estado INICIADO a un estado de bajo consumo de energía específico de la plataforma, y la instancia de SBI está tratando de llevarlo al estado SUSPENDIDO específico de la plataforma. |
6 | RESUME_PENDING | Una interrupción o un evento de hardware específico de la plataforma provocó que el corazón pasara del estado SUSPENDIDO a la ejecución normal, y la instancia de SBI está intentando hacer la transición del corazón al estado INICIADO. |
El estado en cualquier momento hart
sólo puede ser uno de los de la tabla anterior.
Function: HART start (FID #0)
: Ejecute el modo especificado start_addr
y guárdelo en el registro cuando comience la ejecución . donde es un valor de bit, que se refiere al número de dígitos de la máquinaS
hartid
hart
opaque
a1
opaque
XLEN
XLEN
struct sbiret sbi_hart_start(unsigned long hartid,
unsigned long start_addr,
unsigned long opaque)
Function: HART stop (FID #1)
: Solicita SBI
a la implementación que deje de ejecutar llamadas en modo de supervisión hart
y devuelva la propiedad de las mismas a SBI
la implementación.
struct sbiret sbi_hart_stop(void)
Function: HART get status (FID #2)
: Devuelve el estado del hartid
especificado hart
struct sbiret sbi_hart_get_status(unsigned long hartid)
Function: HART suspend (FID #3)
: Requiere que SBI
la implementación coloque a la persona que llama de esta función hart
en suspend_type
el estado de suspensión (o de bajo consumo) específico de la plataforma especificada. resume_addr
Es la dirección que regresa al modo para continuar la ejecución hart
después de que se completa la suspensión . Es un valor de bit que se utilizará cuando se complete la suspensión se colocará en el registroS
opaque
XLEN
hart
a1
struct sbiret sbi_hart_suspend(uint32_t suspend_type,
unsigned long resume_addr,
unsigned long opaque)
Extensión de reinicio del sistema (EID #0x53525354 “SRST”)
La extensión System Reset proporciona una funcionalidad que permite que el software de administración solicite un reinicio o apagado a nivel del sistema.
Function: System reset (FID #0)
reset_type
: Reinicie reset_reason
el sistema según las instrucciones proporcionadas.
struct sbiret sbi_system_reset(uint32_t reset_type, uint32_t reset_reason)
Extensión de la Unidad de Monitoreo del Rendimiento (EID #0x504D55 “PMU”)
RISC-V硬
Los contadores de rendimiento del software, como mcycle、minstret
y mhpmcounterX csr
, se pueden utilizar en modo administrativo cycle、instret
y hpmcounterX csr
se puede acceder a ellos como de solo lectura.
SBI
La extensión Performance Monitoring Unit ( PMU PMU
) es una interfaz para configurar y utilizar contadores de rendimiento de hardware con la ayuda desupervisor-mode在machine-mode
hypervisor-mode
RISC-V
SBI PMU
Extensiones proporcionadas
- El software del modo de gestión se utiliza para descubrir y configurar
hart
la interfaz para cada contador de hardware/firmware. perf
Una interfaz compatible típica
Extensión de la consola de depuración (EID n.º 0x4442434E “DBCN”)
La extensión de la consola de depuración define un mecanismo común para la impresión temprana al depurar y arrancar desde software en modo de administración.
Esta extensión reemplaza the legacy console putchar (EID #0x01)
yconsole getchar (EID #0x02) extensions
La extensión de la consola de depuración permite que el software del modo de administración SBI
escriba o lea varios bytes en una sola llamada
Function: Console Write (FID #0)
:Escribir bytes desde la memoria de entrada a la consola de depuración
struct sbiret sbi_debug_console_write(unsigned long num_bytes,
unsigned long base_addr_lo,
unsigned long base_addr_hi)
Function: Console Read (FID #1)
: Lee bytes de la consola de depuración en la memoria de salida.
struct sbiret sbi_debug_console_read(unsigned long num_bytes,
unsigned long base_addr_lo,
unsigned long base_addr_hi)
Function: Console Write Byte (FID #2)
:Escribe un byte en la consola de depuración
struct sbiret sbi_debug_console_write_byte(uint8_t byte)
Extensión de suspensión del sistema SBI (EID #0x53555350 “SUSP”)
system suspend extension
Define un conjunto de estados de suspensión a nivel del sistema y una función que permite que el software del modo de administración solicite que el sistema pase a estados de suspensión.
Extensión CPPC (EID n.º 0x43505043 “CPPC”)
ACPI
Define Collaborative Processor Performance Control (CPPC)
un mecanismo, un mecanismo abstracto y flexible para que el software de administración de energía en modo de supervisión coopere con entidades en la plataforma para administrar el rendimiento del procesador.