![](/zbxe/layouts/mr_layouts_1st/images/default/blank.gif)
도와주세요!!
글 수 15,339
2008.08.29 09:38:05 (*.85.118.77)
23508
안녕하세요.
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은 가상주소로 어떻게 매핑되는지?
즐거운하루 보내시구요.
답변부탁드릴께요.
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은 가상주소로 어떻게 매핑되는지?
즐거운하루 보내시구요.
답변부탁드릴께요.
답변 1.
2.4에서는 가상 주소 테이블을 저희가 설정하였으나 2.6에서는 커널에서 얻어오는 방식으로 변경하였습니다. 결론적으로 다른 부분이 많을것으로 예상됩니다.
답변 2.
2.6에서는 커널에서 활당을 받습니다. MMU 를 이용하여 관리하며, MMU에 등록되어진 테이블이 있을 것입니다. 여기서는 그 부분을 다 설명하가 힘들군요. 따로 학습을 하셔야될꺼 같습니다.
답변 3.
가상 주소를 얻으시려면 디바이스 드라이버에서 ioremap 이라는 함수를 이용하시기 바랍니다.
그럼 좋은 하루되십시오