virt_to_phys() 함수에 대해서
제가 리눅스 소스코드에서(커널 2.4) map_desc구조체 부분을 수정하였거든요. 다음과 같습니다.
{ 0xfff00000, 0x14000000, 0x0000ffff, DOMAIN_IO, 0, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
{ 0xfff10000, 0x14010000, 0x0000ffff, DOMAIN_IO, 0, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
{ 0xfff20000, 0x14020000, 0x0000ffff, DOMAIN_IO, 0, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
{ 0xfff30000, 0x14030000, 0x0000ffff, DOMAIN_IO, 0, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
CS5를 사용하기위해서 다음과 같이 연결을 하였는데요.
위의 처리는. 리눅스 디바이스 드라이버 단에서 ioremap함수의 기능과 동일하다고 알고 있습니다.
위의 환경에서 virt_to_phys(0xfff00000) 을 하면요. 0x14000000으로 매핑된 물리주소가 나올줄 알았는데요
그렇치않더라구요. 그 이유를 알고싶습니다.
아 그리구요. ioremap()함수와 request_mem_region() 함수와의 차이점또한 알고싶습니다.
읽어주셔서 감사합니다.
virt_to_phys()는 virtual
virt_to_phys()는 virtual address를 physical address로 변환해주는 함수입니다. 이건 소스 내에서 확인해보시면 될 거 같네요. 즉, 코드를 보시면, __pa(address) 인데, 2.4.x시면, 단순히 x - page_offset(0xc0000000으로 되어 있을 것입니다.) 값을 의미합니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
댓글 달기