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.h
和 ioport.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?,然后键入 make
。 chardev.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
。
我是一名嵌入式开发人员,对 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.h
和 ioport.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?,然后键入 make
。 chardev.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
。