2017-01-24 12 views
0

私は自分のLinuxカーネルモジュールとやりとりするユーザ空間プログラムを開発しています。これを実現する方法の1つは、netlinkソケットを使用することです。しかし、netlinkソケットは、カーネルとのやりとりのために 'ls'のようなシェルコマンドでは使用されません。ユーザ空間とLinuxカーネルモジュールとの対話

さまざまなシェルコマンドはどのようにカーネルと対話しますか?私はlsコマンド(ls.c)のコードをブラウズしようとしましたが、これを理解することはできませんでした。

+0

'libc'、' glibc'および "システムコールを" 右方向にあなたを指すのに十分であるべきです。 – twalberg

+0

少し具体的にお願いしますか? – user2522685

+0

あなたの通信に最適なABIを選択する必要があります。そこにある:デバイスノードの上にIOCTL、sysfsファイルノード、netlink、システムコール。最も一般的で簡単なのはsysfsです。あなたは小さな環境の中で使うことができます。しかし、上記のそれぞれに長所と短所があります。 – 0andriy

答えて

1

@Ondriyと@twalbergはすでに答えを与えていると思います。しかし、まだ私はいくつかの説明を追加しています。

カーネル空間とやりとりできる方法はさまざまです。

Syscall: Linuxカーネルでは、各システムコールには一意のシステムコール番号が割り当てられます。 - > __NR_open、close()- > __NR_exit、read()- > __NR_read。

IOCTL:既に定義済みのictl番号がカーネルにあります。したがって、これらの番号を使用することで、カーネル空間と対話できます。例えばioctl(/ dev/i2c-0、I2C_SMBUS、address);

Netlinkソケット: netlinkソケットを使用すると、メッセージをカーネルスペースからユーザースペースに渡すことができます。例えば、socket()、bind()、sendmsg()などである。

sysfs/procfs: sysfsとproc fsを使用してカーネルと通信することができます。 (/ sys/*フォルダを見てください)。

しかし、のlsコマンドの場合は、次のリンクをクリックしてください。

How does the 'ls' command work in Linux/Unix?

関連する問題