最初のカーネルモジュール(Hello Worldモジュール)
コードは次のとおりです。コードの表示#include< linux /init.h>#include< linux /module.h> MODULE_LICENSE(" Dual BSD /GPL");); static __init int hello_init(void){//printk関数はモジュール用にカーネル内で定義されています。カーネルは独自に実行されるため、独自のprint stats //が必要です。対応するライブラリ関数はありません。 //insmodがロードされ、カーネルが呼び出し可能カーネルのパブリックシンボルにリンクされているため、//モジュールはprintkを呼び出すことができます//KERN_ALERTはメッセージprintkの優先順位です(KERN_ALERT" HELLO WORLD \\ n")return 0; static __exit void hello_exit(void){printk(KERN_ALERT" GoodBye \\ n");} module_init(hello_init); module_exit(hello_exit);
このモジュールでは2つの関数が定義されています。1つはモジュールにロードされます。モジュールがカーネルから削除されると、カーネル呼び出し(hello_init)とその他の呼び出し(hello_exit)、上記のコードのmodule_initとmodule_exitは、カーネルに開始位置と終了位置を指示する2つのカーネルマクロ定義、MODULE_LICENSEです。このマクロは、モジュールがフリーライセンスに準拠していることを宣言するために使用されます。そうでなければ、カーネルのロード時に警告が表示されます。さて、あなたはそれに応じて上記のプログラムをテストすることができますテストの前に対応するMakefileを書かなければなりませんモジュールのコンパイルは通常のプログラムのコンパイルとは異なります。
Makefile
コードは次のとおりです。コードを表示#こんにちは世界のmakefile#KERNELRELEASEは、カーネルのソースコードで定義されている最初の変数です。ifneq($(KERNELRELEASE)、)#変数が空かどうか(最初の実行時には定義されません) elseステートメントを実行obj-m:= HelloWorld.o#は、ディレクトリファイルHelloWorld.oから作成するモジュールがあることを示し、作成した後に、#HelloWorld.koという名前を付けます。ソースファイルは、file1.cとfile2.c#がobj-m:= module.o#module-objs:= file1.o file2.oのようになっていると仮定します。それ以外の場合KDIR:= /lib /modules /$(shell uname - r)/build all:#makeのターゲットがすべての場合、-C $(KDIR)はカーネルのソースディレクトリにジャンプしてMakefile #M = $(PWD)を読み取り、現在のディレクトリに戻って読み取りを続け、現在のMakefileを実行します。再度実行すると#$(KERNELRELEASE)が定義されているので、makeは他のものより先に読みます。 -C $(KDIR)M = $(PWD)モジュールをクリーンにします。rm -rf * .ko * .o * .mod.o * .mod.c * .symvers endif
対応する説明は上記のとおりです。 compiledコンパイルされたカーネルとして開く:スーパーユーザーである必要があります。現在のパスにmakeを入力し、カーネルをロードするためにinsmd HelloWorld.koと入力します。 Tailはカーネルの出力情報を見ることができます。 rmmod HelloWorldを使用してカーネルを削除し、dmesg
ファイルシステムに関しては、Linux&reg;はオペレーティングシステムの「Swiss Army Knife」と見なすことができます。 Linuxは、ジャーナル化されたファイルシステムからクラスタ化
LinuxでのIDEのデバイスはhdにちなんで名付けられています一般的に、マザーボード上に2つのIDEインターフェイスがあり、合計4つのIDEデバイスをインストールすることができます。プライマリIDE
実行中のプログラムはプロセスと呼ばれます。プログラムが実行可能ファイルとして実行可能ファイルに格納されて実行されている場合、各プロセスにはシステムリソース、メモリ、セキュリティ属性、およびそれに関連付
Kobject、ksetはデバイスモデルの基本構造ですが、デバイスモデルはこれら2つの構造を使用してデバイスの階層関係を完成させますが、実際のデバイスドライバの作成では基本的にkobject、ks
提供するサービスが原因Telnetサーバーに多くの場合、Linuxシステムの下で
Squid実行スクリプトの監視
#!/bin /shwhile sleep 30doSquidNum = `ps -ef
初心者アカデミー:WindowsドメインにLinuxを追加する方法
Linuxのグラフィカルインタフェースとテキストインタフェースの切り替え操作方法
Azure高可用性アーキテクチャ設計(LBおよびTraffic Manager)
VMware仮想マシンでLinuxのMACアドレスを変更する方法
Linuxシステムでの新しいハードディスクとパーティションフォーマットポイントの追加