我有一个第三方SW软件包,可以编译内核模块和用户空间应用程序。不幸的是,这个第三方非常复杂,并且不使用Kbuild来构建内核模块(我尝试了无成功(。
我试图用以下行构建一个简单的驱动程序:
arm-linux-gnueabihf-gcc -D__KERNEL__ -Wall -include /lib/modules/4.4.62-18.6-default/build/include/generated/autoconf.h -MD -MP -Werror -O2 -I /usr/src/linux-4.4.62-18.6/include -I /src/include -DMODULE -c -o hello_dkm.o hello_dkm.c
$(LD) -o $(debug_target) $(LD_COMMON_FLAGS) -g $(debug_Objs)
我有:
fatal error: /usr/src/linux-4.4.62-18.6/include/linux/thread_info.h:54:29: fatal error: asm/thread_info.h: No such file or directory
附录
- 板块:Altera Cyclone V Soc,Arm Cortex A9双核
- 内核:Linux Altera 3.7.0
- 主机:Linux Opensuse 42
ps:在我团队的项目板上形式中,很难使用内核源树使用经典的编译线: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
预先感谢
您的直接问题是" asm/thread_info.h"不在您的CPATH
中,也未在任何-I
参数中指定。您需要在系统上找到该文件,并将其根部放入CPATH
环境变量或-I
指令中。
要清楚地说明,如果您在/usr/local/include/linux/asm/thread_info.h
处找到文件,则必须在arm-linux-gnueabihf-gcc
之前使用CPATH=/usr/local/include/linux
,或在命令行中的某个地方插入-I /usr/local/include/linux
,也许是在arm-linux-gnueabihf-gcc
之后。
可能还有其他问题,但这应该使您进入下一步。
您可以使用(.ko文件(构建内核模块,例如
用名称" makefile"创建makefile,然后将此代码写入其中;
obj-m += drivername.o
all:
make -c /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -c /lib/modules/$(shell uname -r)/build M=$(PWD) clean
然后打开终端,然后在同一目录中编写 make
命令,放置哪个驱动程序。这将生成驱动程序的.o和.ko文件。
用插入驱动程序写insmod
驾驶员将加载到您的内核。
如果我不了解错误,这对您有帮助