linux header 在 C 程序中包含失败

linux header include fails in C program

我是一名嵌入式开发人员,对 Linux 世界还很陌生。 我的任务是编写一个相当简单的 driver,我要理解 linux-kernel 模块的必要性。

我有一个简单的 c 文件,我正在尝试编译但还没有成功

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


void main (void)
{
    printf("Hi There ! \n");
}

我收到错误 init.hioport.h 找不到文件

linux-header 的兼容版本现在已使用 apt pm 安装在我的电脑上。

这些文件不在 usr/include/linux 中,但它们存储在 usr/src/linux-headers-5.4.19-91/include 中。

所以我尝试使用导出路径添加 usr/src/linux-headers-5.4.19-91/include 的路径 - 没用

尝试使用 usr/src/linux-headers-5.4.19-91/ 中的 makefile 希望接下来会安装它,但我得到 no rule to make target arch/x86/tools/relocs_32.c

现在我正在尝试使用以下代码将此路径包含到我的 CMake 文件中(我是 cmake 的菜鸟):

target_include_directories (driver PUBLIC usr/src/linux-headers-5.4.19-91/include)
target_include_directories (driver PUBLIC usr/src/linux-headers-5.4.19-91/include/config)
target_include_directories (driver PUBLIC usr/src/linux-headers-5.4.19-91)

再次生效。 我有什么办法可以包含不使用 Cmake 的文件,或者如果我必须包含它们怎么办?他们需要 make install 在图书馆里面吗?

编辑:感谢@KamilCuk 的回答让我走上了正确的轨道,我还发现了这个link,它为那些只想开始系统编程的人提供了一个很棒的教程。

https://sysplay.github.io/books/LinuxDrivers/book/Content/Part01.html

his path to my CMake file

Linux 内核开发是通过 Make 和一个小的 Makefile 脚本完成的。

不要使用 CMake。虽然可以将 CMake 与内核开发集成,但我认为这需要大量工作,如果您正在学习,绝对超出范围。

how can i include them ?

它们只是包含在内核 Makefile 脚本中。您可以阅读文档 https://www.kernel.org/doc/html/latest/kbuild/modules.html ,但真正开始所需的只是一个只有 3 行的简短 Makefile 文件。

创建一个只有 5 行的 Makefile 文件,如此处所示 Makefile for Linux kernel module?,然后键入 makechardev.o 将文件 chardev.c 与源匹配 - 如果您的文件名称不同,请更改它。

do they need to be make install inside the library it self ?

没有

in usr/include/linux but they are stored in usr/src/linux-headers-5.4.19-91/include .

有用户-space和内核-space。要编译用户 space 程序,使用 /usr/include/linux。编译内核模块 linux-headers 被使用。它们是无关的,不应混为一谈。

Linux内核不像在user-space中写普通程序。内核中没有main也没有printf