最近,我一直在尝试向自定义 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
没有我所做的更改,所以我:
make headers_install
在我的自定义内核的源目录的顶部运行(没有变化)- 关注了这些指示它成功更新了头文件,
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 内核系统调用。你学得越多!