埋め込みlinux下p...
3830 ワード
原文アドレス:埋め込みlinux下procファイルの読み書き
作者:skdkjxy
in Linux、procファイルシステムは仮想ファイルシステムであり、ユーザーとアプリケーションはprocファイルシステムを通じて現在のシステム情報を得ることができ、カーネルのパラメータを変更することができる./Procの下のファイルは特殊なファイルで、一般的なファイルのように削除を作成することはできません.次にprocファイルの作成、削除、および読み書きについて説明します.
1.ディレクトリの作成:
[c] view plain copy struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent);
2.procファイルの作成:
[c] view plain copy struct proc_dir_entry *create_proc_entry( const char *name, mode_t mode, struct proc_dir_entry *parent );
create_proc_entry関数は、一般的なprocファイルを作成するために使用されます.nameは「hello」などのファイル名で、modeはファイルモードで、parentは作成するprocファイルの親ディレクトリです(parent=NULLの場合は/procディレクトリの下に作成されます).
3.procファイル/ディレクトリを削除する
[c] view plain copy void remove_dir_entry(const char *name, struct proc_dir_entry *parent);
パラメータとproc_mkdir()関数類似
4.読み書き可能なprocファイルの作成
Procファイルは実際にはprocと呼ばれていますdir entryのstruct(proc_fs.hで定義)はint read_があるstructprocとint write_Procの2つの要素は、procのファイルの読み書きを実現するには、この2つの要素に値を割り当てます.しかし,ここでは単純に1つの整数を過去に代入すればよいのではなく,2つのコールバック関数を実現する必要がある.
ユーザーまたはアプリケーションがprocファイルにアクセスすると、この関数が呼び出され、この関数を実現するには、ユーザーに見せたい内容をpageに入れるだけです.
コールバック関数プロトタイプの書き込み:int mod_write( struct file *filp, const char __user *buff, unsigned long len, void *data );
ユーザまたはアプリケーションがprocファイルを書こうとすると、この関数が呼び出され、この関数を実現するにはユーザが書いたデータ(buffパラメータ)を受信する必要があります.
モジュールテストprocファイルの読み書きを書きます.
[c] view plain copy #include linux/module.h #include linux/kernel.h #include linux/proc_fs.h #include linux/sched.h #include asm/uaccess.h #define STRINGLEN 1024 char global_buffer[STRINGLEN]; struct proc_dir_entry *example_dir, *hello_file; int proc_read_hello(char *page, char **start, off_t off, int count, int *eof, void *data) { int len; len = sprintf(page, global_buffer);//global_をbufferの内容は訪問者 に表示される return len; } int proc_write_hello(struct file *file, const char *buffer, unsigned long count, void *data) { int len; if (count = STRINGLEN) len = STRINGLEN – 1; else len = count; copy_from_user(global_buffer, buffer, len); global_buffer[len] = ′; return len; } static int __init proc_test_init(void) { example_dir = proc_mkdir("proc_test", NULL); hello_file = create_proc_entry("hello", S_IRUGO, example_dir); strcpy(global_buffer, "hello"); hello_file->read_proc = proc_read_hello; hello_file->write_proc = proc_write_hello; return 0; } static void __exit proc_test_exit(void) { remove_proc_entry("hello", example_dir); remove_proc_entry(“proc_test”, NULL); } module_init(proc_test_init); module_exit(proc_test_exit);
procファイルへの書き込み
Procファイルの内容を読み込むと、私たちが書いた文字列が画面に表示されます:Hello from kernel
作者:skdkjxy
in Linux、procファイルシステムは仮想ファイルシステムであり、ユーザーとアプリケーションはprocファイルシステムを通じて現在のシステム情報を得ることができ、カーネルのパラメータを変更することができる./Procの下のファイルは特殊なファイルで、一般的なファイルのように削除を作成することはできません.次にprocファイルの作成、削除、および読み書きについて説明します.
1.ディレクトリの作成:
[c] view plain copy
2.procファイルの作成:
[c] view plain copy
create_proc_entry関数は、一般的なprocファイルを作成するために使用されます.nameは「hello」などのファイル名で、modeはファイルモードで、parentは作成するprocファイルの親ディレクトリです(parent=NULLの場合は/procディレクトリの下に作成されます).
3.procファイル/ディレクトリを削除する
[c] view plain copy
パラメータとproc_mkdir()関数類似
4.読み書き可能なprocファイルの作成
Procファイルは実際にはprocと呼ばれていますdir entryのstruct(proc_fs.hで定義)はint read_があるstructprocとint write_Procの2つの要素は、procのファイルの読み書きを実現するには、この2つの要素に値を割り当てます.しかし,ここでは単純に1つの整数を過去に代入すればよいのではなく,2つのコールバック関数を実現する必要がある.
ユーザーまたはアプリケーションがprocファイルにアクセスすると、この関数が呼び出され、この関数を実現するには、ユーザーに見せたい内容をpageに入れるだけです.
コールバック関数プロトタイプの書き込み:int mod_write( struct file *filp, const char __user *buff, unsigned long len, void *data );
ユーザまたはアプリケーションがprocファイルを書こうとすると、この関数が呼び出され、この関数を実現するにはユーザが書いたデータ(buffパラメータ)を受信する必要があります.
モジュールテストprocファイルの読み書きを書きます.
[c] view plain copy
procファイルへの書き込み
echo "Hello from kernel" /proc/proc_test/hello'
Procファイルの内容を読み込むと、私たちが書いた文字列が画面に表示されます:Hello from kernel
cat /proc/proc_test/hello