Welcome 微信登录

首页 / 操作系统 / Linux / Linux设备驱动程序的Makefile文件例子

最近研究QQ2440,想做水下机器人的位姿检测,用Linux需要对设备驱动编程,学了学,挺麻烦的,麻烦在编译和加载上,在网上找到一个例子不错,抄下来备用。PC机上的:
  1. obj-m := hello.o     
  2. KERNELDIR := /lib/modules/$(shell uname -r)/build   
  3. default:   
  4.     make -C $(KERNELDIR) M=$(shell pwd) modules   
  5. install:   
  6.     insmod hello.ko  
  7. uninstall:   
  8.     rmmod hello.ko   
  9. clean:   
  10.     make -C $(KERNELDIR) M=$(shell pwd) clean   
ARM上的:
  1. obj-m := hello.o     
  2. KERNELDIR :=/opt/friendlyARMQQ2440/ghCodes/kernel-2.6.13 #对应到自己开发板得内核目录  
  3. default:   
  4.     make -C $(KERNELDIR) M=$(shell pwd) modules   
  5. install:   
  6.     insmod hello.ko  #www.linuxidc.com
  7. uninstall:   
  8.     rmmod hello.ko   
  9. clean:   
  10.     make -C $(KERNELDIR) M=$(shell pwd) clean   
两者的区别仅仅在内核目录上,这个问题是后来才研究明白的,因为之前内核配置上的错误导致了很多问题,在网上找到一些解决方法,一一解决了,现在想总结时却发现都忘了是什么问题了,只记得最后的时候insmod hello.ko时出现如下错误:version magic "2.6.14.7 ARMv4 gcc-3.4" should be "2.6.14.7 preempt ARMv4 gcc-3.4"insmod: cannot insert `st7565p_driver26.ko": Invalid module format (-1): Exec format error解决办法:用如下操作:我用的是make menuconfig. 注意:您的内核必须已启用这些选项进行了编译,用以支持模块的动态加载。(用make menuconfig调出内核配置菜单):Loadable module support --->Enable loadable module supportModule unloading[ ] Module versioning support (EXPERIMENTAL)Automatic kernel module loading注:该步没做时,在make modules时将出错。Kernel Feautre -> Preemptible Kernel配置完后重新make,然后就能在arm端成功运行!