arm-cov

  • Amazonで購入

Raspberry Piで学ぶARMデバイスドライバープログラミング

著者
米田聡  
定価
3,218円(本体価格 2,980円)
発売日
2014年9月20日
判型/ページ数
B5変型/312ページ
ISBN
978-4-88337-940-8
備考
-

本書は、Raspberry Pi をベースに、そこへ接続した各種デバイスのドライバーを作ろうという趣旨の書籍です。

本書で取り扱っているのはRaspberry Pi、つまりARM ベースのシステムでのデバイスドライバー開発ですが、基本的な考え方、方法は他のアーキテクチャでも変わりませんので、PC でLinux 用のデバイスドライバーを書きたいと思っている人の参考にもなるはずです。また、Raspbian というDebian 系のディストリビューションを使って解説をしていますが、これ以外のディストリビューションで開発しようという人でも参考になる情報は多いと思います。
 
 現在ではLinux におけるドライバーまわりの整備も進み、普通に売っているデバイスをこうしたシングルボードコンピューターに接続する程度でしたら、ドライバーを書く必要はあまりないのですが、それでも本書の中で触れているように、特別なことをしたい、あるいは特別なデバイスをつなげたい場合には、デバイスドライバーを書く必要に迫られることがあります。
 
 本書は、そうしたややニッチな、しかし、どうしてもドライバーを書かなくてはならなくなってしまった人向けに書かれています。このため、Raspberry Pi についてはもとより、デジタル回路やC プログラミングの知識はすでにお持ちだという前提で説明を進めていきます。

ジャンル

読者サポート

  • 正誤情報
  • ダウンロード

目次

もくじ
第1章 RasberryPiにデバイスをつなごう!
デバイスドライバーってなんだろう?
■カーネルとユーザーランド
 特権レベル
 仮想記憶(オンデマンドページング仮想記憶)
■Linuxのドライバーはカーネルの一部
 モノリシックカーネル
 カーネルモジュール開発とユーザープログラム開発の違い
■RaspberryPiはドライバー作成の教材に最適
 何度ハングアップしても(たいして)困らない
 ドライバーを作る意味がある
カーネルモジュールの作成環境を整える
■Raspbianを利用する
 カーネルのバージョンを最新に
 RaspberryPi上でツリーを作る利点と欠点
 PC上でツリーを作る利点と欠点
■カーネルビルドツリーの作成
 PC上に作成する
 RaspberryPi上でカーネルビルドツリーを作成する
RaspberryPiの3つのモデル
■4種類のRaspberryPi
■RaspberryPiModelBRev.2
■RaspberryPiModelB+
■RaspberryPiComputeMoudle

第2章 7セグLEDで作る初めてのデバイスドライバー
いまだに便利な7セグLED
■アノードコモンとカソードコモン
■LEDドライバーIC「74HC4511」を使おう
■RaspberryPiとの接続
まずはユーザーランドでGPIOの制御を習得
■GPIOFunctionSelectレジスタ
■GPIOPinSetレジスタ
■GPIOPinClearレジスタ
■GPIOPinLevelレジスタ
■GPIOPull-up/downレジスタ・GPIOPull-up/downClocレジスタ
■ユーザーランドでGPIOを制御するライブラリの作成
■GPIOを制御するライブラリ本体
 ユーザー仮想アドレス空間に物理アドレスをマッピングする
 GPIOファンクション設定
 GPIOプルアップ/プルダウンコントロール
 GPIOに対するリードライト
 ライブラリの作成
■7セグLEDを使ってみよう
 コラムioread系APIとiowrite系APIについて/
 コラムGPIOドライバーを通じたGPIOの制御方法/
初めてのカーネルモジュール〜7セグLEDドライバーを作る
■Linuxのデバイスドライバー〜カーネルモジュールの基本
 デバイスノードとは
 キャラクタ型とブロック型
 伝統を継承?
 カーネルモジュールの基本構造
■7セグLEDドライバーの作成
 ビルドディレクトリの用意
 定数、グローバル変数、関数定義
 キャラクタ型デバイスのレジストレーション
 物理メモリーアドレスのマッピング
 モジュールの初期化コード
 モジュールの終了処理
 open及びreleaseの実装
 writeのコールバック関数の実装
