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

안녕하세요 ? 한가지 여쭈보려고 합니다.

 

Device driver를 보면, 모두 probe()함수가 있습니다.

이 함수가 언제 호출되는지 ? (시점), 또는 어떤 경우가 만족될 때 호출되는지 ? (조건)”을 알고 싶습니다.

먼저, 제가 알고 있는 두 가지의 경우를 말씀 드리고, 세 번째 경우에 대해서 문의를 드리고자 합니다.

 

#.첫째 경우: platform driver의 경우

struct platform_device AAA = {

   . name = “ BBB “

}

struct platform_driver CCC = {

   .driver = {

      .name = “BBB”

   }

}

platform_device_register()함수를 이용하여 AAA(device)구조체를 등록하고,

platform_driver_register()함수를 이용하여 BBB(driver)구조체를 등록한 다음에

두 구조체의 .name (여기서는 BBB)이 동일하면, platform_driver 구조체 멤버인 probe()함수가 호출됩니다.

 

#.둘째 경우: I2C, SPI와 같은 BUS 로 통신하는 device driver 경우

struct i2c_board_info DDD= {

I2C_BOARD_INFO("EEE", ),

};

static struct i2c_driver FFF = {

             .driver = {

                           .name = "EEE",

             },

};

i2c_register_board_info()함수를 이용하여 DDD구조체를 등록하고,

i2c_add_driver()함수를 이용하여 FFF 구조체를 등록한 다음에 두 구조체의 .name (여기서는 EEE)이 동일하면,

i2c_driver 구조체 멤버인 probe()함수가 호출됩니다.

 

# 셋째 경우: USB, PCI, SDIO, 기타 등등의 BUS로 통신하는 device driver의 경우

이 경우(유형)의 driver의 구조()는 위의 둘째 경우와 유사하며,

BUS마다 정형화된 포멧(driver 구조체와 그 등록함수)이 있더군요

그러나, 이 경우의 device의 구조(체) 유형은 제 판단으로는 정형화된 포멧이 없는 것 같습니다.

BUS유형의 driver이면서도 위의 둘째 경우와는 다른 것 같습니다.

, 위의 첫째 경우와 둘째 경우에는

device driver 구조체 각각에 존재하는 .name 멤버가 같아야 probe()함수가 호출이 되는데,

셋째 경우처럼 ‘device 구조체가 등록이 안 되는 구조라면, .name멤버를 이용하여, device<->driver 상호간의 쌍()을 검색하지는 못할 것으로 추측됩니다.

그렇게 되면, 첫째, 둘째의 방법(메커니즘)으로는 probe()함수의 호출이 불가능할 것 같습니다.

그렇다면, 어떤 메커니즘, 어떤 방법에 의해서(또는 어떤 시점에서) probe()함수가 호출이 되는지요 ?

그리고, I2C,SPI BUS경우는, device를 표현하는 정형화된 포멧(=struct i2c_board_info & i2c_register_board_info()함수) 있는데, USB,PCI,SDIO 등의 대부분 BUSdevice를 표현하는 정형화된 포멧이 왜 없는지요 ?

(만약, 제가 잘못 알고 있고, 실제로 있다면 그것을 알려 주시면 감사하겠습니다.)

 


고도리

2013.05.19 21:09:52
*.111.12.170

lxr 사이트 들어갔더니....오늘 접속 안되네요...ㅠ.ㅠ


일단, 대부분의 bus관련은 각 버스마다 고유의 device 형태를 가지거나, 아니면 그대로 링크드 리스트에 붙이는 함수가 있습니다(e.g. i2c).


제 기억으로는 각 bus 고유의 device는 항상 struct device를 가지게 되며, 이 녀석을 이용하는 것으로 기억이 납니다(지금 검색할 상황이 아니라서 추정과 기억에 의존합니다).


정형화된 format은 struct device 만 보시면 될 듯 하며, 나머지 부분은 구현하기 편한대로 했다라고 밖엔 생각이 안드네요...^^, 커널 메인테이너들 주관이 들어가 있을테니깐요....ㅎ

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
5828 [완료]printk & UART질문 [2] 조성철 2007-06-28 1874
5827 VMWARE 에서 이동식메모리가 인식이 되지 않는데..... [1] blue0sky 2014-01-07 1873
5826 안드로이드 sd카드 인식 문제 [2] 누구누구 2011-08-30 1872
5825 ARM에서 modified virtual address와 process id가 왜 필요할 까요... [3] 이종진 2009-03-16 1872
5824 Android - ALSA HAL 관련 문의 [1] 새희망 2012-02-08 1870
5823 MP2530에 LAN91C113 드라이버 질문 [1] 정순철 2009-08-01 1869
5822 [완료] 이솝 3차 보드 구입하기가 힘들어서 PCB를 제작할려고 하... [6] 황순일 2007-06-05 1864
5821 [ARNDALE BOARD] 오디오 관련해서 문의드립니다. file [3] 강현성 2013-02-05 1863
5820 vold 사용시 문제. [2] 김종현 2009-08-06 1863
5819 [Linux] SMSC911x Driver Upgrade 관련 질문... [3] 스페셜 2012-04-19 1862
5818 안드로이드 개발 서버 구축 (우분투 설치) [5] jacket 2011-02-17 1860
5817 TCPIP 통신에 관해 질문있습니다. [6] SpecialCase 2014-01-09 1858
5816 u-boot 에서 usb 메모리스틱 읽기...<==[완료!] [3] 이율삼 2006-08-12 1856
5815 android key up timeout 값 관련 [2] 신현호 2013-02-28 1855
5814 커널 패닉에러.. [1] 곰비 2011-09-27 1854
5813 u-boot ext3format, fastboot 문제점 nsys 2013-02-19 1853
5812 S3C6410에 Micro SD를 쓰는데 에러 발생 윤상인 2013-12-05 1847
5811 libusb 보드에서 드라이버 인식 [1] pedor11 2014-01-29 1846
5810 ethernet 초기화 [1] 권오혁 2013-04-20 1846
5809 디바이스드라이버 등록하는 방법 [2] 갱고 2011-12-16 1846

사용자 로그인