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

다음과 같이 
MODULE_DEVICE_TABLE(i2c, s5k4ca_id); 
로 선언 했을때, s5k4ca_id안에 속해 있는 probe 함수는 어느 시점에 호출되나요?

통상 module_init(); 으로  선언한 경우 커널 부팅시점에 probe가 호출되는데요.
MODULE_DEVICE_TABLE는 어떻게 되는지 궁금합니다.

노쑤

2011.12.08 10:43:26
*.196.10.202

추천
1
비추천
0

카메라 작업 중이신가보네요?


저도 카메라 작업 중입니다.


MODULE_DEVICE_TABLE로 grep해봤더니 MODULE_DEVICE_TABLE에 등록하고


module_init도 호출하는 코드들이 많습니다.


그래서 MODULE_DEVICE_TABLE과 probe 호출되는 시점과는 아무런 관계가 없다고 추측됩니다.



아래는 간단하게 ctag와 grep으로 펑션 호출 따라가본 결과입니다.


카메라쪽 코드들만 MODULE_DEVICE_TABLE에 등록하고


i2c 등록은 어플단에서의 호출로 시작됩니다.




device/sec/sec_proprietary/libcamera/SecCamera.cpp

688 int SecCamera::Create(int cameraId)

715         ret = fimc_v4l2_s_input(m_cam_fd, index);

259 static int fimc_v4l2_s_input(int fp, int index)

266     ret = ioctl(fp, VIDIOC_S_INPUT, &input);


drivers/media/video/v4l2-ioctl.c

1201                 ret = ops->vidioc_s_input(file, fh, *i);


drivers/media/video/samsung/fimc/fimc_v4l2.c

277         .vidioc_s_input                 = fimc_s_input,


./drivers/media/video/samsung/fimc/fimc_capture.c

599 int fimc_s_input(struct file *file, void *fh, unsigned int i)

629                         ret = fimc_configure_subdev(ctrl);

551 static int fimc_configure_subdev(struct fimc_control *ctrl)

586         sd = v4l2_i2c_new_subdev_board(&ctrl->v4l2_dev, i2c_adap,
|    587                         name, i2c_info, &addr);


./drivers/media/video/v4l2-common.c

898 EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev_board);

|    851         /* Create the i2c client */
|    852         if (info->addr == 0 && probe_addrs)
|    853                 client = i2c_new_probed_device(adapter, info, probe_addrs);
|    854         else
|    855                 client = i2c_new_device(adapter, info);



이렇게 구성돼있어서


부팅 후 커널 메세지나 i2cdetect를 돌려보아도 해당 카메라 관련 된게 전혀 검색되지 않습니다.


카메라 어플을 실행해보면

am start -a android.intent.action.MAIN -n com.android.camera/.Camera


커널 메세지와 adb logcat에 메세지가 나오기 시작하면서 i2cdetect로 검색해보면


i2c device가 등록돼있는걸 확인하실 수 있습니다.


어떤 목적때문에 동적으로 등록하는지는 잘 모르겠지만


이렇게 등록하니 한 버스에 같은 i2c address 카메라 두개 붙였는데 통신 잘되네요








훌러덩

2011.12.08 18:30:09
*.176.119.78

정말 좋은 답변 감사합니다.. ^.^

고도리

2011.12.09 01:27:35
*.200.239.234

모듈 초기화 함수는

 

init/main.c 의 do_initcalls()에서 등록이 됩니다.

 

probe함수의 호출은

platform_driver_register 혹은 platform_device_regsiter() 함수가 호출될 경우에 호출이 됩니다.

 

조건이 있는데, platform device와 platform driver가 둘 다 알맞는것이 존재할 경우 probe함수가 호출됩니다.

 

여기서 더 들어가면.........ㅎㅎ, 강좌가 되니 kernel device model에 대해서 좀 더 공부하시면 대략 아실 수 있을겁니다.

노쑤

2011.12.09 02:23:13
*.196.10.202

"init/main.c 의 do_initcalls()에서 등록이 됩니다."라는 표현은 조금 오해의 소지가 있어 보입니다.


호출이라고 하는게 더 좋을 것 같습니다.

고도리

2011.12.09 02:38:26
*.200.239.234

어제 심한 음주로 인해...................정신이 멍한가 보네요.


"등록은 컴파일 시 이루어지고요.

do_initcalls()에서 호출됩니다."


라고 하면 될 듯 하네요....ㅎ

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
6108 [완료] LCD 맨 위에 하얀색 1줄은 정상인지요. [4] 오주열 2007-05-11 2604
6107 6410에 SDIO Wi-fi 질문 입니다. [7] 여정휘 2009-02-14 2602
6106 S3C6410 MFC Encode 문제 [10] Masashi Miyakawa 2009-07-24 2601
6105 라즈베리파이나 cubox의 1080p 동영상 재생 [3] eou4 2013-10-29 2592
6104 [질문 혹은 참고] 혹시 BSD계열 올려 보신분 ? [1] 김희만 2007-05-14 2592
6103 partition size 저정과 booting 오류 문제 [4] 전문가가되자 2013-08-28 2591
» MODULE_DEVICE_TABLE로 선언 했을때 probe 함수 호출 [5] 훌러덩 2011-12-08 2589
6101 kernel 2.6.28.2 포팅 [1] 김광준 2009-01-31 2589
6100 android에서 키맵핑 할때 android 에서 "HOME" 키가 안먹네요.. [1] 신종현 2009-07-03 2588
6099 No private recovery resources for TARGET_DEVICE passion choboja 2010-12-30 2579
6098 [완료] CPU 클럭 스피드 [3] 강덕하 2007-05-15 2578
6097 [완료] LCD에 잔상이 생기네요. [3] 양민철 2007-06-26 2572
6096 [질문]스피커에 대해서요.. [3] 이태간 2007-05-26 2571
6095 Android의 PDK와 SDK의 차이점이 무엇인가요? [1] 아침미소 2010-04-15 2570
6094 [질문][S3C6410]SPI/SDIO/USB 전송속도 [2] 김정희 2011-09-28 2568
6093 [질문] 패널(모니터) 끄기 관련 [2] 김희만 2007-05-12 2546
6092 Exynos4(S5PV310) toolchain관련 문의 [5] 준성아빠 2012-01-04 2545
6091 driver에서 probe()함수가 호출되는 시점은요 ? [1] 열심히 2013-05-17 2543
6090 [질문] 입력 장치는 어떤 것을 이용하는가요? [완료] [7] 성진호 2007-06-19 2543
6089 USB Hub를 이용한 USB-to-Serial(FTDI) 동작 에러 제일파프2 2013-05-07 2536

사용자 로그인