Я сейчас узнаю о GIC. Ниже приведен код, который я написал для инициализации GICV2, работающего QEMU. Я имею в виду «спецификации архитектуры IHI0048B GIC». Когда я отключаю расширения безопасности и настраиваю группы прерываний в качестве группы1, часовое прерывание не работает. Но если я установите группу прерываний в группу 0, так же работает «Часовое прерывание». «Спецификация архитектуры IHI0048B GIC» говорит, что только поддерживаемые расширения безопасности могут настроить Group0. Это то, что я неправильно понял? < /P>
qemu-system-aarch64 -machine virt,secure=off,gic-version=2 \
-cpu cortex-a53 \
-nographic \
-kernel kernel.elf \
< /code>
void gicv2_init()
{
int value;
__asm__ volatile("ldr %w0, [%1]" :"=r"(value) :"r"(GICD_TYPER));
printf("Security Extensions: %d\n", SECURITY_SUPPORT(value));
int interrupts;
interrupts = ((value & 0xF) + 1) * 32;
if (interrupts > 1020) {
interrupts = 1020; // 1020 ~ 1023 are reserved
}
printf("Max interrupt numbers: %d\n", interrupts);
// Disable interrupt forwadring
__asm__ volatile("str %w0, [%1]" : :"r"(0), "r"(GICD_CTLR) :"memory");
// Disable 0~31 interrupt, except permanently interrupt
__asm__ volatile("str %w0, [%1]" : :"r"(0xffffffff), "r"(GICD_ICENABLERn) :"memory");
if (SECURITY_SUPPORT(value)) {
// TODO: secure access or non-secure access configure
} else {
// set 0-31 interrupt Group1
__asm__ volatile("str %w0, [%1]" ::"r"(0xFFFFFFFFU), "r"(GICD_IGROUPRn));
// clear 0~31 interrupt pending state
__asm__ volatile("str %w0, [%1]" : :"r"(0xFFFFFFFFU), "r"(GICD_ICPENDRn));
// clear 0~31 interrupt active state
__asm__ volatile("str %w0, [%1]" : :"r"(0xFFFFFFFFU), "r"(GICD_ICACTIVERn));
// Enable GICD Group0/1
__asm__ volatile("str %w0, [%1]" : :"r"(3), "r"(GICD_CTLR) :"memory");
// Enable GICC Group0/1
__asm__ volatile("ldr %w0, [%1]" :"=r"(value) :"r"(GICC_CTLR));
value |= (1
Подробнее здесь: https://stackoverflow.com/questions/797 ... ons-enable
О расширениях небезопасных расширений GICV2 ⇐ Linux
-
Anonymous
1754941111
Anonymous
Я сейчас узнаю о GIC. Ниже приведен код, который я написал для инициализации GICV2, работающего QEMU. Я имею в виду «спецификации архитектуры IHI0048B GIC». Когда я отключаю расширения безопасности и настраиваю группы прерываний в качестве группы1, часовое прерывание не работает. Но если я установите группу прерываний в группу 0, так же работает «Часовое прерывание». «Спецификация архитектуры IHI0048B GIC» говорит, что только поддерживаемые расширения безопасности могут настроить Group0. Это то, что я неправильно понял? < /P>
qemu-system-aarch64 -machine virt,secure=off,gic-version=2 \
-cpu cortex-a53 \
-nographic \
-kernel kernel.elf \
< /code>
void gicv2_init()
{
int value;
__asm__ volatile("ldr %w0, [%1]" :"=r"(value) :"r"(GICD_TYPER));
printf("Security Extensions: %d\n", SECURITY_SUPPORT(value));
int interrupts;
interrupts = ((value & 0xF) + 1) * 32;
if (interrupts > 1020) {
interrupts = 1020; // 1020 ~ 1023 are reserved
}
printf("Max interrupt numbers: %d\n", interrupts);
// Disable interrupt forwadring
__asm__ volatile("str %w0, [%1]" : :"r"(0), "r"(GICD_CTLR) :"memory");
// Disable 0~31 interrupt, except permanently interrupt
__asm__ volatile("str %w0, [%1]" : :"r"(0xffffffff), "r"(GICD_ICENABLERn) :"memory");
if (SECURITY_SUPPORT(value)) {
// TODO: secure access or non-secure access configure
} else {
// set 0-31 interrupt Group1
__asm__ volatile("str %w0, [%1]" ::"r"(0xFFFFFFFFU), "r"(GICD_IGROUPRn));
// clear 0~31 interrupt pending state
__asm__ volatile("str %w0, [%1]" : :"r"(0xFFFFFFFFU), "r"(GICD_ICPENDRn));
// clear 0~31 interrupt active state
__asm__ volatile("str %w0, [%1]" : :"r"(0xFFFFFFFFU), "r"(GICD_ICACTIVERn));
// Enable GICD Group0/1
__asm__ volatile("str %w0, [%1]" : :"r"(3), "r"(GICD_CTLR) :"memory");
// Enable GICC Group0/1
__asm__ volatile("ldr %w0, [%1]" :"=r"(value) :"r"(GICC_CTLR));
value |= (1
Подробнее здесь: [url]https://stackoverflow.com/questions/79732442/about-gicv2-non-secure-extensions-enable[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия