안녕하세요.
S3C2410 보드를 가지고 외부시리얼 드라이버를 작성하면서 궁금점이 있어 질문올리게 되었습니다.

기존에 커널 2.4에서 외부시리얼 드라이버를 작성하여 사용하였습니다.
이것을 커널 2.4에서 2.6으로 업버전하면서 아래의 문제가 발생했습니다.
S3C2410의 nGCS4(0x20000000)에 외부 UART가 달려있거든요.
UART 소자는 TI사의 TL16c2550이구요.

커널 2.6.10을 올렸는데, 외부 UART 드라이버를 추가하면 부팅 시 아래와 같은 에러가 발생합니다.

====================================================
.......
s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410
s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410
s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410
Unable to handle kernel paging request at virtual address fffffff8
pgd = c0004000
[fffffff8] *pgd=30002011, *pte=00000000, *ppte=00000000
Internal error: Oops: 7 [#1]
.......
====================================================

가상주소 매핑 시에 발생한 에러로 생각됩니다.

궁금한것은
1. 커널 2.4와 2.6에서의 커널 소스를 보면 가상주소가 서로 틀린것 같은데,
    커널이 다르면 가상주소도 틀려질 수 있는것인지?
2. 가상주소는 어떻게 매핑되는 것인지?
    예를 들면 물리주소에 페이지옵셋이나 피지컬옵셋을 적용하여 계산하여 얻는지?
3. 궁극적으로 S3C2410에서 커널 2.6일때 물리주소 0x20000000은 가상주소로 어떻게 매핑되는지?

즐거운하루 보내시구요.
답변부탁드릴께요.