obsluha preruseni v linuxe

David Šauer davids na iol.cz
Středa Březen 31 14:53:31 CEST 1999


>>>> "RMK" == Richard Milan Komzik <rkomzik na komzik.ta3.sk> píše:

    RMK> Mam pristroj, ktory je pripojeny do serioveho portu pocitaca. Tento pristroj
    RMK> generuje synchronizacne impulzy a taktiez dodava na port nejake data.
    RMK> Program, ktory toto obsluhuje, sa nam podarilo napisat v C+assembler: Pri
    RMK> kazdom synchronizacnom impulze sa v systeme vyvola prerusenie. Vektor tohto
    RMK> prerusenia sa nastavi na routinu (napisanu v assembleri, aby to bolo
    RMK> rychle), ktora zabezpeci vycitanie dat z portu. Synchronizacny impulz moze
    RMK> chodit kazdu stotinu sekundy (v buducnosti mozno tisicinu). Takto to vyzera
    RMK> pod DOSom.

    RMK> Teraz moje otazky: da sa taketo nieco urobit pod linuxom?

Ano.

    RMK>  Je mi jasne, ze
    RMK> assemblerovska syntax je ina,

Je, ale asi by to slo i v C.

    RMK> ze musim zabezpecit pristup k portu (je

Pokud chcete pristup k HW portu, bude to chtit suid. Ale asi to
neni nejlepsi reseni - viz. dale

    RMK> potrebne, aby vysledna exekutiva bola setuid root, alebo je lepsie povolit
    RMK> uzivatelom prava na /dev/cua0?)...

/dev/cua* radeji uz nepouzivat, (nyni /dev/ttyS*)

    RMK> Je vsak velmi dolezite, aby sa meranie
    RMK> vykonalo po prichode synchronizacneho impulzu a aby sa stihlo
    RMK> obsluzit do
    RMK> prichodu dalsieho. Predpokladam, ze procesu bude potrebne priradit vysoku
    RMK> (najvyssiu?) prioritu. Ako sa take nieco zabezpeci? Da sa to iba nejakymi
    RMK> systemovymi prostriedkami, alebo je potrebne mat specialny
    RMK> kernel?

Nikoli specialni kernel, ale asi budete potrebovat napsat vlastni
driver. Sam pouzivam vzorkovani hodnot na portu kazdou 1ms a neni problem
(odzkouseno na 486DX2/80). Doporucuji knihu Alessando Rubini: Linux
device drivers. Musite asi napsat vlastni obsluhu interuptu.

  Jinak existuje RT(realtime) linux, ale je to asi mozna prilis tezky
  kalibr.

    Procesem v uzivatelskem prostoru to temer jiste resit
  nepujde - i kdyz lze  zkusit experimentovat s volanim sched_setparam().

    RMK> Na zaver este jedna ina otazka: ako je to s mapovanim klavesnice v linuxe?
    RMK> Napisal som si routinu, ktora nahradzuje Borlandovske "getch", ale
    RMK> samozrejme, dostavam pri klavesach ako napr. arrow keys ine kody ako pod
    RMK> DOSom. Ako sa takyto problem zvykne riesit v zaujme prenositelnosti
    RMK> zdrojaku?

Linux ma tzv. keycodes, blize zdrojak programu 'showkey'.

--
* David Sauer, student of Czech Technical University
* electronic mail: davids na iol.cz (mime compatible)



Další informace o konferenci Linux