[問題] 使用mmap在arm linux上存取physical adderss的問題
我希望能在arm linux中直接存取soc版子以已經定義好的
memroy map I/O 像是led 7-setment等等,但是因為使用linux
所以程式無法直接去存取這些physical address。
找到的方法是利用/dev/mem來存取physical address,並使用mmap
來map到要存取的記憶體位置到user space,目前的結果是map的過程
沒有問題,成功傳回可用的指標,但是將其值讀出後發現似乎有點問題
所讀出的值都是0,這是蠻奇怪的結果,但是我不知道原因出在哪裡,
不知道是否有人有過類似的經驗能夠分享一下。我用的版子是新華的
preSoc Creator。
謝謝~~^^
=========================================================
不好意思 我可能提供太少資訊了 多謝大大提醒
根據manual 上提供的資料
led 位在 0x30000000 offset 為 0x0c04
下面是程式片斷 僅把比較關鍵列出來,錯誤處理省略
#define BASE = 0x30000000
#define OFFSET = 0x0c04
int fd;
unisgned char *mem;
fd = open("/dev/mem", O_RDWR | O_SYNC);
mem = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
fd,BASE);
//到這裡都成功,判斷mem 值也非-1
我使用下面的敘述來查看記憶體的內容
printf("%x",*(mem+OFFSET));
大致上是這樣
程序很簡單 這是我找到最容易達到目標的方式
但是卻不知道為何讀不到正確的physical address
謝謝^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.89.1
※ 編輯: Trai 來自: 140.113.89.1 (12/30 11:05)
推
12/30 11:15, , 1F
12/30 11:15, 1F
※ 編輯: Trai 來自: 140.113.89.1 (12/30 11:43)
→
12/30 11:43, , 2F
12/30 11:43, 2F
推
12/30 13:00, , 3F
12/30 13:00, 3F
推
12/30 13:38, , 4F
12/30 13:38, 4F
推
12/30 21:32, , 5F
12/30 21:32, 5F
推
12/30 22:40, , 6F
12/30 22:40, 6F
→
12/31 10:39, , 7F
12/31 10:39, 7F
→
12/31 10:40, , 8F
12/31 10:40, 8F
→
12/31 10:42, , 9F
12/31 10:42, 9F
→
12/31 10:42, , 10F
12/31 10:42, 10F
→
12/31 10:43, , 11F
12/31 10:43, 11F
→
12/31 10:43, , 12F
12/31 10:43, 12F
※ 編輯: Trai 來自: 140.113.89.1 (12/31 10:45)
推
01/02 02:42, , 13F
01/02 02:42, 13F
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章