最も簡単なLinuxのドライブのHelloWorld

環境:Ubuntuの16.04

カーネルのランタイムプラグアンドプレイでHelloWorldのモジュールは、いつでも削除することができます。

1、カーネルのソースコードライブラリを構築します

ビューは、オペレーティングシステムのリリース番号が表示されます。

uname -r:表示され、オペレーティング・システムのリリース番号
はuname -a:ディスプレイシステム名、ノード名、オペレーティングシステムのリリース番号、カーネルバージョン、など

カーネルのソースコードの対応バージョンをダウンロードしてください:

須藤はapt-getをインストールLinuxのソース-4.15.0

 

次のようにダウンロードが完了したら:

 

コードを解凍します。

タールjxvfのlinux-ソース2.6.20.tar.bz2 

 

 Linuxのソース-4.15.0カーネル設定を入力し、最速の元の設定を選択

oldconfig作ります

 

 あなたは、ルートディレクトリの実行に切り替える必要があり

 

 デ・イメージ、bzImageコンパイルダウン

イメージ、bzImageを作ります

时イメージ、bzImageを作る报错スクリプト/サインFILE.C:23:30:致命的なエラー:opensslの/ opensslv.h:そのようなファイルまたはディレクトリ

須藤のlibssl-devのインストールapt-getを

 次

メイク・モジュール

このプロセスは、2時間程度の長い時間であります

次回の実行

メイクmodules_install

中/ libに/モジュール/ 4.15.0-45、一般的なコンパイルされたモジュールのファイルが表示されます実行する場合、このパスを構築するためにディレクトリを使用します。

図2に示すように、ライトドライバコード

書式#include <Linuxの/ init.h> 
の#include <Linuxの/ module.h> 
//、モジュールは、オープンソースライセンスの持つカーネルを伝える
MODULE_LICENSE( "デュアルBSD / GPL"); 

静的なint型hello_init(無効)
{ 
    のprintk(KERN_EMERG「負荷を\ N-世界こんにちは"); 
    戻り0; 
} 

静的ボイドhello_exit(ボイド)
{ 
    のprintk(KERN_EMERG" RmmoveのHello World \ N- "); 
} 

module_init(hello_init); 
module_exit(hello_exit)。

コードが表す:カーネルモジュールがhello_init実行される負荷は、モジュールを取り外しhello_exitで呼び出すことです。

私はprintfのを使用することはできませんので、カーネルは、C言語のライブラリコードを使用することはできませんので、カーネルのprintk印刷機能。

Makefileを書きます

OBJ-M:= hello.o 
KERNELDIR:= / LIB /モジュール/ $(シェルのuname -r)/ビルド
PWD:= $(シェルPWD)
モジュール:
	$(MAKE)-C $(KERNELDIR)M = $(PWD )モジュール

そして、コンパイルするメイクを行います

 

 次のように実行した後の結果は以下のとおりです。

 

必要なのはhello.koファイルです

insmodのhello.ko

ロードモジュールをinsmodの

rmmodはhello.ko

rmmodは削除モジュール

 

ロード・モジュールでのHello Worldをロード可視モジュールのプリントが印刷RmmoveのHello Worldで除去されます。

 

おすすめ

転載: www.cnblogs.com/achao123456/p/11924668.html