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