在编写linux驱动程序时,在交叉编译环境下,必须保证编译系统的内核源码树与开发板上的内核源码树版本等一致,ubuntu的内核版本 一般与开发板系统的内核版本是不一致的.解决问题的方法是将与开发板内核版本一致的源码copy一份到ubuntu系统中,比如放到
/work/system/linux-2.6.22.6下面.然后linux驱动程序的makefile可以这样编写
KERN_DIR = /work/system/linux-2.6.22.6 #内核源码树路径
all:
make -C $(KERN_DIR) M=`pwd` modules # -C表示进入内核源码树路径编译 M=`pwd`表示记住当前的路径,以便编译完成后退回 #到原来的目录
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += myleds.o # -m 编译成模块,-y表示编译成静态的并链接进zImage中
上面的myleds.o是驱动程序文件
该内核源码必须经过配置编译后才能编译驱动程序的ko文件.编译方法请看另一篇文章,内核源码的解压打补丁和编译方法
注:编译完成的内核源码称为内核源码树.