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

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

 

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 조회 수
548 arm 보드에 APM 올리기 질문드립니다. [4] 은민아빠 2013-05-14 1656
547 6410 sleep mode 질문 드립니다. [1] 서비 2013-05-17 1671
546 tvp5150포팅중 Error좀 봐주세요ㅜㅜ [1] 권오석 2013-05-17 2284
» driver에서 probe()함수가 호출되는 시점은요 ? [1] 열심히 2013-05-17 2558
544 ODROID X2 codec 지원 리스트? [3] 신현호 2013-05-21 1527
543 AESOP6410 PCB Artwork File 구합니다 방가방가 2013-05-22 1091
542 mdev 설정파일에 관해 질문 드립니다. [2] 무우도사 2013-05-22 2066
541 6410 sleep mode관련 질문 드립니다. file [2] 서비 2013-05-22 1544
540 arndale 보드에서 DVFS를 끄고 무조건 최고 클럭으로 돌리고 싶습... [3] 김영준 2013-05-25 1643
539 Nexus 10 Full Source Code ??? [2] Simba444 2013-05-25 1838
538 인터럽트 실행 순서 관련(모든task가 resume 이후에 인터럽트 핸들러호... [2] 로이1024 2013-05-26 2426
537 booting error 문의 [1] lveritas 2013-05-27 1452
536 wlan0가 나타나지 않습니다. 조언구합니다. [3] 테크 2013-05-30 1447
535 native 서비스 layer에서 자바 layer로 noti? [5] wizard14 2013-05-30 1550
534 3G 모듈 ICS에 동작 시키는 게 잘 안되네요ㅡㅡ 로또리아 2013-05-31 1233
533 안드로이드 Audio Output 관련 문의 [1] 신기루 2013-05-31 1441
532 S5PV210 TL16C554 적용 문의 [3] 때끼때끼 2013-06-05 1930
531 wpa_supplicant문의 드립니다. [1] 테크 2013-06-05 3081
530 s3c6410 usb device [1] 김형영 2013-06-05 1447
529 s3c6410보드에서 rt3070 ap mode 질문입니다 [1] rubio 2013-06-08 2001

사용자 로그인