Portál AbcLinuxu, 13. května 2025 22:27

Dotaz: Práce s LPT v linuxu v jazyce C

1.12.2005 06:51 --- | skóre: 13 | blog: LINUXDRAK
Práce s LPT v linuxu v jazyce C
Přečteno: 590×
Odpovědět | Admin
Ahojky , neví prosím někdo : 1)jak přistupovat na liboivolný hw port v pc v linuxu v jazyce pod nerootovským uživatelem ?

Na portu 350H mám vlastní ISA kartu ( V/V brány od adresy 350H35FH ) s elektronikou a potřebuji jí ovládat ( jen zápis na port ) .

2)když mám ten zdroják ( "mujprogram.c" , jak jej přeložím a spustím ?

Omlouvám , že dávám dvě otázky , ale ta druhá souvidí s první .

Díky za nápady !!!

LINUXDRAK
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.12.2005 07:24 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: Práce s LPT v linuxu v jazyce C
Odpovědět | | Sbalit | Link | Blokovat | Admin
1. http://www.faqs.org/docs/Linux-mini/IO-Port-Programming.html

2a. Překladačem (typicky gcc).

2b. Voláním execve(), ale to se obvykle nechává na shellu. Takže nastavením práv (chmod +x mujprogram) a spuštěním (./mujprogram)
1.12.2005 11:02 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Práce s LPT v linuxu v jazyce C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tvoje otázka vyvolává řadu dalších otázek. Ten přímý přístup na porty se provádí funkcí outb(), přičemž předtím se musí požádat o povolení voláním ioperm(). Jenže to pak musí běžet jako root a to jsi (pochopitelně) nechtěl.
Jediná rozumná cesta je napsat modul do jádra, a pak zařízení ovládat přes jaderná volání, případně přístupem na /dev/něco . Někdy se dá použít i /proc. Jenže když ani nevíš, jak zkompilovat zdroják v C, tak tohle asi pro tebe nebude. Co zbývá? Napiš podrobně, o jakou kartu jde, co znamená "vlastní ISA karta", proč se ve tvé otázce objevilo "LPT" a třeba se najde nějaké standardní řešení.
1.12.2005 14:42 --- | skóre: 13 | blog: LINUXDRAK
Rozbalit Rozbalit vše Re: Práce s LPT v linuxu v jazyce C
Moje Isa karta obashuje :
  • Binární dekoder adres
  • 16 IO bran vystupu ( 350 - 35FH )
  • Brany jsou tvoreny obvody IO 8255
Jak v LINUXU pošlu bajt na adresu v rozsahu 350H - 35FH .
Musim byt stale jako root ?
Jazyku C nerozumim ( umim jen VB , pascal , delphi , php ) .

Karta vyuziva tyto signaly z ISA sbernice :
  • /R
  • /W
  • /CS
  • RESET
  • +5V
  • 8 bit data
  • 16 bit adresa
Vlastne jde o vytazeni "dratu" z ISA sbernice pro rizeni grafickeho displeje , maticoveho displeje a maleho robota , ktery je pripojeny kabelem ke desce .
Deska obsahuje ochranne obvody proti zkratu atd ...

Diky za napady

LINUXDRAK
1.12.2005 15:45 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Práce s LPT v linuxu v jazyce C
Bez jazyka C se to v tomto případě neobejde. Neexistuje nic jako "v LINUXU poslat bajt na port". Pro přístup na porty je potřeba si napsat program, přičemž jazyk C je pro tento účel nejvhodnější. Jestliže v něm neumíš programovat a přitom máš unikátní zařízení, tak jsi ve svízelné situaci. Klíčová část, která bude obsluhovat porty, bude využívat funkce ioperm() a outb(). Psal jsem o tom tady:
http://www.abclinuxu.cz/forum/show/33111#25033
Vzniklou binárku bys pak mohl nastavit jako setuid a pouštět ji i jako obyčejný uživatel.
Ideální by bylo, kdyby ses začal učit Céčko nebo Python a dal pár stovek někomu, kdo pro tvé zařízení napíše modul do jádra a vydá ho pod GPL.
1.12.2005 17:43 --- | skóre: 13 | blog: LINUXDRAK
Rozbalit Rozbalit vše Re: Práce s LPT v linuxu v jazyce C
Nezlob te se na me , ja terprve s Linuxem zacinam a uz jsem si pujcil knizku "Programujeme v jazyce C" .
Uz jsem ten kousicek kodu , jak je napsany vys , zkompliloval a chodi to vyborne pod rootem , ale nevim , jak nastavim "setuid" .
1.12.2005 18:21 podlesh | skóre: 38 | Freiburg im Breisgau
Rozbalit Rozbalit vše Re: Práce s LPT v linuxu v jazyce C
chown root binarka
chmod u+s binarka

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.