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。问题是我为我的主机获得了一个模块(我可以对其进行安装),但目标内核将其作为无效模块拒绝。
当我尝试将 Makefile 中的 linux 路径更改为目标内核源时,编译失败并显示fatal error: asm/barrier.h: No such file or directory
.
解决方案
推荐阅读
- java - Kotiln - toDouble 3 / Int 2 = 1.5?
- javascript - 在初始化 javascript 之前无法访问“y”
- reactjs - 反应钩子组件没有获得新的道具值
- android - 新列的Android Room Auto Migration不起作用
- android - 安卓选项菜单。菜单顶部和底部的白条
- python - 在字典中查找值列表并重新调整其键
- python - Python 2D 列表完整搜索优化问题
- javascript - Firebase Auth State Persistence ELECTRON loadFILE vs loadURL
- angular - 如何修复错误未捕获(承诺):错误:单击 Material Angular 表中的导航行时无法匹配任何路线?
- c++ - 有没有更好的方法将 QPushButton 的数组连接到一个插槽,以便每个按钮在按下时都有一个唯一的标识符?