도와주세요!!
글 수 15,339
2005.12.22 15:03:59 (*.78.37.30)
6671
데이타 형을 int 가 아니라 short 형으로 하니깐 되네요.
왜 그런거져?
int *pTextlcd;
에서
volatile short *pTextlcd;
으로 바꾸니깐 되네요.
왜 그런건지 가르쳐 주세요.
>
>#define ADDRESSOFTEXTLCD 0x14200000
>
>if((fd=open("/dev/mem", O_RDWR|O_SYNC))<0){
> perror("mem open failn");
> exit(1);
> }
>
>pTextlcd=mmap(NULL, 4, PROT_WRITE, MAP_SHARED, fd, ADDRESSOFTEXTLCD);
>
>
>mmap 함수를 이용해서 하드웨어 접근을 하는데요. 컴파일후
>
>실행을 하면
>
>Unhandled fault: external abort on linefetch (0x006) at 0x40017000
>mm = c00151a0 pgd = c0c68000
>*pgd = a0c6c001, *pmd = a0c6c001, *pte = 142000b3, *ppte = 14200033
>Bus error
>
>이런 에러가 납니다.
>
>커널에 있는 ez-x5.c 부분에
>
>static struct map_desc ez_x5_io_desc[] __initdata = {
> /* virtual physical length domain r w c b */
> { 0xf0000000, 0x00000000 +0x000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0
> { 0xf1000000, 0x00000000 +0x400000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0
> { 0xf1100000, 0x00000000 +0x800000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0
> { 0xf1200000, PXA_CS1_PHYS+0x000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, //
> { 0xf1300000, PXA_CS1_PHYS+0x400000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, //
> { 0xf1400000, 0x00000000 +0xC00000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0
> { 0xf1500000, PXA_CS1_PHYS+0x800000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, //
> { 0xf1600000, PXA_CS1_PHYS+0xC00000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, //
> { 0xf2000000, PXA_CS2_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS2
> { 0xf3000000, PXA_CS3_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS3
> { 0xf4000000, PXA_CS4_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS4
> { 0xf5000000, PXA_CS5_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS5
> { 0xf6000000, 0x14200000,0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, // nCS5 영역 16Mbyte
>
> LAST_DESC
>};
>
>이렇게 추가는 시켜 주었구요.
>
>초보라서 그러는데 무엇을 더 해줘야 하나요?
>
>
>
>
>