无法交叉编译简单的内核模块

时间:2018-07-01 17:56:12

标签: linux-kernel

我正在尝试按照“ Hello World”进行编译。

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("BOBR");
MODULE_DESCRIPTION("HELLO MODULE");
MODULE_VERSION("0.10");

static char *name = "user";
module_param(name, charp, S_IRUGO);
MODULE_PARM_DESC(name, "The name to display");

static int __init hello_init(void) {
    printk(KERN_INFO "HEllo, %s!\n", name);
    return 0;
}
static void __exit hello_exit(void) {
    printk(KERN_INFO "Goodbye, %s !\n", name);
}

module_init(hello_init);
module_exit(hello_exit);

我的Makefile是

ifneq ($(KERNELRELEASE),)
include Kbuild
#KDIR ?= ../repos/linux 
else
    KDIR ?= /lib/modules/4.9.0-6-amd64/build

default:
    $(MAKE) -C $(KDIR) M=$$PWD

clean:
    $(MAKE) -C $(KDIR) M=$$PWD clean

endif

我开始将其设为:make ARCH=arm CROSS_COMPILE='ccache arm-eabi-' PATH=/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-eabi/bin:$PATH

我在Debian 4.9.0-6-amd64上编译。目标是arm32 4.16.18。 问题是我为主机获得了一个模块(可以对其进行insmod修改),但是目标内核将其视为无效模块。

当我尝试将Makefile中的linux路径更改为目标内核源时,编译失败,并显示fatal error: asm/barrier.h: No such file or directory

0 个答案:

没有答案