向自定义 Linux 内核添加新标志

向自定义 Linux 内核添加新标志

最近,我一直在尝试向自定义 Linux 内核添加一个新标志,该标志将用于mmap教育目的。我已经成功编译并安装了带有此添加的内核,但当我尝试使用make它测试程序时,该标志似乎不可见:

#include <iostream>
#include <sys/mman.h>

#define ARR_SIZE 1000000000
 
int main()
{
    long* arr = (long*)mmap(
        NULL,
        ARR_SIZE * sizeof(long),
        PROT_READ | PROT_WRITE,
        MAP_PRIVATE | MAP_ANONYMOUS | MAP_COLOR2, /*ERROR: 'MAP_COLOR2' was not declared in this scope*/
        -1,
        0
     );
 
     if (arr == MAP_FAILED) {
         std::cout << "Failed to mmap..." << std::endl;
     } else {
         for (size_t i = 0; i < ARR_SIZE; ++i) {
             arr[i] = 1;
         }
     }
 
     return 0;
}

就在那时,我注意到其中的一些头文件usr/include/linux没有我所做的更改,所以我:

  1. make headers_install在我的自定义内核的源目录的顶部运行(没有变化)
  2. 关注了这些指示它成功更新了头文件,usr/include/linux但仍然导致相同的错误。

然后我发现sys/mman.h住在下面usr/include/x86_64-linux-gnu并且似乎从下面的文件中获取了它的宏/标志定义usr/include/x86_64-linux-gnu/bits/(其中不包含我的标志)。除了手动将我的标志添加到这些文件中之外,什么是正确的方法来使我对内核的更改也在这里可见?usr/include/x86_64-linux-gnu和下的文件之间有什么关系usr/include/linux

非常感谢任何和所有的帮助!

答案1

没关系,该标志没有显示,因为标头用于 Glibc 包装器,mmap而不是 Linux 内核系统调用。你学得越多!

相关内容