kerneli nenässä

onko kukaan saanut toimimaan itse kirjoitettua modulia, jossa halutaan vain saada ulkoinen keskeytys lpt portista? Näinkin triviaali juttu tuntuu olevan aivan saaaatanan hankalaa, kun api elää koko ajan rrrlele.

Tää kääntyy mutta ei toimi ja asentuukin vasta kun kaikki muut parport:ia käyttävät moduulit on heivattu "alaskaan":
ret = request_irq(7, handler, IRQF_DISABLED, "parallelport", (void *)&devid);

Ja näin sen pitäis olla nyky apin mukaan, yllätys yllätys tää ei edes käänny:
ret = request_irq(7, handler, SA_INTERRUPT, "parallelport", NULL);

Ja tää on nenässä ( aika syvällä jo..) -> 2.6.32-24-generic
24770
Äänestä

Muut lukivat myös

Vastaukset 24

Vanhimmat

Kyllähän se API on vakaa koko julkaisun, eli työpöytäkäytössä 3v ja palvelimessa 5v. Jos kaipaa pitkäikäisempää API:a niin sitten kannattaa vaihtaa toiseen käyttöjärjestelmään, esimerkiksi CentOS 6 mikä tulee kohta. Siinä olisi 7v vakaa se API.

Jos sitten haluaa paremman API:n (vaikka muuttuisikin) niin FreeBSD:tä voisi suositella.

