カスタムノード/ dev/helloに文字デバイスとして登録するカーネルドライバ "hello_kernel"を作成しました。 hello_kernel.cファイルでは、register_chrdev()を呼び出した後、netlink_kernel_create()(netlink.hで定義)を使用してnetlinkソケットを作成しようとしました。netlinkソケットを使用してLinuxカーネルのユーザー空間アプリケーションと文字デバイス間で通信するときのエラー
コードが完全にコンパイルされ、mknodを使用してデバイスのノード/ dev/helloを作成しました。しかし、私はこのモジュール(hello_kernel.koを)にinsmodしようとすると、エラーがある:
insmodの:エラー挿入する「hello_kernel.ko」:-1ませ子どもが
を処理していないのdmesgコマンドがあったことを示していますソケットの作成中、つまりnetlink_kernel_create()でエラーが発生しました。
最初は、このモジュールを使用して、完全に機能するネットリンクソケットだけを使用しているユーザースペースアプリケーションに接続しようとしていました。キャラクタデバイス機能を追加する私の動機は、別のユーザアプリケーションが通常のデバイスファイルのようにそれを開き、ioctlコールを発行できるようにすることでした。
この作業を行うにはどうすればよいですか?あるいは、カーネルは両方の機能のマージをサポートしていませんか?
下記のコード:
モジュールを挿入しようとするとresult = register_chrdev(major_num, "hello", &hello_fops);
if(result < 0)
{
printk(KERN_INFO "Could not init hello_kernel");
return result;
}
result=netlink_kernel_create(&init_net, NETLINK_USER, 0, hello_nl_recv_msg,NULL,
THIS_MODULE);
if(!result)
{
unregister_chrdev(major_num, "memory");
printk(KERN_ALERT "Error creating socket.\n");
return -10;
}
ます。dmesgの
$sudo insmod hello_kernel.ko
insmod: error inserting 'hello_kernel.ko': -1 No child processes
出力:
[ 1537.809491] Error creating socket.
どのカーネルバージョンを使用していますか?私は実際には、古いカーネルバージョンであっても、どこにでもNETLINK_USERの定義を見つけることができません。 –