投稿

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

RaspberryPiにイロイロ繋いでみるかな(キャラクタLCD)

イメージ
ご無沙汰だったRaspberryに何か繋いでみようと、アキバで漁ってきたパーツ達 異常気象が多いし台風シーズンも近づいてるし、温度や気圧でも観測してみるか・・・ 特価!に乗せられて手に取ってしまったギアードDCモーター DCモータを繋ぐなら、ついでにと、5Vで動きそうな小さなステッピングモータも ■まずはキャラクタLCDを繋いみた 型番  SC1602BBWB‐XA‐LB‐G 3.3V動作のバックライト付き16文字x2行のキャラクタLCDです。 RaspberryPiは3.3VIOですので、信号レベル変換が不要なので直結可能です。 GPIOを使って、RS、E、4bitデータの6本で接続しました。IOピンは貴重ですからね(笑) これで、ディスプレイに繋がなくてもプログラムのステータス表示などができるぞよ! (続く)

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...

ARM用クロスコンパイラのビルド(Windows8+Cygwin)

イメージ
更新版はコチラへ ARM用のGCCを Windows8 上でビルドしてみたので備忘録として。 ◆ Cygwin のインストール setup.exeをダウンロードしてきて実行。 ドライブ直下が吉ですのでディフォルトのままで。 適当なフォルダを指定 通常のブロードバンド環境ならディフォルトでOK わざわざ海外サーバを選ぶ必要はないでしょ。 Devel以下を一括でインストールしてしまいます。 GCCのビルドには不要なものもインストールされてしまいますが、何が必須なのか良く分からないもので・・・ あとは「次へ」だけで無事にインストール完了 ◆関連ソースを入手 ① GCCコンパイラ ② binutils(アセンブラやリンカーなど) ③ Newlib(組み込み向け標準ライブラリ) GCC4.5以降は以下の演算ライブラリが必要らしいので入手。 ④ 任意精度計算ライブラリ(GMP) ⑤ 浮動小数点演算ライブラリ(MPFR) ⑥ 複素数演算ライブラリ(MPC) 今回入手したファイル(バージョン)は以下の通りです。 ダウンロードしたソースを展開します。(何処へ展開するかはご自由に) $ mkdir -p /usr/local/src/gnu $ cd /usr/local/src/gnu $ tar zxvf ~/Download/gcc-4.7.3.tar.gz  : $ tar vxvf ~/Download/gmp-5.1.2.tar.bz2 ◆ビルド $export LANG=C この定義が無いとエラーが発生しました。 $export TARGET=arm-eabi $export PREFIX=/usr/local/gnu ①binutilsのビルド $ mkdir -p ~/tools/build-binutils-2.23.2 $ cd ~/tools/build-binutils-2.23.2 $ /usr/local/src/gnu/build-binutils-2.23.2/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib ...

Raspberry Pi のsleep時間測定

イメージ
RaspberryPiのGPIO出力波形にてsleep処理時間を測定してみました。 ◆sleep() while(1){     *(gpio_regs + 0x7) = (0x1 << portnum);     sleep(n);     *(gpio_regs + 0x0A) = (0x1 << portnum);     sleep(n); } n = 1 1秒から程遠い結果でした。原因は?? ◆usleep() while(1){     *(gpio_regs + 0x7) = (0x1 << portnum);     usleep(n);     *(gpio_regs + 0x0A) = (0x1 << portnum);     usleep(n); } n = 1 n = 10 n = 100 n = 1000 凡そ80μsecのディレイが発生するようです。 ------------------------------------------------------------------ 追加測定 ◆nanosleep() nano.tv_nsec = n; nano.tv_sec = 0; while(1){     *(gpio_regs + 0x7) = (0x1 << portnum);     nanosleep(&nano,NULL);     *(gpio_regs + 0x0A) = (0x1 << portnum);     nanosleep(&nano,NULL); } n=1~1000 n=10000 n=100000 nano.tv_nsec = 0; nano.tv_sec = 1; usleepと同様に約80use...

Raspberry Pi のGPIO信号波形

イメージ
RaspberryPiのGPIOにキャラクタLCDモジュールを接続します。 そこで、Cプログラムでインターフェイスタイミング信号を生成する為に、出力信号波形を観測してみました。 以前作成した LED点滅プログラム を以下の様にsleep関数をコメントアウトして観測 ※お安いPCオシロですので精度はあまり良くないですm(--)m while(1){     *(gpio_regs + 0x7) = (0x1 << portnum); //    sleep(1);     *(gpio_regs + 0x0A) = (0x1 << portnum); //    sleep(1); } CH1:電源電圧(テスターでの測定値は3.30Vでした) CH2:GPIO25(P22)

EclipseによるRasiberryPiのクロス環境

イメージ
DebianにインストールしたEclipse-cdt でRaspberryPiのクロス環境を試してみます。 ◆クロスコンパイラをgithubから落としてきます。 $git clone git://github.com/rspberrypi/tools.git ※ RaspberryPiのカーネルをビルド した時と同じですので、既にゲット済であれば不要です。 ◆HelloWorld ファイルメニューから新規プロジェクトを選択します。 Cプロジェクトを選択します。 プロジェクト名は適当に Hello World のプロジェクトを選択 ツールチェインはCrossGCCを選択 githubから落としてきたクロスコンパイラを指定します。 接頭部 arm-bcm2708-linux-gnueabi- パス ???/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin ビルド成功 RaspberryPiに実行ファイルを転送 正常に実行されました。

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メモリと間違わないように選択します。 パーティ...