mmap64/open64/pread etc on 440GX
Neil Wilson
NWilson at Airspan.com
Thu Nov 11 00:58:29 EST 2004
Hi,
I am trying to write a command line utility for our dev board
(440GX,2.6.9 kernel) in order to provide support for our hardware
engineers. As a test I am trying to dump the first few bytes of the
U-boot header.
I though that this would work but using /dev/mem gives me a bad address
error on the pread64, using /dev/kmem only reads back 0 bytes. Is there
something blindingly obvious that I am missing for using 36bit addresses
? I believe the address is correct as I can see the boot code from
within the kernel. Thanks.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
unsigned char buf[10240];
int main(int argc,char **argv)
{
unsigned long long memAddr=0x00000001fff80000ULL;
int x;
int fd;
int readSize;
int pageSize;
pageSize=sysconf(_SC_PAGESIZE);
fd=open64("/dev/mem", O_RDWR);
if(fd==-1)
{
perror("open64");
return 0;
}
readSize=pread64(fd,(void*)buf,pageSize,memAddr);
if(readSize != pageSize)
{
perror("pread64 ");
printf("only read %d of %d requested bytes\n", readSize,
pageSize);
}
close(fd);
// show some of it
if(readSize>0)
{
for(x=0;x<25;x++)
{
printf("%02x(%c)
",buf[x],isprint(buf[x])?buf[x]:'.');
}
printf("\n");
}
}
Neil
--
Neil Wilson
Airspan Communications Ltd.
Cambridge House, Oxford Road,
Uxbridge, Middx, UB8 1UN, UK.
Tel: +44(0)1895-467265
neilwilson at airspan.com
www.airspan.com
More information about the Linuxppc-embedded
mailing list