Linuxキャラクタ型デバイスドライバの3つの重要なデータ構造は、次のとおりです。
structファイル
struct inode
strude file_operations
ここで、structファイルは、開いているファイルstruct inodeは、ファイルの物理情報を記録するために使用されます。
strude file_operationsは関数ポインタの集まりです以下はGPIOドライバとアプリケーションの例の説明です:
最初の部分はドライバです:
//------------------- OPEN ------------------------ ssize_t SIMPLE_GPIO_open(struct) iノード* inode、ファイル* file){#ifdef OURS_GPIO_DEBUG printk(" SIMPLE_GPIO_open [--kernel - ] \\ n"); #endif return 0;}
//------ ------------- RELEASE /CLOSE --------------- ssize_t SIMPLE_GPIO_release(inode * inode、struct file * file){#ifdef OURS_GPIO_DEBUG printk( " SIMPLE_GPIO_release [--kernel - ] \\ n"); #endif
return 0;}
//--------------- ---------------------------------- struct file_operations gpio_fops = {
.open = SIMPLE_GPIO_open、 .read = SIMPLE_GPIO_read、.write = SIMPLE_GPIO_write、.ioctl = SIMPLE_GPIO_ioctl、.release = SIMPLE_GPIO_release、};
gpio_fopsでstruct file_operationsとして定義されています。 = SIMPLE_GPIO_openは、実際にSIMPLE_GPIO_open関数を呼び出すためのアプリケーションのopen関数を定義します。
ドライバで定義されているssize_tを参照してください。SIMPLE_GPIO_open(struct inode * inode、struct file * file)
2つのデータ構造はここでは無視されます。 (パラメータなどを書き込まないでください)
アプリケーションで呼び出しを確認します。
#define DEVICE_NAME" /dev /gpio>
int main(void){int fd; int ret; char * i;
printf(" \\ n開始gpio_led_driver test \\ n \\ n");
fd = open(DEVICE_NAME、O_RDWR); printf(" fd = %d \\ n"、fd);
if(fd == -1){printf("オープンデバイス%sエラー\\ n"; DEVICE_NAME);}
アプリケーション呼び出しのopen関数の引数がopen(DEVICE_NAME、O_RDWR);
ここで#define DEVICE_NAME" /dev /gpio"、O_RDWRとは、開いて書き込むことを意味します。
ドライバでは、xxxopen関数は本に従って書くことができます、パラメータは完全に無視することができます(関数本体は内容を書くことができます、私は何をすべきかわかりません)
アプリケーションのopen関数パラメータLinuxアプリケーション本に書かれているパラメータによると、
をインストールするよう求められるわけではありません。Linuxをインストールするのは初心者にとってはちょっと怖いです。著者はかつてインターネット上のチュートリアルに従ってそれを数回インストールしました
方法は次のとおりです。 1. .htaccessファイルを使用する必要があるディレクトリ(新しいDiscuzフォーラムディレクトリなど)に新しい.htaccessファイルを作成します。 Vim
を使用しています Ext2FsdはLinuxパーティションの読み書きに適したツールです。このソフトウェアは「Windows環境でのLinuxパーティションツールの読み書き」で紹介されています。プラット
なぜプロセス優先権があるのでしょうか。 マルチタスクオペレーティングシステムが誕生したので、結局のところ、cpuを処理するプロセスの能力は人為的に制御しなければならない問題です。いくつかのプロセスは