7.2.2 内核头文件
如果你需要在 开发板上编译内核模块或类似的代码,你需要安装 Linux 内核头文件。这些头文件包含Linux内核的各种常量定义、宏定义、函数接口定义和数据结构定义,是完成内核模块代码编译所必须的依赖代码。
安装
你可以通过以下命令安装内核头文件及内核编译依赖。
sudo apt update
sudo apt install linux-headers-6.1.112-rt43
sudo apt install bison flex
命令运行成功后,内核头文件会被安装到/usr/src
目录下
sunrise@ubuntu:~$ ls /usr/src/linux-headers-$(uname -r)
Documentation Makefile arch crypto include ipc mm samples sound virt
Kbuild Module.symvers block drivers init kernel net scripts tools
Kconfig System.map certs fs io_uring lib rust security usr
注意
请不要在/usr/src/linux-headers-$(uname -r)
目录下执行make clean
命令,这会将板端内核模块的编译环境破坏;
如果执行了make clean
动作,请重新安装linux-headers-6.1.112-rt43
包进行环境恢复。
使用示例
我们用一个简单的 Hello World
内核模块的开发介绍如果使用内核头文件。步骤概要如下:
- 准备程序代码,以编译路径为
sunrise
用户的${HOME}/test_ko
为例 - 编写Makefile,完成驱动模块的编译
- 对驱动模块进行签名
- 测试加载、卸载模块
- (可选)配置开机自动加载
编写Hello World内核模块
打开你熟悉的编辑器(比如VIM),创建文件 hello.c
,输入下面的内容:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("Simple Hello World kernel module");
static int __init hello_init(void)
{
printk(KERN_INFO "Hello, World! Kernel module loaded.\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_INFO "Goodbye, World! Kernel module unloaded.\n");
}
module_init(hello_init);
module_exit(hello_exit);
模块加载时打印Hello, World!
, 模块卸载时打印Goodbye, World!
。