기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.

Kernel 2.6.21과 smdk6410 환경에서 드라이버를 만들고 있습니다.

smdk6410의 물리주소 0x30000000(Xm0CSn4) 번지에 FPGA가 연결되어 있구요.

FPGA 레지스터 Read/Write 목적으로 테스트용 캐릭터 디바이스 드라이버를 만들고 있습니다.

문제는 보드 부팅 후 드라이버를 적재(insmod)하면 아래와 같은 에러가 발생합니다.

붉은색 출력문은 제가 출력한 것으로, ioremap() 함수로 0x30000000 번지를 가상주소로 맵핑한 결과 입니다.

-------------------------------------------------------------------------------------------------------

> Success mapping fpga memory. [0x30000000:0xc6600000]
Unhandled fault: external abort on non-linefetch (0x1008) at 0xc6600010
Internal error: : 1008 [#1]
Modules linked in: rtt_dd
CPU: 0
PC is at rtt_dd_init+0x6c/0x98 [rtt_dd]
LR is at release_console_sem+0x208/0x244
pc : [<bf0000f8>]    lr : [<c0056da8>]    Not tainted
sp : c56a3ed8  ip : c56a3e10  fp : c56a3eec
r10: 0000001e  r9 : c6074000  r8 : c55b1d6c
r7 : 0000001e  r6 : bf000840  r5 : c55b1c00  r4 : c6600000
r3 : 60000013  r2 : 00000000  r1 : 0001faec  r0 : 0000003b
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  Segment user
Control: C5387F
Table: 556E0008  DAC: 00000015
Process insmod (pid: 803, stack limit = 0xc56a2250)
Stack: (0xc56a3ed8 to 0xc56a4000)
3ec0:                                                       0000001e c55b1d4c
3ee0: c56a3fa4 c56a3ef0 c007559c bf000098 00000000 c56aae40 c024fba8 00000000
3f00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
3f20: 00000005 00000000 00000000 00000000 00000000 c60802d0 c581d9a0 c607d2b6
3f40: c607d830 c607d510 00000004 00000037 00000037 bf000888 c00575b4 0000001c
3f60: c607d858 bf00084c c024fbb8 c607d880 00000000 00000000 c003f6ec 00000000
3f80: 00000000 00000000 00000080 c0038dc8 c56a2000 00000000 00000000 c56a3fa8
3fa0: c0038c20 c00742b4 00000000 00000000 000d8200 0000c3fe 000d8028 00000000
3fc0: 00000000 00000000 00000000 00000080 000d8028 000b8cec 000d8018 000bb82a
3fe0: beff4ca8 beff4c98 000235c8 40190e00 60000010 000d8200 00000000 00000000
Backtrace:
[<bf00008c>] (rtt_dd_init+0x0/0x98 [rtt_dd]) from [<c007559c>] (sys_init_module+0x12f4/0x13b0)
 r4 = C55B1D4C
[<c00742a8>] (sys_init_module+0x0/0x13b0) from [<c0038c20>] (ret_fast_syscall+0x0/0x2c)
Code: e1a02004 e3a01203 e59f0024 eb415d2e (e1d411b0)
Segmentation fault

-------------------------------------------------------------------------------------------------------

 

 

드라이버의 init 부분의 소스코드에서 발생하는 에러로 생각 되구요.

코드는 아래와 같습니다.

-------------------------------------------------------------------------------------------------------

void *fpga_base_va;
void *mem_base;
 

 retVal = register_chrdev(RTT_DEV_MAJOR, RTT_DEV_NAME, &rtt_fops);

 if(retVal < 0) return retVal;

 printk("> Register %s n", RTT_DEV_NAME); 


 fpga_base_va = ioremap(FPGA_BASE_PA, 0x100000); 
 if(fpga_base_va==NULL) {
   printk("> Error mapping fpga memery. n");
   return -EBUSY;
 }
 printk("> Success mapping fpga memory. [0x%x:0x%x] n", FPGA_BASE_PA, fpga_base_va);

 regData = CSRS_READ(fpga_base_va+0x10);
 //CSRS_WRITE(fpga_base_va, 0xFFFF);
 printk("> read FPGA_STATUS_REG : 0x%x n", regData);

-------------------------------------------------------------------------------------------------------

CSRS_READ는 *(volatile unsigned short *) 입니다. (1/2/4바이트 단위로 바꾸어 읽어보아도 모두 에러)

Xm0CSn4는 일반 CS로 사용되도록 설정되어 있습니다. (MO0_CS_CFG)

SROM_BW 레지스터의 설정 내용은 16비트 데이터버스, using UB/LB, wait Disable 입니다.

 

제가 해봤던 방법으로는..

1. 커널에서 smdk6410_iodesc에 가상주소와 물리주소를 정의해 놓고 드라이버에서 가상주소를 그대로 사용

2. 커널에서 devs.c 에서 platform device 리소스를 정의하고 디바이스를 추가한 후 테스트 디바이스 드라이버에서

ioremap()으로 가상주소를 얻은 후 사용

 

모두 에러가 발생하였습니다.

참고로, 부트로더에서는 md 30000000 명령으로 Read 동작을 확인하였습니다.

 

 

여러분들의 많은 조언 부탁드립니다.

좋은 하루 되세요.

 

 

 

 

 

 


profile

김재훈

2009.10.21 20:50:57
*.162.60.144

FPGA로 LED를 제어하는 드라이버 샘플을 올려드릴테니 참고해보세요.

FPGA가 붙어있는 다른 보드에서 테스트 및 동작을 완료한 것 입니다. 

한규혁

2009.10.21 21:03:55
*.203.238.19

테스트를 해보았는데.. 같은 에러가 발생하네요..

어디가 문제인지 감을 잡을 수가 없습니다.

쿨럭..

좋은 하루 되세요.

윤병진

2009.10.21 23:30:37
*.95.74.6

아무래도 주소가 잘못 맵핑된듯 싶습니다.

CSRS_READ() 함수 안에서 ioremap() 함 사용해보시공 안되면 PA 대신에 VA  넣어보시공 안되면 CSRS_READ() 함수에서 다시 주소를 리맵핑하지 않았나 찾아보시면 될듯 합니다만 저 같은 경우 6410 매뉴얼 보고 주소 찾아서

ioremap(0x7f0000000, 0x100) 이런식으로 일단 해줘 봅니다.. =ㅁ=;;;

List of Articles
번호 제목 글쓴이 날짜sort 조회 수
2408 6410클럭설정에 대해 [1] 우운용 2009-10-27 593
2407 I2C 를 사용하는 칩의 디바이스 드라이버를 어떤식으로 만들죠? [4] 김영일 2009-10-27 1006
2406 s3c2410에서 usb host 2port 사용할수있나요? [1] 문철민 2009-10-27 559
2405 ODROID 개발자 지금 구입 가능한 방법 있을까요? [4] Flowox 2009-10-26 809
2404 부팅중 로고 화면 깨지는 현상 경험하신 분.... [2] 김영일 2009-10-26 813
2403 Android 세미나 자료 업로드 관련된 질문입니다. [8] 이택양 2009-10-26 748
2402 완전초보입니다. 캡쳐화면좀 보아주세요. [4] 시갈 2009-10-24 616
2401 OpenOCD 0.2.0 [1] 김광준 2009-10-24 45288
2400 파일시스템구축에 대해 [1] 우운용 2009-10-24 477
2399 ODROID 개발자 버전의 Source code... [1] lived 2009-10-24 922
2398 안드로이드 Display관련 질문입니다. [1] 이창용 2009-10-24 790
2397 우분투 9.04에서 tslib-1.0설치시 에러.. [2] Kevin 2009-10-24 3525
2396 SMDK6410에서 사용하는 uboot를 aesop보드에서 사용이 가능한가요. [4] 허경 2009-10-24 618
2395 aesop3rd.zip 파일이 다운이 안됩니다.. [3] 김경섭 2009-10-23 703
2394 SMDK6410 보드에서 NFS 부팅 중 에러"not responding, still t... [4] 심성보 2009-10-22 967
2393 s3c6410 관련 기술자료 받을 수 있는 곳 알 수 있나요? [1] 김민석 2009-10-22 534
2392 6410 관련 초보 질문입니다. [1] 마린 2009-10-22 477
2391 S5P6440 정도면 빌드업 PCB로 제작 하지 않아도 설계 가능 할까요... [3] 홍성관 2009-10-21 1363
2390 PMIC 급구합니다. TPS650243RHBT ==> 수배완료!! (감사합니다 ^^) [4] 조덕연 2009-10-21 613
» 커널 2.6.21 + smdk 6410 ioremap() 관련 질문 드립니다. [3] 한규혁 2009-10-21 1406

사용자 로그인