Как перейти в реальный режим в драйвере Linux - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть SBC на базе Intel, который я использую во встроенном приложении. Он имеет порт Digital IO (DIO), подключенный к микросхеме Fintek Super I / O. Я хочу иметь возможность устанавливать биты на выходных линиях этого порта для управления другим оборудованием.

К счастью, в BIOS производителя есть функция, позволяющая сделать это:

AX=6F09h
bl=<bits>
int 15h

К сожалению, я использую 64-битную версию Linux в защищенном режиме. Можно ли как-нибудь вызвать это прерывание BIOS, либо из программы пользовательского пространства, либо в качестве драйвера ядра, если это будет необходимо?

В качестве альтернативы я могу установить регистры непосредственно на микросхеме Fintek, но для этого необходимо точно знать, какие контакты на микросхеме подключены к разъему DIO, и, конечно, это меняется от ревизии платы к ревизии платы.

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Возможно, в вашем дистрибутиве есть пакеты для libx86 .libx86 использует lrmi (противоположность DPMI) в x86 и эмулятор x86 в x86-64, поскольку режим AFAIK vm86 нельзя использовать в режиме 64 бит.

1 голос
/ 15 февраля 2012

Прежде всего, вы должны убедиться, что Linux не перезаписывает память, где находятся прерывания.

Вы не сможете перейти в реальный режим каким-либо простым и беспроблемным способом запуска ОС. Вы должны найти, где в памяти находится эта функция прерывания, и использовать какой-то эмулятор для интерпретации 16-битного машинного кода и выполнения процедур в 64-битном длинном режиме. Вы можете искать Форумы OSDev и OSDev Wiki , чтобы найти больше по этой теме.

(Совет: ищите вопросы по использованию VESA в защищенном режиме).

0 голосов
/ 16 февраля 2012

Я уже вставил его в загрузчик для прототипов, но он может не переноситься.Либо вы исправляете hw или futz с помощью расположения чипов в зависимости от того, «где они были раньше».

...