정확히 말하면 s3c2440 에서 동작하는 user program의 가상주소를 ioctl을 통해
작성한 모듈로 넘겨주면 모듈이 물리주소를 계산해서 다시 user program으로 넘겨주는 방식입니다.
x86에서는 작성했는데 arm에서는 메모리 변관과정이 x86과 완전 틀려 포팅이 안되더군요
작성시 궁금한 점이 몇가지 있어 질문드립니다.
1. virt_to_phys함수가 가상주소를 물리주소로 변환해준다던데 커널의 가상메모리를 말하는건가요?
user program은 program마다 가상주소가 동일하더라도 물리주소가 다르니 안될것 같아서 그렇습니다.
2. arm에도 pte_offset과 pgd_offset 같은 함수가 존재하던데 왜 존재하는지 모르겠습니다.
x86계열에서나 필요한 함수 아닌가요? x86상에서 작성한 모듈을 arm으로 돌리니 컴파일도 잘 되고
실행도 잘됩니다만 변환된 물리주소값이 0xCxxxxxxx 와 같은 식으로 나옵니다. 메모리 맵상
sdram은 0x30000000 ~ 0x40000000 까지 메핑이 되어있는데 말이죠.
아래는 x86상에서도 동작하고 arm에서도 동작하는 코드를 pseudo로 변환한 것입니다.
pgd = pgd_offset(vaddr);
pte = pte_offset(ptd);
paddr = offset + pte_page(pte);
힌트가 될만한 정보가 없을까요?