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. KERNELDIR = /opt/linux-2.6.30.4-copy(内核源码的位置)
    PWD       :=$(shell pwd)

  1. CROSS_COMPILE =arm-linux-
  1. CC =$(CROSS_COMPILE)gcc    (指定交叉编译器)

  1. INSTALLDIR     =/home/hwmt2014/share(生成的.ko文件放置的位置)
  1. target =hello
    obj-m :=$(target).o
    modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    modules_install:
    cp $(target).ko $(INSTALLDIR)
    clean:
    rm -rf *.ko *.cmd *.o
    .PHONY:modules modules_install clean


    arm 端运行步骤及解释:
  1. (1)make:只是编译模块生成.ko文件
    (2)make install:将模块安装到指定的目录下
    (3)make clean:清除生成的文件,为重新编译做好准备。

  1.  

两者的区别仅仅在内核目录上,这个问题是后来才研究明白的,因为之前内核配置上的错误导致了很多问题,在网上找到一些解决方法,一一解决了,现在想总结时却发现都忘了是什么问题了,只记得最后的时候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 support

Module unloading

[ ] Module versioning support (EXPERIMENTAL)

Automatic kernel module loading

注:该步没做时,在make modules时将出错。

Kernel Feautre -> Preemptible Kernel

配置完后重新make,然后就能在arm端成功运行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值