投稿

ラベル(Kernel)が付いた投稿を表示しています

RaspberryPiのデバイスドライバ(第1歩)

イメージ
以前、 RaspberryPi のGPIOレジスタを直接叩いてLEDを点灯 させてみましたが、ルート権限で実行させる必要があります。 そこで、まずはデバイスドライバのロード&アンロードを確認するだけのプログラムを試してみました。 ◆ VM上のEclipse を起動します。 ◆Eclipseが自動生成するMakefileでのビルドにチャレンジしましたがエラーが解決できなかった為、手入力したMakefileでビルドするように構成します。 Cプロジェクトの新規作成にて、Makefileプロジェクトの空のプロジェクト、他のツールチェインを選択します。 インクルードパスに Raspbian(Linux)のソース ツリーにあるIncludeディレクトリを追加 ※ビルドには無関係ですが、ソースコードの定義チェックなどが機能してくれるので定義しておきましょう。 ◆正常にビルド完了しました。 このEclipse(Ver3.8)では、printk()やmodule_init()、module_exit()でソースコードの構文解析でエラーがでてしまいますが、ビルドには支障はないようです。 ◆RaspberryPi上で動作確認します。 SCPで、main.koをRaspberryPiに転送。 SSHで、RaspberryPiにリモート接続。 insmodでmain.koをロードします。(特権ユーザーで) lsmodで、mainが正常にロードされた事が確認できました。 rmmodで、アンロード。 最後にdmesgで、ロード、アンロード時にKERN_ALARTに出力した文字列が残っているかチェックし、無事に実行された事が確認できました。 ---------------------------------- main.c #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> MODULE_DESCRIPTION("Hello driver"); MODULE_AUTHOR("777gunslinger"); MODUL...

Raspberry Pi のカーネルRaspbian再構築(ビルド後編)

◆ eLinuxのWiKiに記述されている手順 の続きです。 10.環境変数設定 $export MODULES_TEMP=~/raspi/modules/ 11.ビルドされたモジュールを MODULES_TEMP にコピーします。 $ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP} make modules_install 12.カーネルイメージを作成します。 $cd ~/raspi/tools/mkimage $./imagetool-uncompressed.py ${KERNEL_SRC}/arch/arm/boot/zImage 寄り道) Debianのインストールからお付き合い頂いている方は、 「 /usr/bin/env: python2: そのようなファイルやディレクトリはありません」 と文句を言われたと思います。 スクリプトファイルの頭を見てみますと、 $head imagetool-uncompressed.py −>「#!/usr/bin/env python2」と記述されています。 python2を探します。 $which python2  −> 見つかりません。 $which python  −> /usr/bin/python が見つかりました。 バージョンを確認してみます。 $python -V  −> Python 2.6.6 と返ってきましたので、/usr/bin/pythonを使えば良さそうです。 imagetool-uncompressed.pyの先頭行を「#!/usr/bin/env python」と書き換えても良いですが、python2 で python が呼ばれる様にリンクを張りました。 $sudo ln -s /usr/bin/python /usr/local/bin/python2 $./imagetool-uncompressed.py ${KERNEL_SRC}/arch/arm/boot/zImage  −> 今度はスクリプトが実行されて、kernel.img が作成されるはずです。 13.RaspberryPiに新しいカーネルイメージをコピーします。...

Raspberry Pi のカーネルRaspbian再構築(ビルド前編)

◆無事にDebianが起動したら、追加のセットアップをしておきます。 1)sudoを有効にする。 rootに入ったり出たりするのは(精神衛生的に)良く無いので、sudoで管理者コマンドを実行できるようにしておきましょう。 rootにログインした後、visudoコマンドでsudoresファイルに自分のユーザーアカウントを記述しておきます。 2)Debian を最新にしておく。 $sudo aptitude update $sudo aptitude upgrade 3)emacsをインストール(お好みで) テキストファイルやソースコードをイジったり。20年以上使ってますが最強でしょ!? $sudo aptitude install emacs ◆カーネルのビルド ググってみると色々出てきますが、私は純正と思われる eLinuxのWiKiに記述されている手順 を参考しました。 1)手順通りに進める為に必要となったものをインストールします。 $sudo aptitude install git gcc make libncurses5-dev 2)適当なディレトリを作成しておきます。 $mkdir raspi $cd raspi 以下WiKiの手順番号毎に記述します。 1.Raspbianのソースを頂きます。 $git clone git://github.com/raspberrypi/linux.git 2.環境変数設定 $export KERNEL_SRC=~/raspi/linux 3.クロスコンパイラを頂きます。 $git clone git://github.com/rspberrypi/tools.git 4.環境変数設定 $export CCPREFIX=~/raspi/tools/ arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi- 5.カーネルのコンフィグレーションを初期化 $cd linux $make mrproper 6.RaspberryPiから.configを持ってきます。 まだ、RaspberryPiでsshサーバーを走らせていない方は コチラ をご参考に。 ...

USBブートDebian(For Raspberry Pi)

イメージ
RaspberryPi上でカーネルを再構築しようとすると、コンパイルに4~5時間は掛かるそうですので、PCを使ってクロス環境を構築してみた。 RaspberryPi(ARM)のクロスコンパイラをググってみるとUbuntu上で走らせている人が多いようですが、RaspberryPiと同じDebianを選択しました。 また、Windows8になってLinuxとのデュアルブートが厄介になっている模様なので、USBメモリブートのDebianを作成する事としました。 インストーラをUSBメモリにインストール サイト からDebianのnetインストーラをダウンロードしてきます。  32ビットPC netinst iso [ debian-6.0.7-i386-netinst.iso ] ※当初は64ビット版Debianをセットアップしましたが、カーネルのコンパイル時のエラーにめげて32bit版Debianにしました。 ◆CDROMやUSBメモリ等にインストーラのisoファイルを書き込みます。 ライターソフトはお好みで。私は win32diskimager でUSBメモリに書き込みました。     ◆PCを再起動して、インストーラを書き込んだメディアから起動します。 USBメモリからの起動方法はBIOSによって異なります。(古~いPCだとそもそもUSBブート非対応ですので諦めてください・・・) DebianをUSBメモリにインストール ◆インストール先のUSBメモリを挿入しておきます。 CUIのみであれば8GB以上、GUI(デスクトップ)も含めるなら16GB以上のUSBメモリを用意します。 お好みで名前を付けます。 通常は空白のままや「localhost」でOKです。 セキュリティの為パスワードを設定しておきましょう。パスワードはお忘れなく。 適当に好きな名前を入れておきます。 Debianにログインする時のアカウント名です。 念のため設定しておきましょう。 今回はDebian専用にUSBメモリの全領域を割り当てます。 Windowsの入っているHDDやインストーラの入っているUSBメモリと間違わないように選択します。 パーティ...