通过unsigned char *和unsigned int *在NVRAM上写入

时间:2016-02-13 09:13:52

标签: c linux pointers mmap

我正在linux嵌入式主板下开发我有一个NVRAM存储我所有的敏感数据。 我设法通过mmap / dev / mem访问它,现在问题是写,通过unsigned char *指针没有问题,但我需要编写一个完整的结构,例如:

struct t_game_data
    {
    int energy;
    int bet;
    int coin;
    };
用我的内存映射后

unsigned char* mem_ptr = (unsigned char*)mmap((void *)0x0, 512*1024, PROT_READ | PROT_WRITE,MAP_SHARED, fd, 0x90600000);

我可以通过mem_ptr写在NVRAM上没有问题:

*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

但如果我尝试做这样的事情:

t_game_data* data = (t_game_data*)mmap((void *)0x0,512*1024, PROT_READ |PROT_WRITE, MAP_SHARED, fd, 0x90600000);

当我尝试使用数据写入时,我无法正确写入NVRAM,所以我尝试使用unsigned int *只是为了解问题而且我得到了一些非常奇怪的东西:

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

也许解决问题我希望它不是hw的物理极限;

提前谢谢。

0 个答案:

没有答案