사용자 정의 노드/dev/hello에 문자 장치로 등록하는 커널 드라이버 "hello_kernel"을 작성했습니다. hello_kernel.c 파일에서 register_chrdev()를 호출 한 후 netlink_kernel_create() (netlink.h에 정의 됨)를 사용하여이 소켓을 통해 사용자 공간 메시지를 수신하기 위해 올바르게 정의 된 함수를 사용하여 netlink 소켓을 만들려고했습니다.netlink 소켓을 사용하여 Linux 커널에서 사용자 공간 응용 프로그램과 문자 장치간에 통신하는 동안 오류가 발생했습니다.
코드가 완벽하게 컴파일되었고 mknod를 사용하여 장치를 끄덕이/dev/hello로 만들었습니다.
insmod 명령 : 오류가 'hello_kernel.ko'를 삽입 :이 모듈 (hello_kernel.ko)를 insmod를 할 때하지만, 오류가 없음 아이가
을 처리하지 -1 dmesg를 명령은이 것을 보여줍니다 소켓 생성 중 오류, 즉 netlink_kernel_create().
처음에는이 모듈을 사용하여 완벽하게 작동하는 netlink 소켓만을 사용하는 사용자 공간 응용 프로그램과 연결하려고했습니다. 문자 장치 기능을 추가하려는 동기는 다른 사용자 응용 프로그램이 일반 장치 파일처럼 열어 ioctl 호출을 할 수있게하는 것이 었습니다.
이 작업을 수행하려면 어떻게해야합니까? 또는 커널이 두 기능의 병합을 지원하지 않습니까?
코드는 다음과 같다 : dmesg 명령의
$sudo insmod hello_kernel.ko
insmod: error inserting 'hello_kernel.ko': -1 No child processes
출력 :
[ 1537.809491] Error creating socket.
어떤 커널 버전을 사용하고 있습니까? NETLINK_USER의 정의는 이전 버전의 커널 버전에서도 찾을 수 없습니다. –