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

Androidkerneldriversbaseplatform.c 에 있는 소스중에

 

int platform_driver_register(struct platform_driver *drv) 라는 함수가 있습니다.

 

이 함수가 하는일은 대략 보니...

 

platform driver 구조체와 device driver의 type-safe를 위해서, probe 및 remove, shutdown 등의 함수를

 

매칭(?) 시켜주는 역할을 하는 것 같은데요.

 

여기서 질문이 있습니다.

 

 

 

int platform_driver_register(struct platform_driver *drv)

{

    drv->driver.bus = &platform_bus_type;
          if (drv->probe)
            drv->driver.probe = platform_drv_probe;

                 :

                 :

                 :

  return driver_register(&drv->driver);

}

 

에서, 굳이 drv -> driver.probeplatform_drv_probe를 매칭 시켜주는 이유를 모르겠습니다.

drv->drver.probe = drv->probe 로 매칭 시켜주면 되는일 아닌지요?

 

음, 굳이 platform_drv_probe로 들어가서 container_of 함수까지 꺼내써야 되는 이유를 모르겠습니다.

 

혹시 알고 계신분 있으시면 알려주셨으면 감사하겠습니다.

 

 

매번 여기 회원님들께서 친절히 답변을 달아주셔서, 정말 감사하고 있습니다.

 


 


funmoney

2011.07.10 04:04:55
*.169.251.167

Q : Androidkerneldriversbaseplatform.c 에 있는 소스중에
    platform_driver_register() 에서 왜 drv -> driver.probe 에 platform_drv_probe를 매칭 시켜주는 이유를 모르겠습니다.
    drv->drver.probe = drv->probe 로 매칭 시켜주면 되는일 아닌지요?
A : 저도 kernel object 의 hierarchy 구조까지는 분석하지 못했습니다. 사실상 kernel object 내부를 분석한다는 것이나
    마찮가지여서 엄두가 나지 않다군요.
    개념위주로 설명드리겠습니다.
    device / driver 는 kernel 이 외부와의 통로로 사용하기 위한 하나의 수단입니다.
    kernel 은 platform-device/platform-driver 와 device/driver 를 구분하지 않고
    무조건 device / driver 만을 생각합니다.
   
    따라서, 이런 커널에게 platform-device / platform-driver 에서 사용할 함수들이 있다면, 이함수들을 사용해야할
    kernel 에게 어떤 함수를 사용해야하는지를 알려주기 위한 어떤 방법이 필요합니다.
    kernel 은 platform-device / platform-driver 라는 구조는 모르기 때문입니다.
    즉, 이 통로 역할을 하는 것이 device/driver 구조입니다.
   
    결국, platform_device_add() / platform_driver_register() 등의 내부에는 device_add() / driver_register() 함수가 있는데
    이것은 kernel object 와의 interface 를 담당하여 kernel 이 device/driver 계층을 통하여 platform-device/platform-driver 함수들을
    이상없이 Call 하게 되는 것입니다.
   
    이상의 개념설명을 바탕으로 platform.c 의 platform_drv_probe() 함수의 소스코드를 보시면
    device 에서 platform-device 를 찾아내고 driver 에서 platform-driver 를 찾아낸 후에
    결국에는 찾아낸 platform-driver 의 probe() 함수를 호출하고 그 함수의 매개인자로 찾아진 platform-device 를 넘겨주고 있는 것을
    알 수 있습니다.
   
    정리하면, kernel object 와 platform-device/platform-driver 간의 정형화된
    하나의 수단(;정형화된 interface function between kernel and platform-device/platformdriver )이라고 생각하면 됩니다.
   
   

고도리

2011.07.10 04:19:18
*.121.139.134

이송호님 말씀이 맞을겁니다.


platform_driver는 driver의 상위구조입니다. 실제로는 driver 이지요

해서 driver를 처리하는 방법대로 처리하기 위해서 그렇게 쓴 듯 합니다


만일 platform_driver 가 아닌 다른 driver의 상위 레이어가 있을 경우를 생각해 보시면 될 듯 합니다

(ex> i2c_add_driver())


위와 같은 경우의 일반화 처리를 위한게 아닐까 생각만 해 봤습니다...^^

List of Articles
번호 제목 글쓴이 날짜sort 조회 수
1628 s5pc100 UART 포팅 [1] 준히오빠 2011-07-10 509
» Platform_driver_register 함수에 관련되어 질문이 있습니다. [2] 코와붕과 2011-07-10 1130
1626 qt/embedded opengl-es 관련 [1] 노가다꾼 2011-07-10 652
1625 A8 허밍버드 FullHD 지원문제.. [3] 무난한놈 2011-07-11 744
1624 커널 2.6.18 RTC hwclock --systohc 명령은 정상동작 하는데 ... [3] 장석원 2011-07-11 755
1623 httpd 포팅중 no search file 에러 [4] 최원제 2011-07-11 500
1622 양산용 시스템페키징을 어떻게 하시는지요.[내공100point~] [1] 정찬홍 2011-07-11 1017
1621 mkimage로 만든 ramdisk 다시 gz 으로 돌릴 수 있나요? [2] DavidKim 2011-07-12 728
1620 watchdog 관련 질문드립니다. [1] 이종범 2011-07-12 1095
1619 V310보드에 감시 카메라 연결하고 싶은데요, [1] 훌러덩 2011-07-12 636
1618 UBoot 2011.06 버전 V210 MMU 관련 문의 드려요.... [2] 사행언 2011-07-13 1093
1617 부팅관련 질문드립니다. [1] 죠니주니 2011-07-13 797
1616 Android(gingerbrea) ALSA관련 문의 [1] 이영찬 2011-07-13 781
1615 DM6467 I2C RTC 드라이버 테스트 문의 ... [4] 장석원 2011-07-13 1015
1614 s5pc110 or s5pv210 계열 u-boot 에서 interrupt 사용 [2] 옐로우맨 2011-07-13 833
1613 RTC 디바이스 드라이버 컴파일 에러 문의 ... 장석원 2011-07-14 835
1612 개발 보드에서 LCD 제거 후 HDMI 로만 동작하려면 [1] 김효승 2011-07-14 855
1611 Busybox on Android ??? [1] Simba444 2011-07-14 752
1610 롬라이터 프로그램(all-07) 비둘기사냥꾼 2011-07-14 771
1609 v210 카메라 영상 노이즈 관련 질문입니다. [1] 윤병진 2011-07-15 785

사용자 로그인