体験!マイコンボードで組込みLinux

第14回 組込みLinuxでLCDを制御してみよう

この記事を読むのに必要な時間:およそ 3.5 分

デバイスドライバインターフェース

今回はデータ出力処理のみなので,デバイスドライバインターフェースはlcd_write関数を書き込み関数として登録するだけです(リスト1の103~106行目⁠⁠。

OSからデータ書き込みリクエストがあるとlcd_write関数が呼び出されます。リスト1の90行目で表示位置を先頭にし,データ数だけcopy_from_user関数でユーザー領域から特権領域へデータをコピーしてASCIIコードをLCDに送信します。表示能力は32文字なのでリスト1の96行目では32バイト分以下のASCIIコードをLCDに送信しています。

LCDの1行あたりの文字数は16文字なので16文字目でリスト1の95行目ではLCDでの改行処理をしています。ASCIIコードでスペースより小さいコードは制御コードなので,リスト1の94行目で制御コードを出力しないようにしています。

その他補足事項

最下位層であるLCD端子の個別制御はそれぞれ次の3つの関数で行っています。

CDのE端子の制御はリスト1の18~24行目で行なっています。

LCDのRS端子の制御はリスト1の27~33行目で行なっています。

4本のデータ端子の制御はリスト1の36~57行目で行なっています。

LCDの制御は汎用I/Oポートで行うので,初期化処理にはSH7706プロセッサで対象となる端子を汎用I/Oポートに設定する処理を,リスト1の111~112行目で行っています。また,今回は負電源回路へのパルス出力が必要なので,パルス出力処理が有効になるようにリスト1の113行目で処理を行なっています。

LCDデバイスドライバのコンパイルと実行

LCDデバイスドライバのコンパイルには,すでにコンパイル済みのカーネルソースコードが必要となります。コンパイル済みのカーネルソースコードは任意の場所でいいですが,コンパイルをするMakefileリスト2で -C オプションの後にコンパイル済のカーネルソースコードの場所を記述しなければなりません。

リスト2 Makefile


 1     TARGET:= lcd.ko
 2     
 3     all: ${TARGET}
 4     
 5     lcd.ko: lcd.c
 6             make ARCH=sh CROSS_COMPILE=sh3-linux- -C ../linux-2.6.28.10 M=`pwd` modules
 7     
 8     clean:
 9             make ARCH=sh CROSS_COMPILE=sh3-linux- -C ../linux-2.6.28.10 M=`pwd` clean
10     
11     obj-m:= lcd.o
12     
13     clean-files := *.o *.ko *.order *.mod.[co] *.markers *~

コンパイルは以下のように行います。

$ make
make ARCH=sh CROSS_COMPILE=sh3-linux- -C ../linux-2.6.28.10 M=`pwd` modules
make[1]: Entering directory `/home/general/linux-2.6.28.10'
  CC [M]  /home/general/lcd/lcd.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/general/lcd/lcd.mod.o
  LD [M]  /home/general/lcd/lcd.ko
make[1]: Leaving directory `/home/general/linux-2.6.28.10'
$

SH7706LSRボードでLCDデバイスドライバを組み込む場合は insmodコマンドで引数にLCDデバイスドライバを指定します。

比較的新しいLinuxカーネルの場合は自動でデバイスファイルを生成してくれますが,古いカーネルの場合はリスト3のようなスクリプトをデバイスドライバ組み込み後に実行をします。

リスト3 デバイスファイルを生成するシェルスクリプト


1 /bin/sh
2 
3 r item in `cat /proc/devices`;
4 
5 if [ $item = lcd ]; then
6   mknod /dev/lcd c $major 0
7 fi
8 major=$item
9 ne

次回は

次回はSH7706LSRボードでセルフコンパイル可能なSH3用のgccの移植について解説をします。

著者プロフィール

みついわゆきお

1986年日立製作所入所,その3年後に自社ワークステーションでの開発業務をきっかけにBSDを経てLinux利用を始める。

1991年日立を退社し,その後,ボランティアでLinux関連ツールの整備と開発しながらWindows否定運動およびLinux普及運動を開始し,Linuxディストリビューション草創期にはPlamoLinuxのメンテナンスにもかかわる。

2001年ごろより非営利ベースでボードコンピュータの開発を開始し,やがて,無償によりハードとソフトを開発したH8マイコンボードの販売を秋月電子にて開始した。

現在,ボードコンピュータ用基本ソフトMES2.5や,SHプロセッサ向けLinuxパッチおよびTOPPERS/JSPパッチを無償で一般に提供しながら,ティーエーシーやエムイーシステムより原価率100%を目標(ただし,販売店の営業・販売費用や開発・製造の際の差損を除く)としたSuperHボードコンピュータを販売中。

また,現在でも頑固にMS社否定及びWindows撲滅運動に邁進中。