■ssegledモジュールをビルドして使ってみよう
 PC上でモジュール開発を行う場合
 Raspbianの場合
 ビルドしよう
 カーネルモジュールを使ってみよう
 module_param()を使って表示しているデータを参照できるようにする
 コラムprintk()によるデバッグメッセージ出力/
第3章 7セグLEDでタイマーを使ってみよう
7セグLEDのダイナミック駆動
■ダイナミック駆動とは
■ダイナミック駆動を行う回路を作ろう
 7セグLED4桁モジュール(アノードコモン)を使ってみよう
 点灯する桁を制御する
 カソード側の制御
 4桁表示の回路を作る
■ユーザープログラムで試してみよう
 ユーザープロセスによるダイナミック駆動の問題点
カーネルタイマーを使ってみよう
■カーネルタイマーの使い方
■カーネルタイマーでダイナミック駆動を試してみよう
 試してみよう……だが問題あり?
■高解像度タイマーを使おう
 高解像度タイマーの使い方
 高解像度タイマーを試してみよう
■ssegled4dを試してみよう
複数のマイナー番号を使いこなす
■複数のマイナー番号を使い分ける方法
 同期制御(spinlock)
■ドライバーを完成させよう

第4章 I2C接続のLCDを使ってみよう〜
I2Cクライアントドライバーの作成
I2C接続のデバイスを利用してみる
■I2Cとは
■I2Cを使ったデータのやり取り
 I2Cの電気的な仕様
 7bitアドレスモードでのデータのやり取り
 10bitアドレスモードでのデータのやり取り
■I2Cの通信速度
I2C接続のキャラクタLCDを使ってみよう
■I2CLCDの取り付け
 LinuxのI2Cドライバースタック
 I2CLCDの接続をチェックする
■I2CLCDをユーザーランドで使ってみよう
 I2CLCDの制御方法
 II2Cを制御するAPIの使い方
 キャラクタLCD制御用ヘッダファイル
■I2CLCDを制御するライブラリを作ろう
 ライブラリを使ってLCDに文字を表示しよう
I2CLCD用クライアントドライバーを作成しよう
■I2Cクライアントドライバーの基本的な構造
■I2CLCDドライバーを作成する〜probeとremoveの実装
 I2Cクライアントドライバーを使ってみよう
■i2c_lcdドライバーを完成させよう
 デバイスファイルの使い方
 i2c_lcdにデバイスファイルによる入出力を追加する
 完成したi2c_lcdドライバーを利用しよう
第5章 ADCドライバーを作ろう〜
SPIデバイスのデバイスドライバー
SPIとADC
■SPIとは
■SPI接続のADC「MCP3204」
■ADCをRaspberryPiに接続しよう
ユーザーランドでSPIとADCを使ってみよう
■SPIアダプタドライバーを有効にする
■/dev/spidevN.Nを介したSPIバスの使い方
 spidevのオープンとSPI動作モード設定
 SPIを用いたデータ転送
■SPIを利用するライブラリの製作
■MCP3204の使い方
 MCP3204を使ってみよう
■アナログ入力の保護について
MCP3204ドライバーの作成
■統一的フレームワークLinuxIIOについて
■SPIドライバーの基本形
■SPIバスのデータ転送を行うAPI
■mcp3204_probe()とmcp3204_remove()の実装
■AD変換値の取得〜mutexについて
■ユーザーランドから値を取得する
■MCP3204ドライバーを使ってみよう
 コラムそのほかのSPIバスの転送を行うAPI/
Appendix
カーネルAPI/構造体リファレンス
■キャラクタ型ドライバー関連
■タイマー関連
■I2C関連
■SPI関連
■その他
本書で使用したドライバーの全ソース
■Chapter2で使用したドライバーのソースコード
■Chapter3で使用したドライバーのソースコード
■Chapter4で使用したドライバーのソースコード
■Chapter5で使用したドライバーのソースコード

この書籍の購入

  • Amazonで購入する