Estoy desarrollando bajo una placa integrada de Linux. Tengo una NVRAM donde almacena todos mis datos sensibles. Logré acceder a él a través de mmap /dev/mem, ahora el problema es escribir, a través de un puntero char * sin firmar no hay problema, pero necesito escribir una estructura completa, por ejemplo:
struct t_game_data { int energy; int bet; int coin; };
después de mapear mi memoria con:
unsigned char* mem_ptr = (unsigned char*)mmap((void *)0x0, 512*1024, PROT_READ | PROT_WRITE,MAP_SHARED, fd, 0x90600000);
Puedo escribir en NVRAM sin problemas a través de mem_ptr:
*mem_ptr++ = 1; *mem_ptr++ = 2; *mem_ptr++ = 3; mem_ptr++; *mem_ptr++ = 4; // What i get reading NVRAM is(NVRAM is filled with 255 by default) 1 2 3 255 4
Pero si trato de hacer algo como esto:
t_game_data* data = (t_game_data*)mmap((void *)0x0,512*1024, PROT_READ |PROT_WRITE, MAP_SHARED, fd, 0x90600000);
Cuando trato de usar datos para escribir, no puedo escribir en NVRAM correctamente, así que traté de usar un int * sin firmar solo para entender el problema y obtuve algo realmente extraño:
unsigned int* mem_ptr_int = (unsigned int*)mmap((void *)0x0, 512*1024, PROT_READ | PROT_WRITE,MAP_SHARED, fd, 0x90600000); *mem_ptr_int++ = 1; *mem_ptr_int++ = 2; *mem_ptr_int++ = 3; mem_ptr_int++; *mem_ptr_int++ = 4; // What i get reading NVRAM is(NVRAM is filled with 255 by default) 0 255 255 255 0 255 255 255 0 255 255 255 255 255 255 255 0
Tal vez haya algún problema con el direccionamiento. Espero que no sea un límite físico de hw;
Gracias de antemano.