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