프로그래밍/리눅스 커널

s906b alsa sound card 코드 따라가기

포도알77 2022. 5. 19. 22:33

sound/soc/samsung/rainbow_prince.c


1) Platform driver 드라이버 정의

sound/soc/samsung/rainbow_prince.c

이름이 "rainbow-sound"인 platform_driver를 등록
probe, remove member ops는
- rainbow_sound_probe,
- rainbow_sound_remove 함수를 이용

* platform_driver: include/linux/platform_device.h 정의
* platform device, 가상 버스인 플랫폼 버스에 연결되는 hot plugin 미지원으로 항상 연결되어 있음이 보장되어 있는 장치라고 한다. 주로 device-tree에 정의(항상 연결되어 있으니 실제 장치 확인 필요 없음)한다 함??

sound/soc/samsung/rainbow_prince.c

[MODULE_DEVICE_TABLE 관련 공부 필요]

arch/arm64/boot/dts/samsug/g0s/g0s_eur_openx_w01_r27.dts


2) probe 호출 및 카드 등록
dt에서 장치를 찾았으므로 아래 호출으로 등록한 rainbow_sound_driver의 probe 함수인 rainbow_sound_probe가 호출

module_platform_driver(rainbow_sound_driver);
-> module_platform_driver 매크로는 보일러플레이트(상용구)로 따라가보면 rainbow_sound_driver의 init, exit 함수를 정의해주며, module_init (include/linux/module.h), __initcall (include/linux/init.h), device_initcall, __define_initcall(fn, 6)... 따라 올라가서 asm으로 영역 지정한다.

호출 시점은 kernel_init 부터라는데 이 부분은 https://m.blog.naver.com/kazama10/50174820319 참고, 대충 early 먼저 호출되고, init은 지정된 번호 순서대로 호출되는 듯. [initcall 공부 필요]

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사