mmap
최근에 나는 교육 목적 으로 사용될 맞춤형 Linux 커널에 새로운 플래그를 추가하려고 노력해 왔습니다 . 이 추가 기능을 사용하여 커널을 성공적으로 컴파일하고 설치했지만, 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
괜찮습니다. 헤더가 mmap
Linux 커널 시스템 호출이 아닌 Glibc 래퍼용이므로 플래그가 표시되지 않습니다. 더 많이 배울수록!