Ich versuche, auf die Hardware registers of an A20 SOM zuzugreifen, indem ich sie in userspace mmapping. In diesem Fall ist das Ziel der PIO, der unter der physischen Adresse 0x01C20800
aufgeführt ist.mmap() schlägt fehl, während devmemm erfolgreich ist (C/CPP) [Allzwinner A20]
Das offizielle Olimex Debian7 (Wheezy) Bild wird verwendet. Kernel Linux a20-olimex 3.4.90+
konnte ich die Lage überprüfen, indem die devmem2 tool und Allwinner in der Dokumentation auf dem genannten Speicherbereich unter Verwendung von (schaltete den pinMode und Ebene mit devmem).
Der mmap Anruf auf der anderen Seite
*map = mmap(
NULL,
BLOCK_SIZE, // = (4 * 1024)
PROT_READ | PROT_WRITE,
MAP_SHARED,
*mem_fd,
*addr_p
);
nicht mit mmap error: Invalid argument
Hier ist eine vollständigere Version des Codes: http://pastebin.com/mfEuVdbJ
über die Zeiger als den gleichen Code Keine Sorge funktioniert beim Zugriff auf UART0 unter 0x01C28000
. Obwohl nur UART0 (und UART4), die als serielle Konsole verwendet wird. Ich habe die script.bin (immer noch im Einsatz trotz DTB) ohne Erfolg dekompiliert, da UART 0, 7 und 8 dort aktiviert sind.
Ich bin angemeldet auch als Benutzer root
würde ich noch etwas erraten, um Berechtigungen verwandt, aber ich bin ziemlich gerade jetzt verloren, da devmem kein Problem bei allen
hat> [email protected]:~# devmem2 0x01c20800 w /dev/mem opened. Memory mapped
> at address 0xb6f85000.
In der Tat ist BLOCK_SIZE \t \t (4 * 1024) ich Chaos Zustand um mit mit sysconf (_SC_PAGE_SIZE) bereits 'adr = adr - (Adr & sysconf (_SC_PAGE_SIZE));' – mystery
@mystery 'addr = addr - (addr & sysconf (_SC_PAGE_SIZE));'? Das wird nichts ausrichten. Geben Sie den ** Wert ** der Adresse ein, die Sie verwenden möchten. –