为 btrfs 文件系统包含 linux 内核 headers
include linux kernel headers for btrfs filesystem
在我的 linux 内核 driver 中,我需要将 struct inode 转换为 struct btrfs_inode.
为了做到这一点,我查看了 btrfs_getattr.
的实现
代码非常简单:
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/ctree.h"
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/btrfs_inode.h"
static dev_t get_device_id_btrfs(struct inode* inode){
if (inode != NULL) {
struct btrfs_inode *btrfsInode;
btrfsInode = BTRFS_I(inode);
if (btrfsInode != NULL && btrfsInode->root != NULL) {
return btrfsInode->root->anon_dev;
}
}
return 0;
}
为了编译,我必须在函数顶部添加 headers:
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/ctree.h"
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/btrfs_inode.h"
有什么问题吗?
我必须手动下载并包含 ctree.h 和 btrfs_inode.h,它们未在 kernel-headers 包中提供。
在我编译 driver 的每个平台上,我都有针对 distro/kernel 版本的特定 VM,因此在每个 VM 上我通常下载包 kernel-headers 并且一切都可以完美编译。
btrfs 是在上面的内核 3.0 中引入的。
btrfs headers 不应该在那里吗?
它们存在于另一个包中吗?也许 fs-headers 或类似的东西?
谢谢
我通过下载 kernel-sources 包解决了这个问题,然后修改了 makefile。
可能不推荐此解决方案,但我可以接受,因为我构建的内核 driver 仅适合我维护的某些 kernels/distros。
包括以下 headers:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
#include <fs/btrfs/ctree.h>
#include <fs/btrfs/btrfs_inode.h>
#endif
我修改了 Makefile EXTRA_CFLAGS 属性 "-I/lib/modules/$(KERNEL_HEADERS)/source" :
EXTRA_CFLAGS +=-D__Linux -std=gnu99 -I/lib/modules/$(KERNEL_HEADERS)/source
在我的 linux 内核 driver 中,我需要将 struct inode 转换为 struct btrfs_inode.
为了做到这一点,我查看了 btrfs_getattr.
代码非常简单:
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/ctree.h"
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/btrfs_inode.h"
static dev_t get_device_id_btrfs(struct inode* inode){
if (inode != NULL) {
struct btrfs_inode *btrfsInode;
btrfsInode = BTRFS_I(inode);
if (btrfsInode != NULL && btrfsInode->root != NULL) {
return btrfsInode->root->anon_dev;
}
}
return 0;
}
为了编译,我必须在函数顶部添加 headers:
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/ctree.h"
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/btrfs_inode.h"
有什么问题吗?
我必须手动下载并包含 ctree.h 和 btrfs_inode.h,它们未在 kernel-headers 包中提供。
在我编译 driver 的每个平台上,我都有针对 distro/kernel 版本的特定 VM,因此在每个 VM 上我通常下载包 kernel-headers 并且一切都可以完美编译。
btrfs 是在上面的内核 3.0 中引入的。
btrfs headers 不应该在那里吗?
它们存在于另一个包中吗?也许 fs-headers 或类似的东西?
谢谢
我通过下载 kernel-sources 包解决了这个问题,然后修改了 makefile。
可能不推荐此解决方案,但我可以接受,因为我构建的内核 driver 仅适合我维护的某些 kernels/distros。
包括以下 headers:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
#include <fs/btrfs/ctree.h>
#include <fs/btrfs/btrfs_inode.h>
#endif
我修改了 Makefile EXTRA_CFLAGS 属性 "-I/lib/modules/$(KERNEL_HEADERS)/source" :
EXTRA_CFLAGS +=-D__Linux -std=gnu99 -I/lib/modules/$(KERNEL_HEADERS)/source