#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include <sstream>
#include <iostream>
using namespace std;
static int dev_fd;
bool isWriOrRead = true;
int String2int(char *strIn)
{
int outDat = -1;
if (strIn != NULL)
{
string str1 = strIn;
stringstream ss;
ss << str1;
ss >> outDat;
}
return outDat;
}
int main(int argc, char **argv)
{
printf("reg change test-%s-%s-%s!\n", argv[1], argv[2], argv[3]);
dev_fd = open("/dev/mem", O_RDWR | O_NDELAY);
if (dev_fd < 0)
{
printf("open(/dev/mem) failed.");
return 0;
}
if (!strcmp(argv[1], "read"))
{
isWriOrRead = true;
}
else if (!strcmp(argv[1], "write"))
{
isWriOrRead=false;
}
else
{
printf("command error!\n sample:himm read 0x80000000\n himm write 0x80000000 0x01\n");
return 0;
}
long regAddr=0x00;
long regVal = 0x00;
sscanf(argv[2],"%x", ®Addr);
if (isWriOrRead == false)
{
sscanf(argv[3], "%x", ®Val);
}
long baseAddr = regAddr&0xFFFFF000,offsetAddr= regAddr&0x00000FFF;
printf("input data::0x%08x--0x%08x\n", regAddr, regVal);
unsigned char *map_base=(unsigned char * )mmap(NULL, offsetAddr+1, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, baseAddr);
if (map_base == MAP_FAILED)
{
if (dev_fd)
close(dev_fd);
return -1;
}
if (isWriOrRead == false)
{
*(volatile unsigned int *)(map_base+ offsetAddr) = regVal;
}
printf("reg data::0x%08x--0x%08x\n", regAddr, *(volatile unsigned int *)(map_base + offsetAddr));
if(dev_fd)
close(dev_fd);
munmap(map_base, offsetAddr+1);//解除映射关系
return 0;
}
08-16
743
07-01