Доброго всем времени суток. Может кто нить встречался или просто знает. Надо перезагрузить машину из bootsplash есть такие плагины для plymouth. Много способов перепробавано ниодин не помогает system (reboot -f) system (telinit 6) __asm__ ("int $0x19") __asm__ __volatile__ ("lidt %0 \n\t" : "=m"(desc)); __asm__ __volatile__ ("movl $0x0, %%esp \n\t" "int $0x3 \n\t" : ); , но ведь по трем пальцам же перезагружется значит хоть аппаратное но прерывание то обрабатывается. Может кто знает точный способ или номер прерывания а то чего то сведения какие-то противореживые.
Спасибо огромное! Теперь по крайней мере понятно в какую сторону копать. Однако код __asm__ __volatile__ ("inb $0x92, %%al \n\t" "orb $0x01, %%al \n\t" "outb %%al,$0x92 \n\t" : ); Как то не работает говорит ошибку в сигментировании.
По кое каким раскопкам там надо класть 0х1234 по адресу 40:72 но это что-то тоже не очень помогает...
вообще, если биос еще действует, то достаточно записать 0x1234 в ячейку с адресом 0x472. но раз биос не действует, то придется перезагружаться вручную.
Еще раз спасибо. Кажется это действительно работает только одна проблема. Для того чтобы работало правильно нужно дождать когда буфер клавиатуры будет пустой, то есть организовать цикл, а я никак не могу заставить дурацкий инлайн асемблер понимать метки Код (Text): __asm__ __volatile__ ( "1:" "inb $0x64, %%al \n\t" "testb $00000010b, %%al \n\t" "jne 1b \n\t" "movb $0xD1, %%al \n\t" "outb %%al, $0x64 \n\t" "2:" "inb $0x64, %%al \n\t" "testb $00000010b, %%al \n\t" "jne 2b \n\t" "mov $0xFE, %%al \n\t" "outb %%al, $0x60 \n\t" :); Error: backward ref to unknown label "8:" Error: backward ref to unknown label "8:" Может кто знает
А очистить буфер клавиатуры. достаточно записать значение байта по адреса 0x41C в байт по адресу 0x41A
а. извините. забыл. BIOS уже не работает, но вы можете просто сбросить клавиатуру. это правда уже будет не фатально т.к. после последует мягкая перезагрузка. пошлите ей команду 0xFF - сброс и само тестирование.
Честно говоря у меня уже существует подозрение что просто мой код падает с какой то тупой ошибкой и его надо как следует отладить. Код с метками доведен до компилируемого состояния, однако не работает... Код (Text): __asm__ __volatile__ ( "1:\tinb $0x64, %%al \n\t" "testb $0x02, %%al \n\t" "jne 1b \n\t" "movb $0xD1, %%al \n\t" "outb %%al, $0x64 \n\t" "2:\tinb $0x64, %%al \n\t" "testb $0x02, %%al \n\t" "jne 2 \n\t" "mov $0xFE, %%al \n\t" "outb %%al, $0x60 \n\t" :);
Всем спасибо за помошь. Вопрос решился намного проще, просто системным вызовом reboot с правильными параметрами. А то поначалу запудрили мозг магическими числами =)