[Armadillo:04057] armadillo-500で/dev/mem、mmap()でのアクセスについて
藤岡
email@hidden
2009年 2月 19日 (木) 23:19:23 JST
お世話になっております。
藤岡と申します。
以下のロジックで得たmmap()のメモリアドレスを使って、
0xB8001000から0xB8004000の手前までを読み出し(最終的には読み書き)
しようとしているのですが、うまく行っておりません。
==============================
int lnxOpenMem(ulong st_adrs, uint length,
ulong *pMemStAdrs, uint *pMemLength, ulong *pMemRwAdrs)
{
int iFD; /* /dev/memのファイルディスクリプタ */
ulong pageSize; /* mmap()時のページサイズ */
ulong mapAdrs;
uint mapLength;
void *pMMap;
/* /dev/memをオープンする */
/* iFD = open("/dev/mem", O_RDWR); */
iFD = open("/dev/mem", O_RDONLY | O_SYNC);
if (iFD < 0)
{
printf("open(/dev/mem) error\n");
return(iFD); /* /dev/memのオープン失敗 */
}
/* ページサイズ単位でマップするメモリの先頭アドレスを求める */
pageSize = sysconf(_SC_PAGESIZE);
mapAdrs = (st_adrs / pageSize) * pageSize;
/* マップするメモリのサイズを求める */
mapLength = (st_adrs + length) - mapAdrs;
/* メモリにマップする */
/* pMMap = mmap(0, mapLength, PROT_WRITE | PROT_READ, MAP_SHARED, */
pMMap = mmap(0, mapLength, PROT_READ, MAP_SHARED,
iFD, mapAdrs); /* 物理メモリを論理メモリにマッピング
*/
printf("mapAdrs = 0x%08lx mapLength = 0x%08lx pageSize = 0x%08lx\n",
mapAdrs, mapLength, pageSize);
if (MAP_FAILED == pMMap)
{
printf("mmap() error\n");
return(-1); /* メモリのマップ失敗 */
}
/* /dev/memのファイルディスクリプタとマップしたメモリの先頭アドレス、サイズとR/Wアドレスを返す */
*pMemStAdrs = (ulong)pMMap;
*pMemLength = mapLength;
*pMemRwAdrs = (*pMemStAdrs) + (st_adrs - mapAdrs);
return(iFD);
}
==============================
(1)0xB8000000から1[unsigned long]読み出した場合は読めております。
mapAdrs = 0xb8000000 mapLength = 0x00000004 pageSize = 0x00001000
が表示されて、0xffffffffが読めました。
(2)0xB8001000から1[unsigned long]読み出した場合はBus Errorとなりました。
mapAdrs = 0xb8001000 mapLength = 0x00000004 pageSize = 0x00001000
が表示されるのですが、
Unhandled fault: external abort on non-linefetch (0x008) at 0x40018000
Bus error
となって読めませんでした。
0xB8002000と0xB8003000から1[unsigned long]読み出した場合も同様です。
(3)0xB8004000から1[unsigned long]読み出した場合は読めております。
mapAdrs = 0xb8004000 mapLength = 0x00000004 pageSize = 0x00001000
が表示されて、0x000001e2が読めました。
過去のメーリングリストの、
[Armadillo:03387] [Armadillo-500] 外部拡張バスについて
http://lists.atmark-techno.com/pipermail/armadillo/2008-September/003387.html
と、同様な状況ではないか。と考えております。
以上です。
何か、示唆等頂けるとありがたいです。
宜しくお願い致します。
armadillo メーリングリストの案内