가만히 생각해 보면 당연한 얘기인데도 막상 당해 보면 

그다지 떠올려 지지 않는 문제를 겪게 됩니다.

arm core 를 보면 L1, L2 캐쉬들이 있습니다.

많이 들어 보셨죠?

그런데 드라이버를 짜다 보면 DMA 전송이 낄 경우 참 다양한 문제들을 만들어 냅니다.


먼저 난 분명 전송을 다했는데 불구하고 데이타의 checksum 이 틀리다고 나오거나.

혹은 데이타가 다 맞다고 나오는데 다른 프로세서에서 읽어 보면 데이타가 틀리거나...


이런 경우를 겪기도 어렵겠지만 찾아내기도 참 어렵습니다.

이번에 보드 디버깅을 하면서 L2 cache 를 켜 놓고 DMA 를 동작시키는 불상사를 저질렀습니다.

하지만 L2 cache 에 대한 처리를 하지 않았죠.


운 좋을 때는 잘 동작하고 더군다나 checksum 이 맞기도 합니다!!!

하지만 다른 프로세서에서 읽게 되면 뭐가 살짝 데이타가 맛탱이가 간 상태더군요?

한줄 요약을 하면

DMA 사용할때는 시스템에 존재하는 cache 에 대한 처리를 함께 해주어야 한다!!!


이 한줄이 이틀을 버린고 얻은 교훈입니다