Äänestä
  • tuolta linkistäsi otettua pätkää, kun yritätä kääntää niin ei onnaa ennen kun vaidat SA_INTERRUPT -> vanhaan muotoon IRQF_DISABLED. Sitten kun kääntyyy niin ei tule keskeytyksen palaa vaikka kuinka näkytät lpt portin 10/ACK nastaan 5 volttia...

    Äänestä

  • vaikkapa kirjoitti:

    tuolta linkistäsi otettua pätkää, kun yritätä kääntää niin ei onnaa ennen kun vaidat SA_INTERRUPT -> vanhaan muotoon IRQF_DISABLED. Sitten kun kääntyyy niin ei tule keskeytyksen palaa vaikka kuinka näkytät lpt portin 10/ACK nastaan 5 volttia...

    kernel/sys.logi jäkättää asiasta?

    Äänestä

  • unineeenen kirjoitti:

    kernel/sys.logi jäkättää asiasta?

    en nyt oikein tiedä mitä olet tekemässä, joten tarjoan seuraavaksi tätä:

    http://www.linux-support.com/cms/en/component/content/article/3-articles/79-interrupt-handling-in-kernel-modules-linux-26?directory=14

    "So, which type of interrupt should your driver use? On modern systems, SA_INTERRUPT is intended only for use in a few, specific situations such as timer interrupts. Unless you have a strong reason to run your interrupt handler with other interrupts disabled, you should not use SA_INTERRUPT."

    Äänestä

  • unineeenen kirjoitti:

    kernel/sys.logi jäkättää asiasta?

    kun pohjana http://www.captain.at/howto-linux-kernel-parallel-port-interrupt.php
    jossa SA_INTERRUPT vaihdettu IRQF_DISABLED eli saatu käännettyä insmod sanoo:

    [ 270.436745] parint: error requesting irq 7: returned -16
    [ 270.436757] parint: Generating Interrupt now on all output pins (intr/ACK = pin 10)
    [ 270.436767] parint: Interrupt generated. You should see the handler-message

    sitten rmmod:
    [ 340.453088] Modules linked in: parint(-) binfmt_misc fbcon tileblit font bitblit softcursor vga16fb vgastate snd_intel8x0 snd_ac97_codec ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device i915 drm_kms_helper snd ppdev drm i2c_algo_bit video psmouse parport_pc intel_agp soundcore snd_page_alloc serio_raw output shpchp agpgart lp parport ohci1394 e100 mii ieee1394
    [ 340.453260] [] cleanup_module 0x21/0x30 [parint]
    tämän jälkeen poistin kaikki muut modulit, jotka kyttää irq 7:ää

    ja uudelleen insmod nyt näyttää periaatteessa hyvältä:
    [ 2686.454922] parint: Generating Interrupt now on all output pins (intr/ACK = pin 10)
    [ 2686.454941] parint: Interrupt generated. You should see the handler-message

    mutta ei vaan tule logille printtiä kasitelijältä vaikka lpt:n 10 nastaa eli ack:ia soutaa 0 ja 5v edestakaisin??

    Äänestä

  • unineene kirjoitti:

    en nyt oikein tiedä mitä olet tekemässä, joten tarjoan seuraavaksi tätä:

    http://www.linux-support.com/cms/en/component/content/article/3-articles/79-interrupt-handling-in-kernel-modules-linux-26?directory=14

    "So, which type of interrupt should your driver use? On modern systems, SA_INTERRUPT is intended only for use in a few, specific situations such as timer interrupts. Unless you have a strong reason to run your interrupt handler with other interrupts disabled, you should not use SA_INTERRUPT."

    modulia, joka heittää demoni prosessille USR1 signaalin keskeytyksen tapahtuessa. Suuremassa mittakaavassa tarkoitukseni on lukea Siemens S5 plc:ltä AS511 liitänästä ulostulojen tilat ja tallentaa ne levypinnalle. S5 käyttää yhtä IO lähtöä ylhäällä aina, kun jonkin muun lähdön tila muuttuu. Edellä mainittu lähtö on optoerottimella kytketty lpt-portin 10/ack nastaan.

    Sinällään hämää tuo kun 2.6 kernel versiossa nimen omaan pitäisi käyttää SA_INTERRUPT:ia eikä INTF_DISABLED mutta kyseisen kernelin linux/interupt.h ei sitä kuitenkaan ole?

    Noh pitääpäs syventyä tuossa linkissä esitettyyn tietoon...

    Äänestä

  • olen tekemässä kirjoitti:

    modulia, joka heittää demoni prosessille USR1 signaalin keskeytyksen tapahtuessa. Suuremassa mittakaavassa tarkoitukseni on lukea Siemens S5 plc:ltä AS511 liitänästä ulostulojen tilat ja tallentaa ne levypinnalle. S5 käyttää yhtä IO lähtöä ylhäällä aina, kun jonkin muun lähdön tila muuttuu. Edellä mainittu lähtö on optoerottimella kytketty lpt-portin 10/ack nastaan.

    Sinällään hämää tuo kun 2.6 kernel versiossa nimen omaan pitäisi käyttää SA_INTERRUPT:ia eikä INTF_DISABLED mutta kyseisen kernelin linux/interupt.h ei sitä kuitenkaan ole?

    Noh pitääpäs syventyä tuossa linkissä esitettyyn tietoon...

    http://lxr.free-electrons.com/source/include/linux/interrupt.h?v=2.6.32

    tuolla ei mainita kyllä halaistua sanaa SA_INTERRUPT:sta ja katoin 24-35 ja poissaolollaan loistaa :)
    tässä seuraavassa jotain myös vuodelta 2007:
    "Why: The interrupt related SA_* flags are replaced by IRQF_* to move them
    out of the signal namespace."

    http://lwn.net/Articles/229673/

    Äänestä

  • unineeeenenenene kirjoitti:

    http://lxr.free-electrons.com/source/include/linux/interrupt.h?v=2.6.32

    tuolla ei mainita kyllä halaistua sanaa SA_INTERRUPT:sta ja katoin 24-35 ja poissaolollaan loistaa :)
    tässä seuraavassa jotain myös vuodelta 2007:
    "Why: The interrupt related SA_* flags are replaced by IRQF_* to move them
    out of the signal namespace."

    http://lwn.net/Articles/229673/

    joku törmänny samaan aiemmin http://ubuntuforums.org/showthread.php?t=464988
    jaa-a kyllä alkaa motivaatio loppua, on tää selasta ...tanan säätöä alusta loppuun...

    Äänestä

  • on näköjään kirjoitti:

    joku törmänny samaan aiemmin http://ubuntuforums.org/showthread.php?t=464988
    jaa-a kyllä alkaa motivaatio loppua, on tää selasta ...tanan säätöä alusta loppuun...

    jossain muualla se häikkä on kuin tuossa IRQF_DISABLED:sssa.
    tuo SA_INTERRUPT on vanhentunut ja sillä ei enää kuulukaan kääntyä koko jutun.

    nyt en tähän hätään osaa sanoa mitään tarkempaa ja on vähän kiire kun projektin takarajat painaa pälle.

    Äänestä

  • jo tukossa kirjoitti:

    kun pohjana http://www.captain.at/howto-linux-kernel-parallel-port-interrupt.php
    jossa SA_INTERRUPT vaihdettu IRQF_DISABLED eli saatu käännettyä insmod sanoo:

    [ 270.436745] parint: error requesting irq 7: returned -16
    [ 270.436757] parint: Generating Interrupt now on all output pins (intr/ACK = pin 10)
    [ 270.436767] parint: Interrupt generated. You should see the handler-message

    sitten rmmod:
    [ 340.453088] Modules linked in: parint(-) binfmt_misc fbcon tileblit font bitblit softcursor vga16fb vgastate snd_intel8x0 snd_ac97_codec ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device i915 drm_kms_helper snd ppdev drm i2c_algo_bit video psmouse parport_pc intel_agp soundcore snd_page_alloc serio_raw output shpchp agpgart lp parport ohci1394 e100 mii ieee1394
    [ 340.453260] [] cleanup_module 0x21/0x30 [parint]
    tämän jälkeen poistin kaikki muut modulit, jotka kyttää irq 7:ää

    ja uudelleen insmod nyt näyttää periaatteessa hyvältä:
    [ 2686.454922] parint: Generating Interrupt now on all output pins (intr/ACK = pin 10)
    [ 2686.454941] parint: Interrupt generated. You should see the handler-message

    mutta ei vaan tule logille printtiä kasitelijältä vaikka lpt:n 10 nastaa eli ack:ia soutaa 0 ja 5v edestakaisin??

    oikeastaan vähän typerän kysymyksen, mutta onhan se portti kytketty käyttöön biosista?

    Äänestä

  • uninenenenen kirjoitti:

    oikeastaan vähän typerän kysymyksen, mutta onhan se portti kytketty käyttöön biosista?

    eli mm. output nastat futaa. Yksi temppu jota ajattelin vielä kokeilla on asettaa explisiittisesti lpt:n control rekisterin (base 2) 4. bitti (use pin 10/ACK as IRQ) 1-tilaan. Ei millään haluais alentua pollaavaan daemon prosessiin, sillä POP tarkoittaa pinosta vedon lisäksi (ainakin minulle) = Pollaminen On Per...stä. :-)

    Äänestä

