我只知道如何向Linux内核添加系统调用 . 我的系统调用(像许多其他系统调用一样)获取指向我创建的结构的指针 . 如果我想将结构添加到内核源代码我应该如何以及在何处添加它?
在 include/uapi/linux 中放置一个包含新 struct 的 Headers . 使用适当的类型避免命名空间污染,例如 __u16 而不是 unsigned short / uint16_t , __kernel_time_t 而不是 time_t ...等 . 查看struct mii_ioctl_data以获取示例 .
include/uapi/linux
struct
__u16
unsigned short
uint16_t
__kernel_time_t
time_t
通过向 include/uapi/linux/Kbuild 添加 header-y += new_header.h 条目,您可以使用make headers_install导出标头 .
include/uapi/linux/Kbuild
header-y += new_header.h
默认情况下,它会在 ./usr 中安装标头 . 如果您希望将它们安装为系统标头,请改用 make headers_install INSTALL_HDR_PATH=/usr . 这会导致 uapi 目录的内容合并到 /usr/include 中 . 然后,您可以在用户空间程序中使用 #include <linux/new_header.h> .
./usr
make headers_install INSTALL_HDR_PATH=/usr
uapi
/usr/include
#include <linux/new_header.h>
1 回答
在
include/uapi/linux
中放置一个包含新struct
的 Headers . 使用适当的类型避免命名空间污染,例如__u16
而不是unsigned short
/uint16_t
,__kernel_time_t
而不是time_t
...等 . 查看struct mii_ioctl_data以获取示例 .通过向
include/uapi/linux/Kbuild
添加header-y += new_header.h
条目,您可以使用make headers_install导出标头 .默认情况下,它会在
./usr
中安装标头 . 如果您希望将它们安装为系统标头,请改用make headers_install INSTALL_HDR_PATH=/usr
. 这会导致uapi
目录的内容合并到/usr/include
中 . 然后,您可以在用户空间程序中使用#include <linux/new_header.h>
.