35

Linuxカーネルのデバイスドライバープログラミングを学びたいです。誰でも良いチュートリアルページやリンクをここに投稿してください。Linuxカーネル環境は初めてです。私はそれを検索しましたが、基本を簡単に理解するためにどのように開始し、どれを読むべきかわかりません。前もって感謝します。

4

7 に答える 7

51

現在のスキルによります。Linux を初めて使用する場合は、 Advanced Linux Programming使用したユーザー空間システム プログラミングから始める必要があります。この無料のリソースを使用すると、Unix システム コールや、シグナル、プロセス/スレッドなどのその他の概念について十分な知識を得ることができます。カーネルの役割は安全な方法でユーザーにサービスを提供することなので、カーネル側で開発している場合、これは必須です (ユーザー空間 API を理解する)。

それ以外の場合、よく引用される本の 1 つにLinux Device Drivers, Third Edition (LDD3) があります。この版は Linux 2.6.10 の時点で書かれており、それ以降いくつか変更されていることに注意してください。この記事では、2.6 が進化したときの違いを示します (2.6.31 まで、つまりあまり役に立ちません)。martinezjavier/ldd3に言及する必要があります。これには、最新のカーネル用に更新された LDD3 のサンプル ドライバーが含まれています (指摘してくれた42n4に感謝します)。

あまり引用されていないもう 1 つの興味深い本は、Essential Linux Device Driversです。これの無料版はありませんが、それでも興味深いアプローチが特徴です。これについて私が気に入っているのは、多くの異なるデバイス タイプをカバーし、2.6.24 の時点で最新であり、LDD よりも少し優れていることです。

最後に、カーネル自体 (ドライバー専用ではない) に関する優れた書籍として、Understanding the Linux Kernel, 3rd Editionがあります。これは、詳細なカーネル機能と内部メカニズムをカバーしています。2.6.11 の時点で最新です。

オンライン チュートリアルに関しては、 Pete のブログのこの投稿が非常に良い例であることがわかりました。キャラクター デバイス (最も簡単なカーネル ドライバー タイプ、つまり、最初に使用するタイプ) の作成方法を示すだけでなく、次のような最新の Linux カーネル機能を理解しやすい方法で使用します。

  • udevの使用
  • カーネルデータ構造 (FIFO) の使用
  • カーネル同期 (mutex) の使用
  • カスタム属性での Sysfs の使用
  • のモジュールオプションinsmod

さらに、Linux 3.0 を対象としているため、他のリソースに比べて最新です。

Sysfs エントリを手動で作成する方法に関するこの投稿も気に入るかもしれませんが、追加のノードや属性が必要ない場合は、Linux デバイス モデルがデバイスを Sysfs エントリとして登録します。

編集: 実際の Linux デバイス ドライバー プログラミングを学習する最善の方法は、実際のドライバーを調べることです。には何千ものドライバーがいdriversます。のような単純なものの概念を読んで理解し始めると、drivers/ledsこれがいかにやりがいがあるかがわかります。

于 2012-06-27T07:14:30.017 に答える
12

非常に重要なリンクがあるサイト: http://elinux.org/Device_drivers

実際の例を含む優れたチュートリアル (独自のファイル システムでフォーマットされた usbpen で終了 - 著者の他の記事を検索):

  1. http://www.linuxforu.com/tag/linux-device-drivers-series/
  2. http://sysplay.in/index.php?pagefile=lfy_articles

最新のカーネルに移植された有名な LDD3 書籍のソース コード: https://github.com/martinezjavier/ldd3/

ビデオ:

  1. https://www.youtube.com/playlist?list=PL16941B715F5507C5

多分他のコース:

  1. http://www.skilledup.com/courses?keyword=linux+kernel&price_filter=0..0

いくつかの例:

  1. http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
  2. http://www.freesoftwaremagazine.com/articles/drivers_linux
  3. http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
  4. http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/

本 (このスレッド LDD3 で言及されていないもの):

  1. http://www.coopj.com/と更新されたソース コードhttp://www.coopj.com/LPD/

