BBB를 이용해서 GPMC장치를 제어하는 디바이스 드라이버를 코딩중입니다.
BBB(am335x) 에서 GPMC장치의 메모리는 0x0000 0000 부터 시작으로 봤는데요.
이 부분을 디바이스 드라이버 모듈의 init 부분에서 적재 시 ioremap을 이용해 매핑하도록 구현하였습니다.
NULL포인터를 리턴하지 않는 것을 보아 매핑은 정상적으로 되는거 같은데
iowrite16/ioread16 또는 writeb/readb 모두 사용해도 에러가 발생하네요.
write 시에는 unhandled fault: imprecise external abort (0xc06)
read 시에는 Unhandled fault: external abort on non-linefetch (0x008)
에러가 발생합니다.
read의 경우에는 찾아보니 맵핑되지 않은 메모리 접근을 시도했을 경우라고 하는데 위에서 설명했듯, NULL포인터를 리턴하지 않습니다. 따라서 정상이라고 판단됩니다.
ioremap_nocache의 경우에도 마찬가지의 에러가 발생하네요.