最近在做有关蓝牙的调试,但是由于开发板有限,导致无法进行平台调试,只能在本机来做。
在进行介绍前,先说说自己的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,大大节省了时间,具体格式给个例子:
ifeq ($(KERNELRELEASE),) modules: $(MAKE) -C /home/cx/workstation/linux-source-2.6.35 M=$(shell pwd) $@ clean: rm -f *.o *.cmd *.mod.* modules.order Module.symvers *.ko .*.cmd rm -rf .tmp_versions/ else obj-m := bt/ endif .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就可以了。