カーネルハッキング: http://kernelnewbies.org/KernelHacking

Linux カーネルのビジュアル マップ: http://www.makelinux.net/kernel_map/

初心者向けの Linux およびカーネルの本:

  1. http://www.kroah.com/lkn/
  2. http://swift.siphos.be/linux_sea/
于 2014-03-14T14:09:55.123 に答える
2

新しくリリースされたLinux Driver Templatesに興味があるかもしれません。名前が示すように、テンプレートを提供し、頻繁に使用される Linux 機能を示して、すぐに使い始めることができます。

于 2012-11-13T20:09:45.390 に答える
2

返事が遅いのは承知しております!!

あなたはどんな本でも選ぶことができます、それらは上で提案された本当に素晴らしい本です.

しかし、あなたは実際に実際に働く必要があります。可能な限りカーネルに関与するようにしてください。

ほとんどの場合、カーネル ソース コード自体を調べる必要があります。

そして、カーネル ツリーの下の Documentation フォルダにある最も興味深いドキュメントです。

于 2013-04-02T04:16:20.967 に答える
1

最適な情報源は Linux のマニュアル ページですが、初心者にとって理解するのにやや重要です。デバイス ドライバを直接プログラミングするのは簡単なことではありません。次の本でポインタと構造を調べることをお勧めします

Basic C Books 1. Programming C - Byron gottfried 2. The C Programming Language - Dennis Ritchie

中級書 1. C に関する指針 Kenneth Reek 2. Expert C Programming Deep Secrets - Linden

デバイス ドライバーについて カーネル ソース ドキュメントを pdf 形式でアップロードしましたhttps://drive.google.com/folderview?id=0B7iRyndFhHldR3hjOHpOZTdKTjA&usp=sharingこのリンクからダウンロードできます。

デバイス ドライバーの基礎 (ユーザー モード プログラミング)

Linux プログラミング インターフェイス - Michael Kerrisk Linux プログラミング入門 Wrox Publishers デバイス ドライバー (カーネル開発) 1. Linux カーネル開発 - Robert Love 2. Linux カーネル内部 - m beck

デバイス ドライバー (ドライバー プログラミング) 1. Linux デバイス ドライバー - 第 3 版 (2.6 カーネルでは無料でダウンロードできます) 2. Essential Linux デバイス ドライバー - Venkateswaran

基本的なドライバーの知識については、このサイトに従ってください http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html

私の経験は、まず第一に、ドライバープログラミングを行う前に、Cプログラミング、主に構造体とポインターに関する十分な知識を得る必要があります。そうしないと、ドライバープログラミングを理解するのが少し面倒になります。

スタートアップに来ています:-

  1. ユーザー空間プログラミング gcc コマンドを使用してプロプロセス済み、アセンブラー、およびオブジェクト ファイルを生成する gcc の基本 さまざまなオブジェクト ツールを使用したオブジェクト ファイルの分析、Linux での基本的なプログラミング、スレッド (ロック、同期手法)、シグナル、プロセス (フォーク、実行)、タイマー (Posix) )。これは、カーネルの概念を理解するのに大いに役立ちます。

  2. カーネル プログラミング カーネル ソース ツリー、さまざまなブランチとその重要性を理解し、ctags と cscope を使用してカーネル ソース コードを参照すると、カーネル ソースの参照に役立ちます。

  3. ドライバ プログラミング まず、さまざまなドライバ クラス、char、ブロックなどを学びます。次に、デバイス プロトコル、送信と受信を学びます。製品マニュアルは、これを行うための最良の情報源です。次に、RTC (ポート マップ デバイス)、IOAPIC (メモリ マップ デバイス) などの単純な char ドライバーの作成を開始し、USB、PCI、ネットワーク、I2C、SPI などに移動します。ヘルプが必要な場合は、スケルトンを見つけることができます。これらすべてのコードをカーネル ソース ツリーに記述します。

于 2014-10-05T15:11:41.213 に答える
1

デバイスドライバプログラミングを学ぶのに最適な本は
「LDD」です

于 2012-06-29T09:48:47.990 に答える