在进行介绍前,先说说自己的PC情况,Ubuntu10.10,kernel:2.6.35。
之后将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。这个就是编译之后的模块了。 注意,此Makefile无指明make clean的路径,大家可以在自己的Makefile中指明绝对路径,或者将Makefile改名为makefile,然后mv至dir下,编译时用make -f makefile命令指定某个makefile文件编译,同样,在make clean时,用make -f makefile clean对生成文件进行删除。
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就可以了。