PCI 디바이스 드라이버에서 Base 어드레스에 접근하기
글쓴이: linux_chozza / 작성시간: 수, 2004/02/11 - 1:58오후
안녕하세요.
pci configuration 레지스터에서 base0~5 어드레스를 얻어왔습니다.
근데, 이 얻어온 베이스 어드레스로 접근을 할려고 하니깐
Unable to handle kernel paging request at virtual address feba0000
이런 에러가 발생합니다.
접근하고자 하는 주소는 feba0000 인데요.
이값은 pci_read_config_byte란 api를 이용해서 얻어왔구요.
이런 문제 해결해 보신 분 계시면 도와 주세요T_T
Forums:
ioremap?
제가 원인을 잘 못 안것일 수도 있습니다만..
참고 바랍니다.
pci configuration register에서 읽어온
pci장치의 base address는 physical address이고
linux에서 접근하기 위해서는
ioremap을 해줘야합니다.
ioremap은 physical address를 logical address로 바꾸어줍니다.
즉,
phy_base_addr=some_function();
logical_base_addr = ioremap(phy_base_addr, size);
를 한후에
logical_base_addr + offset 으로 접근해야겠지요..
Be Postive!
문제점 발견!! ioremap을 해주어야 하는군요
답변 정말 감사드립니다.^^
ioremap을 해주니깐, 접근가능한 것 같습니다.
근데, proc/iomem 은 실제 디바이스의 물리 메모리를 보여주는 건가요?
첨에는 proc/iomem 부분이 실제 매핑된 가상 메모리주소인지 알고 접근을 했었는데, page 에러가 발생하더군요.
에고..
우~싸!!! ^_________^
댓글 달기