如何摆脱开发板用printk在本机调试模块


最近在做有关蓝牙的调试,但是由于开发板有限,导致无法进行平台调试,只能在本机来做。

在进行介绍前,先说说自己的PC情况,Ubuntu 10.10,Linux Kernel:2.6.35。

虽然是在本机调试,但是本机的kernnel是不能用的,所以需要重新获得代码,terminal下输入命令:sudo apt-get install linux-source-2.6.35。之后linux-source-2.6.35会被下载到/usr/src/下,名为:linux-source-2.6.35.tar.bz2。

之后将linux-source-2.6.35.tar.bz2剪切到用户目录下,当然,这个得用命令来mv,解压,解压后的目录为:~/linux-source-2.6.35。然后cd linux-source-2.6.35 -->make。
接下来就可以对自己要进行的模块进行调试,因为笔者最近在做bluetooth部分,所以就以bluetooth为例说明,具体的调试过程如下:

1.从解压的源码处获得要改动的模块代码,例如/drivers/bluetooth/下的代码拷贝到/home/xxxx/dir,同时拷贝Kconfig和Makefile文件到dir下。

2.在dir外部编写一个新的Makefile,此Makefile的主要是用于编译改动文件,同时避免了改动文件后对真个kernel重新make,大大节省了时间,具体格式给个例子:

  1. ifeq ($(KERNELRELEASE),)  
  2. modules:  
  3.      $(MAKE) -C /home/cx/workstation/linux-source-2.6.35 M=$(shell pwd) $@  
  4.    
  5. clean:  
  6.      rm -f *.o *.cmd *.mod.* modules.order Module.symvers *.ko .*.cmd  
  7.      rm -rf .tmp_versions/  
  8.   else  
  9.  obj-m := bt/  
  10.  endif  
  11.  .PHONY:modules clean  

3.执行此Makefile;一条make命令搞定。之后用ls命令查看dir目录下文件,是不是除了*.c和Makefile还有Kconfig之外还有*.o和*.ko。这个就是编译之后的模块了。

4.执行insmod命令,例如生成了btusb.ko,那么就执行:insmod btusb.ko。如果你在代码中已经加入了调试信息,例如在static int btusb_probe()中加入BT_ERR("********hello, I am probe");那么当你插入USB蓝牙适配器时你就会在cons0le里面看到你打印出来的********hell, I am probe。怎样进console,别说你不知道吧,ALT+CTRL+SHIFT+F1,按的键比较多点,退出console则为ALT+F7。

之后的调试方法都是类似的,需要调试那个模块,就把那个模块的代码和Makefile还有Kconfig一起拷贝出来放在一个目录,如上面格式创建新的Makefile在目录外,在代码中加入调试信息后直接make就可以了。

相关内容