перезагрузка во время загрузки или номер прерывания по CTRL+ALT+DEL

Тема в разделе "WASM.UNIX", создана пользователем friackazoid, 4 июн 2009.

  1. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Доброго всем времени суток.
    Может кто нить встречался или просто знает. Надо перезагрузить машину из 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"
    : );
    , но ведь по трем пальцам же перезагружется значит хоть аппаратное но прерывание то обрабатывается.
    Может кто знает точный способ или номер прерывания а то чего то сведения какие-то противореживые.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Через контроллер клавиатуры.
    Код (Text):
    1. in     al,92h
    2. or     al,01h
    3. out   92h,al
     
  3. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Спасибо огромное!
    Теперь по крайней мере понятно в какую сторону копать. Однако код
    __asm__ __volatile__ ("inb $0x92, %%al \n\t"
    "orb $0x01, %%al \n\t"
    "outb %%al,$0x92 \n\t"
    : );

    Как то не работает говорит ошибку в сигментировании.
     
  4. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    По кое каким раскопкам там надо класть 0х1234 по адресу 40:72 но это что-то тоже не очень помогает...
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    вообще, если биос еще действует, то достаточно записать 0x1234 в ячейку с адресом 0x472. но раз биос не действует, то придется перезагружаться вручную.
     
  6. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Еще раз спасибо. Кажется это действительно работает только одна проблема. Для того чтобы работало правильно нужно дождать когда буфер клавиатуры будет пустой, то есть организовать цикл, а я никак не могу заставить дурацкий инлайн асемблер понимать метки
    Код (Text):
    1. __asm__ __volatile__ (
    2.                         "1:"    "inb $0x64, %%al        \n\t"
    3.                                 "testb $00000010b, %%al \n\t"
    4.                                 "jne 1b                 \n\t"
    5.                                 "movb $0xD1, %%al       \n\t"
    6.                                 "outb %%al, $0x64       \n\t"
    7.                         "2:"    "inb $0x64, %%al        \n\t"
    8.                                 "testb $00000010b, %%al \n\t"
    9.                                 "jne 2b                 \n\t"
    10.                                 "mov $0xFE, %%al        \n\t"
    11.                                 "outb %%al, $0x60       \n\t"
    12.                                 :);
    Error: backward ref to unknown label "8:"
    Error: backward ref to unknown label "8:"

    Может кто знает
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    А очистить буфер клавиатуры. достаточно записать значение байта по адреса 0x41C в байт по адресу 0x41A
     
  8. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а. извините. забыл. BIOS уже не работает, но вы можете просто сбросить клавиатуру. это правда уже будет не фатально т.к. после последует мягкая перезагрузка. пошлите ей команду 0xFF - сброс и само тестирование.
     
  9. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Честно говоря у меня уже существует подозрение что просто мой код падает с какой то тупой ошибкой и его надо как следует отладить. Код с метками доведен до компилируемого состояния, однако не работает...
    Код (Text):
    1.  __asm__ __volatile__ (
    2.                          "1:\tinb $0x64, %%al    \n\t"
    3.                          "testb $0x02, %%al      \n\t"
    4.                          "jne 1b                 \n\t"
    5.                          "movb $0xD1, %%al       \n\t"
    6.                          "outb %%al, $0x64       \n\t"
    7.                          "2:\tinb $0x64, %%al    \n\t"
    8.                          "testb $0x02, %%al      \n\t"
    9.                          "jne 2                  \n\t"
    10.                          "mov $0xFE, %%al        \n\t"
    11.                          "outb %%al, $0x60       \n\t"
    12.                        :);
     
  10. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    исправь на $0x64
     
  11. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Всем спасибо за помошь.
    Вопрос решился намного проще, просто системным вызовом reboot с правильными параметрами. А то поначалу запудрили мозг магическими числами =)