【Linux驱动学习】一个简单的编译错误

在这里记录一下在Linux驱动学习中踩到的意想不到的坑:
【1】不支持C99编程
不支持C99形式
【2】Makefile的编写需要仔细,在使用多个.c编译 模组.ko时,模组和.c不能重名。
重名导致的无限重入,直接导致led.c没有编译进去
主要错误:
led-y := led.o board_demo.o obj-m += led.o
这里首先声明的模组名为:led;在编译led模组时使用了led.c,因此后面有led.o,而在编译.ko时也是按照模组名led.o,因此出现了意想不到的错误。改成这样就能正常:
led_modules-y := led.o board_demo.o obj-m += led_modules.o
对应生成的模组文件为led_modules.ko
这个问题很难发现,因为即便写错,它仍然会编译出模组文件以及APP文件,并且不会报,需要仔细查看编译过程的打印才会发现【dependency dropped】。但是这个模组文件安装会显示一些问题,但是查这些相关打印是找不到问题的根本的,因为有很多其他的问题也会导致这样的打印。在ARM上打印如下:
ARM打印
一开始楼主的想法是根据这个打印去追踪问题,研究了半天也没研究出来。后来想到楼主在模组init部分是带有打印的,理论上只要进入了init函数就会马上在内核打印 文件、函数、行数的信息。可是这个却没有,说明连init都没有进去,于是才想到是编译的问题。
在编译简单LED驱动程序时,Makefile是这么写的:
obj-m += led.o
这里因为驱动文件只有led.c,所以没有问题。
【3】题外话:在Ubantu下使用VsCode的时候容易出现的一个问题:在使用ibus的拼音输入法时,鼠标左键拉选代码会失效,切换至英文输入法就会正常。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值