IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 内核模块编译记录 -> 正文阅读

[开发工具]内核模块编译记录

1 基本的模块编译问题

obj-m+=hello.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

在vscode终端使用最简单的模块进行编译,发现既没有报错,也没有hello.ko文件产生。
在这里插入图片描述
可以看到M= modules,没有显示当前文件夹

echo $(PWD)

输出PWD环境变量显示PWD: command not found,即该环境变量不存在,故使用shell命令的形式

obj-m += hello.o

KDIR := /lib/modules/$(shell uname -r)/build  # 内核源代码路径
all:
	make -C $(KDIR) M=$(shell pwd) modules
clean:
	rm -f  *.ko  *.o   *.mod.o  *.mod.c  *.symvers

编译成功
在这里插入图片描述

后在ubuntu自带的终端编译,发现第一种方法也可以,代表只是vscode终端的问题。在vscode终端使用fish,发现也可以编译成功,证明只是vscode bash的问题。 还是用shell命令吧

pci_device_id以NULL结尾

static const struct pci_device_id xlinux_id_table[] = {{.vendor = 0x10ee,
                                                        .device = 0x7024,
                                                        .subvendor = PCI_ANY_ID,
                                                        .subdevice = PCI_ANY_ID,
                                                        0,
                                                        0},
                                                       {
                                                           0,
                                                       }};

pci_device_id赋值格式参照PCI_VDEVICE宏展开代码

struct pci_device_id {
	__u32 vendor, device;		/* Vendor and device ID or PCI_ANY_ID*/
	__u32 subvendor, subdevice;	/* Subsystem ID's or PCI_ANY_ID */
	__u32 class, class_mask;	/* (class,subclass,prog-if) triplet */
	kernel_ulong_t driver_data;	/* Data private to the driver */
};

#define PCI_VDEVICE(vend, dev) \
	.vendor = PCI_VENDOR_ID_##vend, .device = (dev), \
	.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0

内核加载时输出两条警告
在这里插入图片描述第一条表示为内核树外模块,不用管

modulename: loading out-of-tree module taints kernel
第二个数字签名问题,不知道有啥影响
在makefile中加入CONFIG_MODULE_SIG=n好像也没用
使用以下命令就没出现这个提示了
在这里插入图片描述

/home/hpc/Desktop/tmp/linux-4.19.150/scripts/sign-file sha512 /home/hpc/Desktop/tmp/linux-4.19.150/certs/signing_key.pem /home/hpc/Desktop/tmp/linux-4.19.150/certs/signing_key.x509 xlinux.ko
# 其中/home/hpc/Desktop/tmp/linux-4.19.150为源码地址
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:03:22  更:2022-04-18 18:06:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 15:01:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码