タイトル
私はどのようにしてLinuxカーネルを学んだか Device Tree編 ゆたかさんの技術書
著者名
平田豊,MBビジネス研究班
発売日
電子書籍:2020/11/27
紙書籍(POD):2020/12/3
ダウンロード
私はどのようにしてLinuxカーネルを学んだか Device Tree編のファイルはこちらからダウンロードいただけます。
DeviceTree
概要
【書籍説明】
組み込みエンジニアとして組み込みLinux開発を行うにあたって、Device Tree(デバイスツリー)というしくみがよく分からなくて困っているのではないでしょうか?
本書では組み込みLinux開発において必須知識となっているDevice Treeについて、じっくりと基本的なところから学ぶことができます。
Device Treeをまったく知らないエンジニアのために、デバイスドライバの基礎のおさらいを行い、Device Treeを基本から学べるようにお話を進めていきます。
Device Treeを知れば、組み込みLinux開発における必修科目は無事に履修完了です。そして、デバイスドライバの理解もより深まり、技術者としてのスキルもパワーアップです。
筆者も日々エンジニアとして学びの毎日であり、人生勉強です。筆者といっしょに新しい知識を学んでいただけたら幸いです。
なお、本書に登場するLinuxカーネルのソースコードは、カーネルバージョン5.6系をベースとしたラズパイ(Raspberry Pi)向けのものを採用しています。
LinuxディストリビューションはUbuntu 20.04 LTSを使用しています。
【著者紹介】
平田豊(ヒラタユタカ)
1976年兵庫県生まれ。石川県金沢在住。執筆活動歴は20年以上で、著書は23冊。
神戸大学工学部情報知能工学科を卒業後、日本電気株式会社に入社。
20年勤務して自主退職後、フリーランス(個人事業主)として独立起業。
YOULAB(ユウラボ)代表。
事業内容は組み込みソフトウェア開発、市販書籍執筆、市販書籍の企画および編集。
【目次】
第1章 開発環境とカーネルバージョン
1.1 カーネルバージョンと組み込み界隈の事情
1.2 組み込みLinuxのアーキテクチャ
1.3 開発環境の検討と構築
1.4 組み込み機器の検討と選定
1.5 組み込みLinuxの動作検証方法
1.6 サンプルデータのダウンロードサービス
第2章 開発環境の構築
2.1 Linuxディストリビューション
2.2 QEMUの導入
2.3 クロスコンパイラの導入
2.4 クロスコンパイラの動作確認
2.5 Linuxカーネルのビルド
第3章 QEMU向けLinuxカーネルの構築
3.1 実機とエミュレータは異なる
3.2 ARM Versatileを使う
3.3 カーネルへのパッチ適用
3.4 カーネルコンフィグレーション
3.4.1 General setup
3.4.2 System Type
3.4.3 Enable loadable module support
3.4.4 Device Drivers
3.4.5 File systems
3.4.6 Library routines
3.4.7 カーネルコンフィグレーションの終了
3.5 カーネルのビルド
3.6 QEMUからのカーネル起動
第4章 デバイスドライバの基礎
4.1 デバイスドライバとはなにか
4.2 デバイスドライバのソースコード
4.3 ユーザー空間とカーネル空間
4.4 デバイスドライバのビルドと実行
4.5 空間の違いを体験する
4.6 ハードウェアの制御方法
4.7 I/Oアクセス
4.7.1 メモリマップドI/O
4.7.2 I/Oポート
4.8 割り込み
4.9 ARMアーキテクチャのケース
4.9.1 メモリマップドI/O
4.9.2 I/Oポート
4.9.3 割り込み
第5章 Device Treeの基礎
5.1 ハードウェアの情報管理
5.2 ハードウェアの改修対応
5.3 改修対応がよくないケース
5.4 Linuxカーネルでの問題点
5.5 Device Treeのしくみ
5.6 DTBの作り方
5.7 DTBの格納方法
5.8 x86でDevice Treeを使わない理由
5.9 ソフトウェア更新の課題
5.10 DTSの基本
第6章 Device Treeの詳細
6.1 ブートローダーからの受け渡し方法
6.2 ATAGS
6.2.1 ATAGSのパラメーター一覧
6.2.2 ATAGSのフォーマット
6.2.3 ATAGSのチェック
6.3 Device Treeの渡し方
6.4 Device Treeの起動時チェック
6.5 Device Treeのマッチング
6.6 Device Treeの訂正
6.7 Device Treeのノード検索
6.8 Device Treeの初期参照
6.8.1 __atags_pointer
6.8.2 initial_boot_params
6.9 Device Treeの展開
6.10 Linux上での見え方
第7章 カーネルコンフィグレーション
7.1 ARMアーキテクチャ固有の設定
7.2 汎用的な設定
第8章 DTBへのアクセス処理
8.1 of_fdt.hヘッダ
8.2 memory.hヘッダ
8.3 libfdt.hヘッダ
第9章 デバイスドライバからのアクセス
9.1 デバイスドライバの書き方
9.2 of_rootを使ったアクセス
9.3 プラットフォームデバイスとドライバ
9.4 Device Treeへの対応
9.4.1 platform deviceの作り方
9.4.2 platform driverの作り方
9.5 platform driver以外のデバイスドライバ
9.6 Versatileのplatform deviceとplatform driver
9.7 Device Treeからの情報取得の実例
9.7.1 ネットワークと割り込み
9.7.2 シリアルコンソールとearlycon
9.8 関数リファレンス
第10章 オーバーレイとDynamic Device Tree
10.1 オーバーレイ
10.1.1 カーネルコンフィグレーション
10.1.2 オーバーレイ用Device Tree
10.1.3 オーバーレイの追加と削除を行うカーネル関数
10.1.4 DTBをアセンブラソースで取り込む
10.1.5 ConfigFSでDTBを送り込む
10.1.6 platform driverの作り方
10.2 Dynamic Device Tree
10.2.1 使用例
10.2.2 使用可能な関数
10.2.3 デバイスドライバのサンプル
【索引】
索引名 | ページ数 |
#address-cells | 295 |
#include | 224 |
#size-cells | 295 |
%pS | 364 |
.config | 72 |
a.out | 46 |
ACPI | 209 |
ACPIテーブル | 210 |
AMBA | 353 |
AML | 210 |
ARM | 11 |
ARM Versatile/PB | 63 |
arm-linux-gnueabihf-gcc | 43 |
ARMアーキテクチャ | 11 |
ASL | 210 |
ATAGS | 229, 249 |
B | 237 |
BAR | 140 |
BIOS | 127 |
BL | 237 |
BLOB | 196 |
BNE | 265 |
clang | 12 |
compatible | 220, 284 |
ConfigFS | 422 |
CTRL+ALT+Gキー | 37 |
Device Tree | 11, 193, 271 |
DT | 196 |
DTB | 196 |
DTC | 202 |
dtcコマンド | 221 |
DTS | 202 |
Dynamic Device Tree | 413, 425 |
earlycon | 376 |
ext4 | 28 |
fdiskコマンド | 28 |
fdt | 274 |
FIFO | 380 |
fileコマンド | 46 |
FIQ | 171 |
gcc | 12 |
GitHub | 16 |
gitリポジトリ | 42 |
I/O | 122 |
I/Oポート | 145 |
if文の嵐 | 190, 192 |
IRQ | 155 |
Kconfig | 68 |
lddコマンド | 49 |
LDM | 241 |
LDR | 265 |
Linuxカーネル | 7 |
Linuxディストリビューション | 11 |
losetupコマンド | 29 |
LR | 232 |
magicフィールド | 201 |
MMIO | 124 |
modinfoコマンド | 33, 104 |
module_driverマクロ | 331 |
mountコマンド | 29 |
mrproper | 51 |
netstatコマンド | 24 |
of_match_table | 356 |
of_node | 357 |
of_root | 332 |
of_root変数 | 304 |
Oops | 119 |
Open Firmware | 272 |
panic_on_oops | 119 |
PC | 177, 232 |
phandle | 369 |
platform device | 335 |
platform driver | 335 |
QEMU | 18, 27 |
Raspberry Pi | 16 |
raspi-configコマンド | 37 |
regプロパティ | 295 |
resource構造体 | 358 |
SoC | 53 |
sshpass | 48 |
ssコマンド | 26 |
STM | 241 |
sudo | 25 |
TST | 265 |
UART | 374 |
u-boot | 31, 204, 229 |
Ubuntu | 11 |
vic | 373 |
WARNマクロ | 372 |
WDT | 121 |
x86 | 10 |
x86_64 | 10 |
zImage | 235, 310 |
アセンブラのコード | 221 |
エラッタ | 199 |
エンディアン | 273 |
エントリポイント | 230 |
オーバーレイ | 412 |
オンラインアップデート | 215 |
オンラインファームウェアアップデート | 215 |
カーネル・スタートアップ・エントリポイント | 240 |
カーネル空間 | 94 |
カーネルコンフィグレーション | 72 |
カーネルパニック | 119 |
カーネルモジュール | 33 |
開発効率 | 191 |
仮想メモリ | 94 |
機器の故障 | 188 |
木構造 | 219 |
クロスコンパイラ | 13 |
コメント | 219 |
再帰呼び出し | 353 |
条件実行機能 | 266 |
シリアルコンソール | 376 |
スプリアス割り込み | 156 |
静的リンク形式 | 100 |
セルフコンパイラ | 13 |
ソフトウェアビジビリティ | 183 |
ダイナミックリンカーローダー | 49 |
チェックサム | 280 |
デバイスツリー | 193, 219 |
デバイスドライバ | 88 |
動的リンク形式 | 100 |
ノード | 289 |
ハードウェアリビジョン | 185 |
パワーオンリセット | 31 |
ビッグエンディアン | 302 |
ブートローダー | 204 |
プリプロセス機能 | 185 |
プリプロセッサ | 224 |
プログラムカウンタ | 232 |
プロパティ | 220 |
プロプライエタリ | 31, 205 |
ベースアドレス | 179 |
ベクタテーブル | 172 |
ポート番号 | 179 |
保守のコスト | 191 |
メモリマッピング | 182 |
メモリマップドI/O | 124 |
ユーザー空間 | 94 |
ユニットアドレス | 291 |
呼び出し規約 | 231 |
ラズパイ | 16 |
リンカースクリプト | 173 |
ルートファイルシステム | 27 |
例外 | 171 |
ワークアラウンド | 199 |
割り込み | 123 |
割り込み番号 | 154, 179 |
割り込み要因 | 138 |
*上記索引のページ数は電子書籍版のページとなります。
POD(紙書籍版)も内容は同じですがページ数は異なります。
電子版もPOD版も巻末には作品がありますので、そちらも併せてご利用ください。