拷贝6410光盘文件A下Linux文件夹中的linux-2.6.38-20111205.tgz(与开发板所用内核版本相同)文件到ubuntu的/root文件夹下并解压到此文件夹
解压后进入其根目录。执行命令:cp config_mini6410_a70 .config ;注意: a70后面有个空格,然后有个“.”开头的config(a70为开发板的触摸屏型号)
#make zImage 开始编译内核,也可以直接使用 make 命令
编译结束后,会在 arch/arm/boot 目录下生成 linux 内核映象文件 zImage
编写驱动程序
其Makefile文件模版如下:
ifneq ($(KERNELRELEASE),)
obj-m:=zl.o
else
KERNELDIR:= /root/linux-2.6.38
PWD:=$(shellpwd)
default:
$(MAKE)-C $(KERNELDIR) M=$(PWD) modules
clean:
rm-f *.ko *.o *.mod.o *.mod.c *.symvers *.order
endif
目录文件不能含中文
需要注意的是:makefile文件的格式对齐问题,不然容易出错。obj-m后的XX.o为生成的驱动名字要与驱动程序文件名相同。KERNELDIR为内核所在目录。有的makefile里此变量值为: /lib/modules/`uname -r`/build 表示的是ubuntu内核所在的目录,因ubuntu与arm板的内核版本不同,所以编写arm板的驱动程序时该值必须为与arm内核相同的内核源文件所在的根目录。
(make moudles_install将生成的驱动模块拷贝到内核文件夹中,本文并不需要这样做)
进入驱动程序所在目录执行make 指令,会在目录下生成.ko文件,将该文件拷贝到开发板/lib/modules/2.6.38-FriendlyARM下,执行insmod XX.ko即可将模块加载到内核中去,卸载命令为rmmod XX
加载完成后lsmod即可看到自己加载的驱动,此时/dev下并没有设备名,要添加一句命令mknod /dev/** c ** 0才行