linux/skbuff.h에 접근할 수 없습니다

linux/skbuff.h에 접근할 수 없습니다

sk_buff변수에 액세스해야 하는 커널 모듈을 작성 중입니다 . 하지만 내가 글을 쓸 때

#include <linux/skbuff.h>

Netbeans에서는 헤더 파일을 찾을 수 없다고 말합니다.

답변1

/usr/include/linux커널 헤더를 설치하더라도 이 헤더는 의도적으로 설치되지 않습니다. 이는 이 헤더에 정의된 내용이 커널의 안정적인 ABI의 일부가 아니기 때문입니다. 커널 개발자는 두 버전 간에 이 헤더의 내용을 변경할 수 있으므로 드라이버가 링크할 커널 버전 헤더에 대해 특정 내용을 인용해야 합니다. .

2.6+ 커널의 경우 다음을 사용하여 올바른 동작을 얻는 것이 더 쉽습니다.표준 커널 드라이버 Makefile 솔루션Netbeans에 압력을 가하는 대신. 2.6+ 드라이버 빌드 시스템 제작많은Netbeans와 같은 "사용하기 쉬운" IDE에서 얻을 수 있는 것보다 더 많은 것을 제공합니다.

어쩌면 당신은 두 세계의 장점을 모두 얻을 수 있습니다. 일부 IDE에서는 이를 멋진 편집기로 사용할 수 있지만 건물을 외부 make도구에 위임할 수 있습니다.

Netbeans에서 모든 작업을 반드시 수행해야 한다면 2.4 및 이전 커널용 드라이버를 빌드할 때 했던 것처럼 수행할 수 있습니다. 기본적으로 커널 소스 코드 자체의 헤더 디렉토리를 참조하게 됩니다. GNU Makefile 용어로 말하면 다음과 같은 결과를 얻을 수 있습니다.

KERNPATH=/usr/src/kernels/$(shell uname -r)
CFLAGS=-I$(KERNPATH)/include

Netbeans에서 동일한 작업을 수행하는 것은 어렵거나 불가능할 수도 있습니다.

  1. uname -rNetbeans는 빌드 프로세스의 일부로 IDE에서 쉘 command()를 실행하고 해당 출력을 사용하여 나머지 빌드에 사용되는 변수를 대체하지 못할 수 있습니다 .

  2. 커널 소스 코드 경로는 Linux 배포판에 따라 다릅니다. Makefile을 사용하면 간단히 쉘 스크립트를 작성하여 이러한 로컬 세부 정보를 동적으로 검색할 수 있지만 Netbeans로는 이 작업을 수행할 수 있을지 의문입니다. 위 경로는 이 답변을 작성하는 동안 우연히 확인한 Red Hat 유형 시스템 중 하나에 대한 경로입니다. 그런 다음 Ubuntu 시스템을 확인하고 동일한 파일을 발견했습니다 /usr/src/linux-headers-$(uname -r)/include. 새로운 2.6 커널 드라이버 빌드 시스템이 개발될 때까지는 이에 대한 표준이 없습니다.

관련 정보