Цитата(nik.laus @ Oct 20 2008, 14:35)

amw, а можно по конкретнее данную тему, где о ней можно почитать? (если можно и есть, ссылку на статью по данной теме..., я о ней ни малейшего представления не имею и даже ниразу не слышал, кроме этого форума)
Не обижайтесь за повторение, но... Я такого в Линукс не делал.
Но делал нечто похожее, при написании собственного загрузчика.
У меня была PCI плата с BIOS на ней (сами делали и плату и ее биос).
Загружал Линукс. Тоже с платы (не ней была флеш/MMC). Суть сводилась к тому, штатными средтвами BIOS материнки инициализировался BIOS PCI платы (она была как Boot Device), регистрировался через PCI PnP BIOS функции собственный (встроенный в PCI плату) обработчик программного прерывания.
Когда BIOS материнки вызывал загрузчик нашей платы, он (загрузчик) инитил Protected Mode, устанавливал IDT и Gate для него, и потом через инструкцию int 21h (выбирали от фонаря, но чтоб не пересечся с BIOS материнки, а int 21h - это DOS, которого у нас небыло) получали доступ к флеш/MMC. Оттуда грузили Линукс. И все. В линукс был другой драйвер и никаких int 21h он не использовал.
Где почитать на эту тему в контексте Линукс - не знаю. Я использовал документы PnP BIOS, Phoenix BIOS specification. Но это про этап загрузки ПК, а не про Линукс. Нашел в сети, google помог.
Мой случай пересекается _слегка_ с исходником в Линукс (2.6.26)
arch/x86/pci/pcbios.c
Цитата
А вообще вроде там ничего такого нету... а что касается int 37 - "ну, это ,как-бы..." эмуляция 5 hardварного прерывания, внутри проца, если он в защищенном режиме работает... в реальном режиме это будет int 13 (8 зарезервировано, а не 32...)
вот из этого я и исхожу... И действительно, в
Код
cat /proc/stat | grep intr
появляется 5 прерывание (становится 1 после того, как было 0, и увеличивается на 1 кажный раз, когда я делаю int 37). Поэтому я думаю, что int 37 это тоже самое что и "железное 5тое", за исключением того, что это программный муляж.
Так прерывание программное или аппаратное? А почему 37 а не 5? И откуда на этом прерывании обработчик? Он там вообще есть? Если нет - то установите свой. Тогда по int 37 должна вызваться Ваша функция -обработчик.
Возмооожно я не понял что имеено Вам нужно? Я почему-то решил, что у Вас есть некий обработчик сидящий в BIOS то-ли Вашей, то материнской платы. Ноесли такого нет - то установите свой. request_irq() Вам в помощь.
Цитата
А плата генерит 5 irq, а биосом на плате вроде и не пахнет (только io ports) (в доке к чипу об этом даже не упоминается, а все остальные чипы на плате - простые наборы вентилей, выполняющих свою функцию, ниче умного, вроде...).
Дайте ссылку, где про биос на плате и тому подобные темы почитать можно. Спасибо.
Честно говоря, не понял смысла использования int 37.
Если у Вас нет обработчика программного прерывания типа в BIOS, и нет аппаратного прерывания, то зачем оно Вам вообще?
Заведите к примеру таймер, и занимейтесь pooling-ом. Аналогия с DOS не всегда уместна.
PS:
Посмотрел только что исходники ядра 2.6.26. Там все теперь по другому. Когда я года 4 назад делал проект (см. выше) то ядро было то-ли 2.6.12 то-ли еще старее. Там находил вызовы int 10h где-то в районе framebuffer и vga console.