如何在 Banana PI M2 Zero 中添加缺少的内核 headers 以构建内核模块?
How to add missing kernel headers in Banana PI M2 Zero to build kernel module?
首先,也是最重要的一点,我对定制硬件几乎没有经验。到目前为止,我只在开箱即用的完整系统上设计了 Linux 个内核模块,所以这可能是一个愚蠢的问题,但我无法解决它。
我有一个 Banana PI M2 Zero,最小 Linux 5.6.0-rx5+ 基于内核 Ubuntu。我想为 ADS1294 SPI 模拟 front-end 创建一个 driver,所以我从最基本的内核文件开始:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int __init test_init(void){
printk(KERN_INFO "TEST: starting...");
return 0;
}
static void __exit test_exit(void){
printk(KERN_INFO "TEST: stopping...");
}
module_init(test_init);
module_exit(test_exit);
使用 Makefile:
obj-m := test_mod.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 all
后,系统提示make[1]: *** /lib/modules/5.6.0-rc5+/build: No such file or directory. Stop.
.
如果我列出 /lib/modules/5.6.0-rc5+/
的内容,我得到:build kernel modules.alias modules.alias.bin modules.builtin modules.builtin.bin modules.builtin.modinfo modules.dep modules.dep.bin modules.devname modules.order modules.softdep modules.symbols modules.symbols.bin source
与 ls /usr/src/linux-headers-5.6.0-rc5+/
类似,我得到一个 include
文件夹。
从这些我怀疑 headers 不知何故坏了(?),但我不确定如何进行,要检查什么。如果可能的话,我想避免重建内核。
好像你使用了一些实验内核,比如 https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal
v32 mailine kernel 5.6.0-rc5 (experimental) Ubuntu 19.10 EOAN
它是为您的开发板定制编译的,如果您无法构建内核模块,则您或图像作者似乎没有将其完全安装到图像中。
(ls -l /lib/modules/5.6.0-rc5+/build
或 ls -l /lib/modules/$(uname -r)/build
可能有助于调试此问题。)
你可以试试:
- 联系图像作者以获取 kernel-headers 安装模块编译的提示; (他确实发布了 linux-image deb 文件,但没有在 https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal/releases/tag/v3.2 中发布 headers deb 文件)
- 切换到其他安装包更正确的内核版本;
- 或重新编译内核(如果图像作者有public 构建脚本)并正确安装。实际上,手动安装可能只是将
build
目录指向构建内核的目录。
他的https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal/releases/tag/v3.2-linux-image-5.6.0-rc5+_1.0-41.deb没有完全打包,build
只是他的符号链接未包含在发布的 deb 文件中的本地目录:
$ dpkg-deb -c ~/Downloads/linux-image-5.6.0-rc5+_1.0-41.deb |grep build
lrwxrwxrwx root/root 0 2020-03-10 02:10 ./usr/lib/modules/5.6.0-rc5+/build -> /arm/ubuntu/cubieboard2/linux-5.6.y
PS:你已经联系过他了:https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal/issues/34
首先,也是最重要的一点,我对定制硬件几乎没有经验。到目前为止,我只在开箱即用的完整系统上设计了 Linux 个内核模块,所以这可能是一个愚蠢的问题,但我无法解决它。
我有一个 Banana PI M2 Zero,最小 Linux 5.6.0-rx5+ 基于内核 Ubuntu。我想为 ADS1294 SPI 模拟 front-end 创建一个 driver,所以我从最基本的内核文件开始:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int __init test_init(void){
printk(KERN_INFO "TEST: starting...");
return 0;
}
static void __exit test_exit(void){
printk(KERN_INFO "TEST: stopping...");
}
module_init(test_init);
module_exit(test_exit);
使用 Makefile:
obj-m := test_mod.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 all
后,系统提示make[1]: *** /lib/modules/5.6.0-rc5+/build: No such file or directory. Stop.
.
如果我列出 /lib/modules/5.6.0-rc5+/
的内容,我得到:build kernel modules.alias modules.alias.bin modules.builtin modules.builtin.bin modules.builtin.modinfo modules.dep modules.dep.bin modules.devname modules.order modules.softdep modules.symbols modules.symbols.bin source
与 ls /usr/src/linux-headers-5.6.0-rc5+/
类似,我得到一个 include
文件夹。
从这些我怀疑 headers 不知何故坏了(?),但我不确定如何进行,要检查什么。如果可能的话,我想避免重建内核。
好像你使用了一些实验内核,比如 https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal
v32 mailine kernel 5.6.0-rc5 (experimental) Ubuntu 19.10 EOAN
它是为您的开发板定制编译的,如果您无法构建内核模块,则您或图像作者似乎没有将其完全安装到图像中。
(ls -l /lib/modules/5.6.0-rc5+/build
或 ls -l /lib/modules/$(uname -r)/build
可能有助于调试此问题。)
你可以试试:
- 联系图像作者以获取 kernel-headers 安装模块编译的提示; (他确实发布了 linux-image deb 文件,但没有在 https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal/releases/tag/v3.2 中发布 headers deb 文件)
- 切换到其他安装包更正确的内核版本;
- 或重新编译内核(如果图像作者有public 构建脚本)并正确安装。实际上,手动安装可能只是将
build
目录指向构建内核的目录。
他的https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal/releases/tag/v3.2-linux-image-5.6.0-rc5+_1.0-41.deb没有完全打包,build
只是他的符号链接未包含在发布的 deb 文件中的本地目录:
$ dpkg-deb -c ~/Downloads/linux-image-5.6.0-rc5+_1.0-41.deb |grep build
lrwxrwxrwx root/root 0 2020-03-10 02:10 ./usr/lib/modules/5.6.0-rc5+/build -> /arm/ubuntu/cubieboard2/linux-5.6.y
PS:你已经联系过他了:https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal/issues/34