Paskalla mitää saa tehtyy

Äänestä
  • käynyt mielessä..

    Äänestä

  • Niin pitäs helpottaa.. :D

    Äänestä

  • who mom loves kirjoitti:

    Niin pitäs helpottaa.. :D

    pääte: who stupid loves

    Äänestä

...Mikäli joku törmää samaan, niin säilyy hiukset päässä...
Eli tulostinportissa makaavat orkkis moduulit "lp, parport_pc, ppdev ja parport eivät halua luopua saavuttamistaan eduista helposti "rmmod" vaan jotain jää kykkimään piiloon.
Portin saa omaan käyttöön, kun em. "kakkakikkareet" on black-listattu ja kone buutattu.
Blacklistille lisäys on moduulien nimien lisääminen tiedostoon -> /etc/modprobe.d/blacklist.conf
Kiitos kaikille "osaa ottaneille" hyvää syksyä!

Äänestä
  • tuosta kyllä herää kysymys, että mitähän helvettiä rmmod:lla sitten edes tekee jos se ei tee sitä mitä pitäisi vaan tarwitaan weekirjain tyylisiä uudelleenkäynnistys operaatioita??

    Äänestä

  • ylennetty guruksi :)

    Äänestä

  • Uninen kirjoitti:

    tuosta kyllä herää kysymys, että mitähän helvettiä rmmod:lla sitten edes tekee jos se ei tee sitä mitä pitäisi vaan tarwitaan weekirjain tyylisiä uudelleenkäynnistys operaatioita??

    Muistaakseni olen törmännyt samaan että joku helkatan bitti jää jonnekin poikittain eikä luovuta, monesti kokeilen "init 1 -> init 2" palveluissa mutta tuollainen kernelistä lähtevä onkelma on kai vaan mentävä rebuutin kauttaettä kerneli saa lukea raudan uudelleen?

    Äänestä

  • old_profile_3778 kirjoitti:

    Muistaakseni olen törmännyt samaan että joku helkatan bitti jää jonnekin poikittain eikä luovuta, monesti kokeilen "init 1 -> init 2" palveluissa mutta tuollainen kernelistä lähtevä onkelma on kai vaan mentävä rebuutin kauttaettä kerneli saa lukea raudan uudelleen?

    Epäilen edellä esittämääni, ei se noin voi olla ilman jotain outoa vikaa, kyllä rmmod pitäisi riittää..?

    Mutta siis aina kaikessa digitaalisessa on mahdollisuus siihen että saatanan bitti on mennyt ylensyömään jännitettä ja makaa kyljellään jossain tai oksentaa eikä sitä saa kuriin muuten kuin mollaamalla.. siis nollamaalla vaikka se väittää nollanseensa itsensä edellisenä lauantaina, ei pidä uskoa.

    Linuxissa kyllä todella todella harvinaista mutta jossakin olosuhteissa mahdollista.

    Äänestä

  • old_profile_3778 kirjoitti:

    Epäilen edellä esittämääni, ei se noin voi olla ilman jotain outoa vikaa, kyllä rmmod pitäisi riittää..?

    Mutta siis aina kaikessa digitaalisessa on mahdollisuus siihen että saatanan bitti on mennyt ylensyömään jännitettä ja makaa kyljellään jossain tai oksentaa eikä sitä saa kuriin muuten kuin mollaamalla.. siis nollamaalla vaikka se väittää nollanseensa itsensä edellisenä lauantaina, ei pidä uskoa.

    Linuxissa kyllä todella todella harvinaista mutta jossakin olosuhteissa mahdollista.

    Tuo on mulle kanssa jäänyt epäselväksi että kun joskus lopettaa kaikki prosessit jotka kohdistuvat tiettyyn osioon ja yrittää umountata niin ei onnistukaan koska "device is busy". En ole keksinyt ratkaisua tuohon, joskus käy noin.

    Yritin asentaa Gentoota virtuaalikoneseen niin meni sössimiseksi koska Virtualbox näkee osiot nimellä /dev/hdx mutta gentoon kerneli tietenkin /dev/sdx joten asennusvaiheessa meni mulla hda ja sda sekaisn joten fstabista ja mstabista vs. grub.conf tuli sillisalaatti. Lopulta muokkaamisien jälkeen sain gentoon käyntiin mutta yllätys yllätys se tunsi vain verkkolaitteen lo vaikka olin onnellisesti imuroinut, kääntänyt ja asentanut stage3 ja portagen sekä tietty ytimen.

    No, luin ohjeet, olisi pitänyt imuroida ja kääntää myös virtuaalikoneen edellyttämiä hökötyksiä ja asentaa ne vielä chrootissa ennen rebootia.. hohhoijaa.. gentoo on hyvä jos osaa ;(

    Mutta viimeksi tänään aamulla kävi tuo "device is busy" kun asennuksen jälkeen piti poistua chrootista ja irroitella virtuaaliset hakemistot. Ihmisen käsityskyky on toisinaan niin heikko..

    Äänestä

  • old_profile_3778 kirjoitti:

    Tuo on mulle kanssa jäänyt epäselväksi että kun joskus lopettaa kaikki prosessit jotka kohdistuvat tiettyyn osioon ja yrittää umountata niin ei onnistukaan koska "device is busy". En ole keksinyt ratkaisua tuohon, joskus käy noin.

    Yritin asentaa Gentoota virtuaalikoneseen niin meni sössimiseksi koska Virtualbox näkee osiot nimellä /dev/hdx mutta gentoon kerneli tietenkin /dev/sdx joten asennusvaiheessa meni mulla hda ja sda sekaisn joten fstabista ja mstabista vs. grub.conf tuli sillisalaatti. Lopulta muokkaamisien jälkeen sain gentoon käyntiin mutta yllätys yllätys se tunsi vain verkkolaitteen lo vaikka olin onnellisesti imuroinut, kääntänyt ja asentanut stage3 ja portagen sekä tietty ytimen.

    No, luin ohjeet, olisi pitänyt imuroida ja kääntää myös virtuaalikoneen edellyttämiä hökötyksiä ja asentaa ne vielä chrootissa ennen rebootia.. hohhoijaa.. gentoo on hyvä jos osaa ;(

    Mutta viimeksi tänään aamulla kävi tuo "device is busy" kun asennuksen jälkeen piti poistua chrootista ja irroitella virtuaaliset hakemistot. Ihmisen käsityskyky on toisinaan niin heikko..

    tässä vaiheessa oli vielä hyvä fiilis

    http://www.mworks.info/kuvakaappaus/linux/gentoo10.png

    mutta loppu sujui huonommin ;(

    Äänestä

  • old_profile_3778 kirjoitti:

    Tuo on mulle kanssa jäänyt epäselväksi että kun joskus lopettaa kaikki prosessit jotka kohdistuvat tiettyyn osioon ja yrittää umountata niin ei onnistukaan koska "device is busy". En ole keksinyt ratkaisua tuohon, joskus käy noin.

    Yritin asentaa Gentoota virtuaalikoneseen niin meni sössimiseksi koska Virtualbox näkee osiot nimellä /dev/hdx mutta gentoon kerneli tietenkin /dev/sdx joten asennusvaiheessa meni mulla hda ja sda sekaisn joten fstabista ja mstabista vs. grub.conf tuli sillisalaatti. Lopulta muokkaamisien jälkeen sain gentoon käyntiin mutta yllätys yllätys se tunsi vain verkkolaitteen lo vaikka olin onnellisesti imuroinut, kääntänyt ja asentanut stage3 ja portagen sekä tietty ytimen.

    No, luin ohjeet, olisi pitänyt imuroida ja kääntää myös virtuaalikoneen edellyttämiä hökötyksiä ja asentaa ne vielä chrootissa ennen rebootia.. hohhoijaa.. gentoo on hyvä jos osaa ;(

    Mutta viimeksi tänään aamulla kävi tuo "device is busy" kun asennuksen jälkeen piti poistua chrootista ja irroitella virtuaaliset hakemistot. Ihmisen käsityskyky on toisinaan niin heikko..

    mielestä rmmod pitäisi riittää. Tuota vikaa tuskin kukaan alkaa kovin "kriittisenä" edes etsimään. Alkaa kuitenkin suurilta osin olla aikansa elänyt tuon tyyppinen liitin...

    device busy tulee ihan tällaisesta:

    mount /dev/sda1 /mnt/media
    cd /mnt/media
    umaunt /dev/sda1

    "Device is busy"


    eli jos jokin jää tai kuvittelee jäävänsä "levylle" makoilemaan niin mount alkaa heti vinkua :)

    luuliisi tuonkin hoituvan silla, etta kansiossa olija nakataan kotiinsa tai null jolloin tietysti tätä "tarvitsevat" sovellukset suuttuvat.


    silti ihmetyttää että jos on root ja käskee, niin eipä onnistu :S
    pitäis varmaan anoa systeemiltä itseltään rootina ROOT oikeuksia. Jos ne auttais :D

    hassua täsäta tekee se että umount failaa noinkin vähäpätöisestä jutusta, mutta mihin pysähtyy
    rm -rf / ??
    ei mihkää ainakaan riittävän ajoissa...

    ollaanko tässäkin siis menossa W:n suuntaan?

    "Mä oon W ja mä käsken! Adminilla ei ole valtuuksia jos en anna lupaa!!"
    "Mä oon Linux kernel ja mä käsken! Sillä sinä olet vain root ja minä olen kusipää, enkä anna sun tehdä mitä huvittaa!"

    Äänestä

Kommentoi aloitusta


ja vi...taa... kirjoitti:

onko kukaan saanut toimimaan itse kirjoitettua modulia, jossa halutaan vain saada ulkoinen keskeytys lpt portista? Näinkin triviaali juttu tuntuu olevan aivan saaaatanan hankalaa, kun api elää koko ajan rrrlele.

Tää kääntyy mutta ei toimi ja asentuukin vasta kun kaikki muut parport:ia käyttävät moduulit on heivattu "alaskaan":
ret = request_irq(7, handler, IRQF_DISABLED, "parallelport", (void *)&devid);

Ja näin sen pitäis olla nyky apin mukaan, yllätys yllätys tää ei edes käänny:
ret = request_irq(7, handler, SA_INTERRUPT, "parallelport", NULL);

Ja tää on nenässä ( aika syvällä jo..) -> 2.6.32-24-generic

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu