我重新编译了我的Raspberry Pi的Linux内核以启用一些调试功能。新内核是通过https://github.com/raspberrypi/tools提供的工具在我的X86台式机上编译的。新内核似乎工作正常,直到我编译我的hello-world
驱动程序模块,并打印下面的信息:
make -C /lib/modules/3.18.10-d0u9/build M=/home/pi/Linux-Device-Driver-3.18/1_Hello-World modules
make[1]: Entering directory '/usr/src/linux-source-3.18'
CC [M] /home/pi/Linux-Device-Driver-3.18/1_Hello-World/main.o
./scripts/recordmcount: 1: ./scripts/recordmcount: Syntax error: "(" unexpected
scripts/Makefile.build:257: recipe for target '/home/pi/Linux-Device-Driver-3.18/1_Hello-World/main.o' failed
make[2]: *** [/home/pi/Linux-Device-Driver-3.18/1_Hello-World/main.o] Error 2
Makefile:1398: recipe for target '_module_/home/pi/Linux-Device-Driver-3.18/1_Hello-World' failed
make[1]: *** [_module_/home/pi/Linux-Device-Driver-3.18/1_Hello-World] Error 2
make[1]: Leaving directory '/usr/src/linux-source-3.18'
Makefile:19: recipe for target 'modules' failed
make: *** [modules] Error 2
hello-world
模块非常简单,可以在我的X86 PC上正确编译。
我认为也许我编译Linux内核的方式是错误的......
有没有人遇到这个问题?
BTW,如何正确交叉编译用于驱动程序开发的Rasberry Pi内核?答案 0 :(得分:1)
在不知道有关重新编译的内核版本,os版本等的更多细节的情况下,很难确定究竟发生了什么。
根据个人经验,安装Raspbian是一种更宽容的方式来让事情在pi上运行。使Debian工作的“足够Debian”与大多数Linux环境有些相似。
Sparkfun在installing Raspbian上有一个很棒的指南,Raspbian网站上有很多可用的文档,似乎是一个非常活跃的社区。抱歉,我没有更多的帮助,但没有关于如何重新编译内核,启用了哪些调试功能等的更多详细信息,很难对解决方案更具体。
答案 1 :(得分:1)
你在哪里编译你的模块?在RasPi上?
如果是这样的话,在交叉编译期间创建的./scripts/recordmcount可执行文件是为x86构建的(因为这是它在构建内核时运行的地方)但是当你在Pi上构建模块时,你试图在它上运行它皮臂。
在x86上交叉编译你的内核模块,就像你交叉构建你的内核一样,或者只为pi构建recordmcount并替换在交叉编译期间创建的x86二进制文件(但是如果你在其他构建的时间工具中遇到类似的问题,你可能会遇到类似的问题。你这样做)