이번에는 mmc host driver 가 등록되는 과정을 한번 보겠습니다.


mmc 드라이버는 세가지 형태를 지원합니다.

sd, mmc, sdio


그리고 블록 장치가 등록이 되죠.

버스가 등록이 되어 해당 장치를 사용할수 있게 해주고

mmc block 장치가 등록되어 파일시스템과 연결이 되는 통로가 되게 됩니다.

각각의 등록과정을 보면


mmc core 에서 호출되는 mmc_init 함수가 불리워집니다.

2910 static int __init mmc_init(void)

2911 {

2912     int ret;

2913 

2914     workqueue = alloc_ordered_workqueue("kmmcd", 0);

2915     if (!workqueue)

2916         return -ENOMEM;

2917 

2918     mmc_of_reserve_idx();

2919 

2920     ret = mmc_register_bus();

2921     if (ret)

2922         goto destroy_workqueue;

2923 

2924     ret = mmc_register_host_class();

2925     if (ret)

2926         goto unregister_bus;

2927 

2928     ret = sdio_register_bus();

2929     if (ret)

2930         goto unregister_host_class;

2931 

2932     return 0;

2933 

2934 unregister_host_class:

2935     mmc_unregister_host_class();

2936 unregister_bus:

2937     mmc_unregister_bus();

2938 destroy_workqueue:

2939     destroy_workqueue(workqueue);

2940 

2941     return ret;

2942 }


여기에서 mmc bus, host class, sdio bus 가 각각 등록이 됩니다.

여기까지는 mmc 의 host 가 등록이 되게 되어 있죠

앞으로 디바이스가 등록이 될때 bus type 이 mmc 혹은 sdio 일 경우

mmc host 에 등록이 되겠죠.


또하나의 init 이 불리워지는데 mmc block 입니다.

drivers/mmc/card/block.c

2484 static int __init mmc_blk_init(void)

2485 {

2486     int res;

2487 

2488     if (perdev_minors != CONFIG_MMC_BLOCK_MINORS)

2489         pr_info("mmcblk: using %d minors per device\n", perdev_minors);

2490 

2491     max_devices = 256 / perdev_minors;

2492 

2493     res = register_blkdev(MMC_BLOCK_MAJOR, "mmc");

2494     if (res)

2495         goto out;

2496 

2497     res = mmc_register_driver(&mmc_driver);

2498     if (res)

2499         goto out2;

2500 

2501     return 0;

2502  out2:

2503     unregister_blkdev(MMC_BLOCK_MAJOR, "mmc");

2504  out:

2505     return res;

2506 }


mmc block 이 등록이 되는 간단한!!! 드라이버입니다.

블록장치가 하나 등록이 되죠?

mmc block 의 major 는 179번으로 등록됩니다.

mmc driver 가 하나 등록이 되는는 것으로 끝나네요


중요하게 보게될 자료구조는 아래 파일들입니다.

include/linux/mmc/card.h

include/linux/mmc/host.h


글이 쓸데없이 소스때문에 길지만

        cpu 에 등록되어 있는 장치가 등록되는 과정은 다음에 보도록 하겠습니다.