我试图将snd_bcm2835移植到主线内核(主要是因为rpi官方内核不使用设备树)。
现在vcio,vchiq,snd_bcm2835都可以insmod到内核中,但仍然没有有效的音频播放设备。 snd_bcm2835模块的module_init函数是bcm2835_alsa_device_init(),它的主要工作是(简化版):
static int bcm2835_alsa_device_init(void)
{
platform_driver_register(&bcm2835_alsa0_driver);
platform_driver_register(&bcm2835_alsa1_driver);
//...repeat for 8 times
}
这个bcm2835_alsa_device_init函数在我insmod snd_bcm2835时被调用,它可以无误地运行。
和struct bcm2835_alsa0_driver,bcm2835_alsa1_driver看起来像:
static struct platform_driver bcm2835_alsa0_driver = {
.probe = snd_bcm2835_alsa_probe,
.remove = snd_bcm2835_alsa_remove,
//...
}
<。> .probe函数snd_bcm2835_alsa_probe是主要的主力,但它没有被调用。
所以问题是这个snd_bcm2835_alsa_probe何时被调用?