오랫만에 좀 하드하게 mmc 드라이버를 살펴보고 있습니다.

 역시 제일 좋은건 커널소스와 커널 다큐먼트를 살펴보기...


 물론 중간 중간 개념적인 부분이 필요하긴 하겠지요.

 기회가 생겼으니 살펴 보도록 하겠습니다.

 

 먼저 mmc 드라이버를 얘기할때 호스트 드라이버! 디바이스!

 뭐 이런 용어들을 써가면서 혼란스럽게 합니다.


 커널을 들어가보면 코어도 있고 블럭도 있고 버스도 튀 나오고...

 플랫폼이 나오면서 머리를 멍하게 합니다.


 뭐 조금만 용어적으로 정리하면 좋으련만... 


 그래서 조금 정리해 보겠습니다.


 mmc 장치를 사용한다는건... mmc 장치를 사용할수 있게 해주는 콘트롤러가 있어야 합니다.

 너무 당연한가요?

 그 콘트롤러는 cpu 내부에 있을수도 외부에 있을수도 있겠죠

 또 mmc interface 는 프로토콜이 스펙이 정의되어 있습니다.

 버전 얼마얼마 해서 스펙이 있는데 마치 하드디스크 ATA spec 처럼요!

 

 프로토콜이 있다는건  인터페이스에 규칙이 있다는 것이고 버전이 있는건

 하드웨어 인터페이스에 따라 고속을 지원하기 위해서 개선한 것들이라고 보시면 됩니다.

 

 너무 사설이 긴듯 싶지만 mmc 를 이해하기에 앞서 한가지 더 알아야 할 것이 있습니다.

 커널의 드라이버 모델에서 bus 에 대한 개념입니다.


 커널에서 버스라고 부르는 드라이버 모델의 개념은 아주 단순합니다

 cpu 와 외부 장치와의 인터페이스를 가리키고 있는 것이고

 그 종류에 따라 나누어 집니다.


 예를 들면

 pci bus type  - 인터페이스가 pci 겠군요

 mmc bus type - 인터페이스가 mmc 입니다.

 sdio bus type - 인터페이스가 sdio 가 되겠군요. (하지만 장치는 mmc 장치일수도 있습니다!!!)

 platform bus type - 잡다한 해당 cpu 의 인터페이스...


 버스라고 하는건 인터페이스의 타입을 나누어 놓은 것이고

 그 이유는 버스 타입에 따른 드라이버를 매칭시키기 위해서겠죠.


 그럼 흔히 mmc 호스트???  드라이버???

 뭘 얘기하는지 한번 볼께요

 

 위에서 mmc 와 sdio 를 얘기했죠?

 하드웨어적인 인터페이스는 틀리지만 타겟 디바이스가 mmc 일수 있습니다.

 이제부터는 범위를 좁혀서 mmc , sdio 라고 하겠습니다.


 mmc 의 스펙은 통신 규격을 정의한 것입니다.

 따라서 mmc 스펙을 지원하고 sdio 인터페이스를 갖는 타겟 장치가 있는거죠?


 그럼 전체적으로 구성을 한번 해 보면...


 mmc core (spec 지원)

    `---  mmc interface

    `---  sdio interface


 mmc host

   `--- imx6 (dw-mmc)

   `--- samsun (s3cmci)

   `--- 


 mmc core 는 쭉 설명했던 것처럼 mmc 프로토콜을 지원하기 위한 파트가 되겠구요

 mmc host 실제로 구동되는 콘트롤러를 가리키게 됩니다.

 imx6 의 mmc 드라이버는 sdio 인터페이스가 아닌 mmc 인터페이스를 사용합니다.

 따라서 버스 타입이 mmc 인 드라이버가 되고 플랫폼 장치가 등록이 될때

 슬롯을 뒤지고 어쩌고 저쩌구 해서 host 를 등록합니다.


 이때 사용되는게 mmc_alloc_host  -> mmc_add_host 

 이름이 딱 맞죠?


 간단히 호스트를 등록하기 위한 할당을 실시하고 add 해서 구동도록합니다.


 오늘은 코드는 아주 간략하게 이름만 소개하고

 다음엔 자료구조에 대해서 살펴보겠습니다.