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

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

 

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
번호 제목 글쓴이 날짜 조회 수
5828 6410 sleep mode관련 질문 드립니다. file [2] 서비 2013-05-22 1530
5827 mdev 설정파일에 관해 질문 드립니다. [2] 무우도사 2013-05-22 2065
5826 AESOP6410 PCB Artwork File 구합니다 방가방가 2013-05-22 1088
5825 ODROID X2 codec 지원 리스트? [3] 신현호 2013-05-21 1527
» driver에서 probe()함수가 호출되는 시점은요 ? [1] 열심히 2013-05-17 2541
5823 tvp5150포팅중 Error좀 봐주세요ㅜㅜ [1] 권오석 2013-05-17 2284
5822 6410 sleep mode 질문 드립니다. [1] 서비 2013-05-17 1670
5821 arm 보드에 APM 올리기 질문드립니다. [4] 은민아빠 2013-05-14 1656
5820 Smdk4412보드 I2C Controller SFR에 읽기/쓰기에 대해서 Board5250 2013-05-11 1249
5819 UART 수신문제 문의드립니다. [5] 권오석 2013-05-10 2067
5818 Android 단말에서 Rndis Host Driver를 사용할 수 있나요? acedon 2013-05-10 2950
5817 Dual LCD Support Chipset [3] 블루스카이 2013-05-09 1770
5816 외산 폰 KT MMS 사용 방법 플로이드 2013-05-08 1484
5815 USB Hub를 이용한 USB-to-Serial(FTDI) 동작 에러 제일파프2 2013-05-07 2535
5814 uboot 관련 질문입니다 tftp 가 잡혔는데 안넘어가는이유. file [2] 사마사마 2013-05-06 1576
5813 sd card 강제로 제거 하였을 경우 block이 됩니다. 시안 2013-05-03 1216
5812 [arndale][origen] 커널 2.6이 돌아가는 리눅스 [3] monad 2013-05-02 2931
5811 dm900b vs LAN9220 차이에 대해서 [2] gudrl 2013-05-02 1545
5810 에뮬에서 adb 사용? [2] wizard14 2013-05-02 2076
5809 동적라이브러리 so 파일에서 class 를 export 하는 방법??? [1] blue0sky 2013-04-30 1333

사용자 로그인