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

TI DM6467 보드를 커널 2.6.18 로 테스트중 입니다 .....

 

RTC 드라이버 프로브 함수부분 입니다 ...

 printk("RTC Probe ....n");
  273     dev_dbg(&adapter->dev, "%sn", __FUNCTION__);
  274
  275     if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
  276         err = -ENODEV;
  277         goto exit;
  278     }
  279
  280     if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
  281         err = -ENOMEM;
  282         goto exit;
  283     }
  284
  285     client->addr = address;
  286     client->driver = &pcf8563_driver;
  287     client->adapter = adapter;
  288
  289     strlcpy(client->name, pcf8563_driver.driver.name, I2C_NAME_SIZE);
  290
  291     /* Verify the chip is really an PCF8563 */
  292     device_register
  293         if (pcf8563_validate_client(client) < 0) {
  294             err = -ENODEV;
  295             goto exit_kfree;
  296         }
  297     }
  298
  299     /* Inform the i2c layer */
  300     if ((err = i2c_attach_client(client)))
  301         goto exit_kfree;
  302
  303     dev_info(&client->dev, "chip found, driver version " DRV_VERSION "n");
  304
  305     rtc = rtc_device_register(pcf8563_driver.driver.name, &client->dev,
  306                 &pcf8563_rtc_ops, THIS_MODULE);
  307

 

왜 아래의 디버깅 메시지에서 드라이버 모듈을 삽입했을때 Unknown symbol rtc_device_register 에서 왜 오류가 발생하는지

원인분석 좀 부탁드리고 해결방안 좀 찾아 주셨으면 합니다 .....
 

 

linux-2.6.18-davincihd/drivers/rtc # insmod rtc-pcf8563.ko
Loading Module rtc-pcf8563.ko
rtc_pcf8563: Unknown symbol rtc_device_unregister
rtc_pcf8563: Unknown symbol rtc_device_register
insmod: can't insert 'rtc-pcf8563.ko': unknown symbol in module, or unknown parameter
~/nfs/linux-2.6.18-davincihd/drivers/rtc # rtc_pcf8563: Unknown symbol rtc_device_register
-sh: rtc_pcf8563:: not found
~/nfs/linux-2.6.18-davincihd/drivers/rtc #
~/nfs/linux-2.6.18-davincihd/drivers/rtc # hwclock --systohc
hwclock: can't open '/dev/misc/rtc': No such device or address

 

 

 

RTC___1.jpg

 

 

제가 선택한 Menuconfig 입니다 ...

아랫분 답변 말씀 처럼 RTC Class 선택해 주는 부분이 없는데 어디를 봐야 할까요 ?

 


 

 

 

 


funmoney

2011.07.05 17:57:22
*.169.251.167

rtc_device_unregister() / rtc_device_register() 함수들이 컴파일 된 .o 파일이 커널에 없는 것입니다.

make menuconfig 에서 무언가 빼먹으신건 없는지 확인해 보시는 것이 좋을 듯합니다.

류경훈

2011.07.05 19:12:05
*.178.61.188

rtc-pcf8563.ko 모듈이 로딩할때 커널의 심블을 동적 바이딩하는데 커널에서 rtc_device_register, rtc_device_unregister
을 찾을 수 없다는 말입니다.

이 말은 커널 바이너리에 해당 심블이 없다는 말이죠.

이 경우 대부분 커널 옵션 설정에 따라서 커널의 특정  파트가 빠질 수 있는데 위의 상황은 RTC class 라이브러리가

커널 빌드 옵션에서 빠진듯 합니다.

make menuconfig 하셔서 메뉴중 아래까지 가셔서 RTC class를 enable 해주시고 다시 컴파일 하면 해결 될겁니다.
device drivers->real time clock->RTC class

죠니주니

2011.07.05 20:55:22
*.238.149.1

해당 심볼테이블이 커널빌드될시 없어서 그런것입니다

컴파일하신 커널이미지로 부팅하시고 심볼테이블부터 확인하세요
부팅하여 심볼테이블 확인해볼수 있죠~~
해당 함수 들어있는 소스 부터 확인하시고 그 소스에서 해당함수가 심볼테이블로 되있는지도 확인하시고
안되있으시면 심볼테이블 추가 ex)export_symbol 로 추가해주심됩니다.
그럼 수고하세요~

funmoney

2011.07.05 21:44:01
*.169.251.167

rtc_device_register() 함수 내부에서 /dev , /proc , /sys 등 동작에 필요한 system file 들을 생성해줍니다. 따라서 그 함수가 없으면 open 에서 부터 되지 않을 것입니다. 해당 함수는 kernel2.6.30의 경우에 ./linux/driver/rtc/class.c 에 있네요. Makefile 을 확인해보니 class.c 는 무조건 kernel 내부로 함께 build 되도록 되어 있는데, 문제의 함수가 없다는 것이 좀 이상하네요. kernel build 를 clean 하고나서 다시 해보는 것도 좋을 듯 합니다.
 
아... 만약 class.c 도 정상 build 되어 kernel 에 삽입되었는데도 계속 나온다면, Moudule licence 문제인 경우가 있습니다. 예전에 EXPORT_SYMBOLE 로 선언한 kernel 함수를 모듈에서 사용하려는데 계속 unknown symbol 이라고 나오던 적이 있었습니다. 당시기억에 kernel 에 사용하려고 하는 함수가 이미 들어가 있는 것을 확인 했는데도 모듈을 insmod 하면 계속 unknown symbole ... 이 발생했던 기억이 있네요 ... 이때는 export licence 와 module licence 를 맞추어 주면 잘 되었습니다. 이것도 함께 확인해 보심이 좋을 듯.

장석원

2011.07.06 17:34:35
*.151.23.186

일단 디바이스드라이버가 등록되서 레지스터값을 읽는것까지는 확인했구요

어플짜서 나머지 동작도 확인할 예정 입니다 ...

 

그동안 도와주셔서 감사합니다 ...

List of Articles
번호 제목 글쓴이 날짜 조회 수sort

사용자 로그인