设备的VxBus驱动包含xxxRegister()函数,用于注册驱动到系统内核。随后系统在启动过程中,分别调用驱动提供的三个接口xxxInit()、xxxInit2()和xxxConnect()。
xxxInit()是在内核启动之前调用的,因此,不能打印调试信息。通常为了调试新写的VxBus驱动,可以用以下的小技巧,在系统启动后调用xxxRegister(),这样驱动被加载的三个阶段中都可以输出调试信息。
Firstly, add a similar CDF component to the BSP (or kernel project) and set INIT_RTN to taskIdSelf:
Component DRV_AUDIO_HDA {
NAME VIA HD Audio
SYNOPSIS VIA HD Audio
MODULES vxbHdAudio.o
LINK_SYMS vxbHdAudioRegister
_CHILDREN FOLDER_DRIVERS
_INIT_ORDER hardWareInterFaceBusInit
PROTOTYPE void vxbHdAudioRegister();
INIT_RTN taskIdSelf();
INIT_AFTER INCLUDE_PCI_BUS
REQUIRES INCLUDE_PCI_BUS \
INCLUDE_END \
INCLUDE_DMA_SYS \
INCLUDE_PARAM_SYS \
INCLUDE_VXBUS
}
LINK_SYMS set to vxbHdAudioRegister forces vxbHdAudio.o to be linked into the kernel.
INIT_RTN set to taskIdSelf lets the component DRV_AUDIO_HDA be included as a driver component without calling vxbHdAudioRegister
Later, I can start vxbHdAudioRegister from Workbench and single step the initialization.