Portál AbcLinuxu, 12. května 2025 06:43

Dotaz: Čtení MMIO

11.8.2009 17:19 Jakub Kocourek
Čtení MMIO
Přečteno: 241×
Odpovědět | Admin
Přílohy:

Dobré odpoledne,

potřebuji napsat Linux ovladač, který bude vyčítat MMIO (tedy IO mapované do paměti) a údaj předávat dál do user space. Konkrétně se jedná o přečtení hodnoty hlavního čítače HPET. Dle jádra by na mé desce měl HPET ležet na adrese 0xFED00000 a příslučný čítač má offset 0xF0. Pokusil jsem se o čtení pomocí ioread32, ale při pokusu o čtení dojde k pádu jádra. Jinak je modul stabilní :)

Zdrojový kód je v příloze. Asi to bude nějaká hloupost, ale ovladače běžně nepíšu, takže nemám zkušenosti.

 

Děkuji za odpovědi.

Jakub Kocourek

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

Odpovědi

12.8.2009 09:33 Jakub Kocourek
Rozbalit Rozbalit vše Re: Čtení MMIO
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tak ještě jinak. Už jsem našel zdrojový kód ovladače HPET, který používá jádro. Tam se definuje adresa HPET jako:

hpet_base = (void __iomem*)ioremap_nocache(hpet_address, HPET_MMAP_SIZE);
hpet_ptr = hpet_base + HPET_COUNTER;
Když se naincluduje:
#include <linux/clocksource.h>
#include <linux/errno.h>
#include <linux/hpet.h>
#include <linux/init.h>
#include <asm/hpet.h>
#include <asm/io.h>

,tak by mělo být možné číst pomocí:

(cycle_t)readl(hpet_ptr);
Problém je, že jádro při zavedení modulu hlásí "Unknown symbol" a z dmesg je vidět, že hledá symbol "hpet_address". Problém je, že ten je definován v <asm/hpet.h> a nachází se i v /boot/Symbol.map.

Díky za rady.

12.8.2009 10:28 Jakub Kocourek
Rozbalit Rozbalit vše Re: Čtení MMIO

...pokud zadám adresu HPET ručně, tak driver konečně funguje jak má. Takže problém je jen ten symbol. Co s tím?

 

Jakub

14.8.2009 07:17 klm
Rozbalit Rozbalit vše Re: Čtení MMIO
Podívej se, jak se inicializuje a udělej to stejně. (Originální driver Ti nestačí?)

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.