Vraag Kernel-module geheugentoegang


Kunnen twee verschillende kernelmodules toegang krijgen tot hetzelfde geheugengebied van een aanroep naar ioremap_nocache ()?

Ik heb een draadloos stuurprogramma en een aparte module. Ik zou graag zien dat de afzonderlijke module de geluidsniveaus op de kaart beschrijft, terwijl de bestuurder nog steeds werkt. Vandaar mijn vraag hierboven.

Een van de manieren die ik verkende was om een ​​kernelthread van de driver te starten. Vervolgens heb ik een semafoor geïmplementeerd om te voorkomen dat race-omstandigheden ontstaan ​​door gelijktijdige read / writes naar dezelfde adresruimte. Ik hoopte dat een kind-thread toegang zou kunnen krijgen tot hetzelfde geheugengebied.

Helaas werkte dit niet zoals ik had verwacht. Ik zou alle suggesties op prijs stellen.


9
2018-01-28 16:06


oorsprong


Waarom zou je een kernelmodule nodig hebben om de ruiswaarden te profileren? - gertvdijk
Bedankt voor de vraag, de draadloze driver is erg complex en om de periodiciteit van kalibraties te wijzigen, kan dit tot onbedoelde resultaten leiden. Ik zou dit moeten doen omdat het alleen zijn kalibraties uitvoert voor intervallen die veel te lang zijn voor mijn behoeften. Omdat ik precies weet hoe ik het apparaat in een aparte module moet profileren, ben ik gewoon benieuwd of ik toegang kan krijgen tot hetzelfde geheugengebied waar de bestuurder mee werkt. - Radagasp
alsjeblieft Bewerk uw vraag om alle details over uw eerdere pogingen / benaderingen te bevatten. Dat is hoe deze site werkt. Het is geen discussieforum, maar een Q & A-site, begrijp je? - gertvdijk
Discussie kan vragen en antwoorden bevatten, sommige goed en anderen fout - het lijkt erop dat de interpretatie van regels tussen de admins in de provincie van de semantiek ligt. Ik heb mijn vraag natuurlijk bijgewerkt. - Radagasp


antwoorden:


Ik neem aan dat je van plan bent een andere kernelmodule te implementeren, omdat je denkt dat het gemakkelijker is om gegevens tussen kernelmodules te delen. Maar misschien is het geen goede keuze. Als het mogelijk is om 'de ruis' in de gebruikersruimte te profileren, denk ik dat een betere oplossing is om de 'profiler' in de gebruikersruimte te implementeren.

In deze oplossing leest de gebruikersruimteprofiler gegevens, voert enkele berekeningen uit en verzendt vervolgens het resultaat.

Als deze oplossing in orde is, is de implementatie als volgt.

In de kernel-module is het alleen maar om een ​​char-apparaat in '/ proc' te registreren en primitieven 'lezen' en 'schrijven' te implementeren. In de gebruikersruimte is het alleen maar om de profiler te implementeren, lezen en schrijven naar het char-apparaat. Details en informatie voor deze implementatie is alles hier.


7
2017-12-02 22:18



Ik denk niet dat ik je antwoord volledig begrijp ... als ik het begrijp, zou ik nog steeds een module moeten schrijven, en deze module zou toegang proberen te krijgen tot hetzelfde geheugengebied van een oproep naar ioremap_nocache () die de andere module gebruikt. Of zeg je dat ik het char-apparaat registreer in de draadloze module - Radagasp
Juist, je zult een software moeten implementeren, maar geen module. Je zult een normaal user space-programma moeten schrijven, eenvoudiger dan een module, die leest van '/ dev / nameofdevice' en ernaar schrijft. U hoeft 'ioremap_nocache ()' niet te gebruiken, alleen syscalls als 'open', 'read', 'write', 'close'. En ja, de draadloze module moet het char-apparaat '/ dev / nameofdevice' binnenin registreren om de gegevens aan het gebruikersland bloot te stellen. - vitorafsr