我有一个第三方软件包,可以编译内核模块和用户空间应用程序。不幸的是,这个第三方非常复杂,并且不使用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
附录
PS:在我的团队的项目平台中,使用内核源代码树很难使用经典的编译行:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
提前致谢,
答案 0 :(得分:0)
你当前的问题是" 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
之后。
可能会有其他问题,但这应该会让你进入下一步。
答案 1 :(得分:0)
您可以使用(.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
驱动程序将加载到您的内核。
如果我不明白它会对你有所帮助