最近调试驱动,需要跟踪KernelIoControl,查MSDN发现该函数会调用OEMIoControl,在OEMIoControl中
加打印语句,编译common下的所有文件,再编译kernel整个文件夹的文件,make,发现没有任何打印语句
输出,这下就奇怪了。
仔细一瞧,发现在platform的common中,有intr,ioctl的文件夹,找到里面的source文件,发现会生成
oal_ioctl.lib,oal_intr.lib库文件。
在SMDK2440A的common中,同样有intr和ioctl文件夹,继续找里面的source文件,发现这些会调用到上
面生成的静态库,然后自己生成oal_ioctl_s3c2440a.lib,oal_intr_s3c2440a.lib库。再进kernel的
KERNKITLPROF文件夹,打开source文件,具体部分代码如下:
$(_TARGETPLATROOT)/lib/$(_CPUDEPPATH)/oal.lib /
$(_COMMONOAKROOT)/lib/$(_CPUDEPPATH)/nkprof.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_abort_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_cache_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_memory_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUDEPPATH)/oal_io_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_intr_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_timer_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_power_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_rtc_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_ioctl_s3c2440a.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/oal_profiler_s3c2440a.lib /
$(_PLATCOMMONLIB)/$(_CPUINDPATH)/oal_io.lib /
$(_PLATCOMMONLIB)/$(_CPUDEPPATH)/oal_other.lib /
$(_PLATCOMMONLIB)/$(_CPUDEPPATH)/oal_log.lib /
$(_PLATCOMMONLIB)/$(_CPUDEPPATH)/oal_kitl.lib /
$(_PLATCOMMONLIB)/$(_CPUINDPATH)/oal_ethdrv_cs8900a.lib /
$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/ddk_io.lib /
$(_COMMONOAKROOT)/lib/$(_CPUDEPPATH)/vbridge.lib /
$(_COMMONOAKROOT)/lib/$(_CPUDEPPATH)/kitl.lib /
$(_TARGETPLATROOT)/src/common/kitlusbser/kitlusbser_lib.lib /
$(_TARGETPLATROOT)/lib/$(_CPUDEPPATH)/smflash_lib.lib /
$(_TARGETPLATROOT)/lib/$(_CPUINDPATH)/dm9000_debug.lib /
$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fulllibc.lib
可见,在kernel中会调用oal_ioctl_s3c2440a.lib以及oal_ioctl_s3c2440a.lib。
经过以上分析,不然知道,解决OEMIoControl打印输出的办法:
一:编译platform/common/src/common/ioctl以及platform/common/src/common/intr;
二:编译SMDK2440A/common/ioctl以及SMDK2440A/common/intr;
三:编译SMDK2440A/src/kernel文件夹;
四:Make.