ラベル 12ステップで作る 組込みOS自作入門 の投稿を表示しています。 すべての投稿を表示
ラベル 12ステップで作る 組込みOS自作入門 の投稿を表示しています。 すべての投稿を表示

組み込み自作OS-Macにて-Step1-その5

##############「Hello World」のソースコード(1.2.1 - 1.2.9)###################
ここhttp://kozos.jp/kozos/osbook/osbook_03/01/bootload/に、本書第1章で作成するプログラムのソースコードがおいてある。今回は、環境構築のテストが目的なので、そのまま流用させてもらう。

#クロス開発のソースコードは~/12step/src/01/bootloadに置く
cd ~/12step/src/
mkdir 01
cd 01
mkdir bootload
cd bootload


#ここにソースコードをダウンロードしてくる
#main()関数 main.c(1.2.2)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/main.c

#スタート・アップ startup.s(1.2.3)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/startup.s

#割り込みベクタの定義 vector.c(1.2.4)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/vector.c

#各種ライブラリ関数のヘッダ・ファイル lib.h(1.2.5)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/lib.h

#各種ライブラリ関数の本体 lib.c(1.2.5)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/lib.c

#シリアル・デバイス・ドライバのヘッダ・ファイル serial.h(1.2.6)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/serial.h

#シリアル・デバイス・ドライバの本体 serial.c(1.2.6)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/serial.c

#様々な型の定義 defines.h(1.2.7)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/defines.h

#リンカ・スクリプト ld.scr(1.2.8)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/ld.scr

#ビルド方法 Makefile(1.2.9)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/Makefile


#################Makefileの編集(1.2.9)#########################
本書では、各種ライブラリを/usr/localにインストールしているが、今回の私の環境ではこれらをすべて、~/12step/toolsにおいている。そこでMakefileを編集して、~/12step/toolsに読みに行くようにする。
#以下の合計3カ所をコメントアウトして書き換えた
vim Makefile










ドライバに関しては、USBシリアルケーブルをMacに接続した後、以下のコマンドを実行することで調べることができる。
ls /dev/tty.*
で調べたものを書いた。私の環境は、/dev/tty.usbserial-FTB3L7SJであった。

#####################ビルド(1.3)########################
#/Users/kappa/12step/src/bootloadにてmakeを実行
make

#うまくいったら、kzloadという実行形式ファイルが生成しているはず。。
ls
Makefile   kzload     ld.scr     lib.h      main.c     serial.c   serial.o   startup.s  vector.o
defines.h  kzload.elf lib.c      lib.o      main.o     serial.h   startup.o  vector.c

できた!

kzloadというファイルは、ELF形式というフォーマットで、h8writeでそのままH8/3069Fマイコン・ボードのフラッシュROMに書き込むことはできないそうだ。h8writeでフラッシュROMに書き込めるのは、モトローラSレコード・フォーマットという形式のファイルだそうだ。
ELF形式に変換するには、objcopyというコマンドが必要であるらしい。そして、binutilsをインストールした時に、objcopyも一緒にビルドされているとのこと。なんて、便利なんだろう。
それでは、以下のコマンドでフォーマット変換を行う。
~/12step/tools/h8300-elf/bin/objcopy -O srec kzload kzload.mot

ls
Makefile   kzload     kzload.mot lib.c      lib.o      main.o     serial.h   startup.o  vector.c
defines.h  kzload.elf ld.scr     lib.h      main.c     serial.c   serial.o   startup.s  vector.o

このコマンドは長いので、Makefileに記述がされている。よってmake imageというコマンドでいけるとのこと。

#一度消去して
rm kzload.mot

#Makefileに頼る
make image
~/12step/tools/bin/h8300-elf-objcopy -O srec kzload kzload.mot
ls
Makefile   kzload     kzload.mot lib.c      lib.o      main.o     serial.h   startup.o  vector.c
defines.h  kzload.elf ld.scr     lib.h      main.c     serial.c   serial.o   startup.s  vector.o


##################フラッシュROMへの書き込み(1.3.2)#####################
を~/12step/toolsにおいてあるkz_h8writeを用いてフラッシュROMへ書き込む

sudo ~/12step/tools/kz_h8write -3069 -f20 kzload.mot /dev/tty.usbserial-FTB3L7SJ

これまた、Makefileに記載があるので、make writeでもよい。
make write

そして、ここでまたハマった。
ハマったのは2カ所。
・1カ所目
ボード本体に電源のケーブルを挿入していなかった。
・2カ所目
ボード状のスイッチを左から「ON, ON, OFF, ON」にしていなかった。「ON, ON, OFF, ON」にすることで、CPUが書き込みモードで起動するようだ。あまりにも困ったものだから、著者のサポートページをよく読んだら、書いてあった。

マイコン・ボードの右上には,4連のディップ・スイッチがあります. これらはCPUの動作モード設定ピンに直結しているスイッチで,CPUの動作モードを 指定することができます.またディップ・スイッチのすぐ右には, リセット・ボタンがあります.

まず,ディップ・スイッチを左から,ON,ON,OFF,ONの状態(上,上,下,上)に してください. この状態で電源ONすると,フラッシュROM書き込みモードとしてCPUが起動します.

PCとH8/3069Fマイコン・ボードをシリアル・ケーブルで接続します. さらにマイコン・ボードに電源アダプタを接続し,電源を入れます. H8/3069Fマイコン・ボードには電源のON/OFFボタンがありませんので, 電源アダプタを接続するとそのまま電源ONになります.

H8/3069Fマイコン・ボードの電源を入れたらフラッシュROM書き込みモードで起動して いますので,h8writeを実行することで,シリアル経由でフラッシュROMに 書き込みができます.


写真を貼付けておく。

電源とシリアルコネクタに注目
ディップ・ スイッチに注目

うまくいくと、以下のようなログが表示される。
sudo make write
../../../tools/kz_h8write -3069 -f20 kzload.mot /dev/tty.usbserial-FTB3L7SJ
=================================================
 H8/3069F Flash Writer for KOZOS (Version 0.2.1)
 Copyright(C) 2011-2012 Shinichiro Nakamura
=================================================
Bitrate sequence: Done.
Inquiry device: Done.
Select device: Done.
Inquiry clock mode: Done.
Select clock mode: Done.
Select bitrate: Done.
Waiting for erase done:......
Programming:.....
Program: Done.

Complete.


#######picocomを用いてボードを起動し、シリアル通信を行う(1.3.4 - 1.3.10)###########

ディップ・スイッチを「ON, OFF, ON, OFF」に変更し、リセットボタンを押す。リセットボタンは、ディップ・スイッチの右隣にある。

あとは、通信をするだけ。
以前、Arduinoでシリアル通信をするために、picocomというコンパクトなシリアル通信の端末エミュレータをインストールしてあったので、それを使用する。

picocom -r -l /dev/tty.usbserial-FTB3L7SJ
picocom v1.7

port is        : /dev/tty.usbserial-FTB3L7SJ
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : yes
nolock is      : yes
send_cmd is    : sz -vv
receive_cmd is : rz -vv
imap is        : 
omap is        : 
emap is        : crcrlf,delbs,

Terminal ready
Hello World!                  #スイッチを押すたびにHello World!が出力される!!!!
Hello World!

Hello World!

#######cuを用いてボードを起動し、シリアル通信を行う(1.3.4 - 1.3.10)###########
cuはMacでデフォルトでついているエミュレータである。

sudo cu -l /dev/tty.usbserial-FTB3L7SJ
Connected.
Hello World!               #やはりスイッチを押すたびにHello World!が帰ってくる。
Hello World!
Hello World!
Hello World!
Hello World!

~.                                 #終了するときは、~.と入力してEnterを押せばいい。


Disconnected.


以上で、MacによるStep1は終了した!!!!!!!!!!!!!!!!!
一日で終わって本当に良かった。
これも、ネット上に丁寧にログを残してくださっている皆様のお陰。


###################追記1##################

最後に環境変数PATHに$HOME/12step/tools/binを追加していたが、普段は必要ないので、コメントアウトしておく方がよい。そうでないと、クロス開発用のgccが優先されてしまう。
#export PATH=/opt/local/bin:/opt/local/sbin:$PATH

export PATH=$HOME/12step/tools/bin:/opt/local/bin:/opt/local/sbin:$PATH

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

#export PATH=$HOME/12step/tools/bin:/opt/local/bin:/opt/local/sbin:$PATH
のように戻しておくこと。


##################追記2##################
いろいろ検証してみたが、どうやらPATHに~/12step/tools/binを必要はないようだ。
なぜなら、makeファイルの中で
PREFIX  = ~/12step/tools
としており、これにより、
BINDIR  = $(PREFIX)/bin

BINDIR  = ~/12step/tools/bin
となるためである。


###############追記3####################
最終的なディレクトリ構成をメモしておく。
http://kozos.jp/kozos/osbook/osbook_03/ に習った形式で進める予定。
tree -L 2 ~/12step/

#12step/src以下に開発プロジェクトを進めて行く
tree -L 2 ~/12step/src


以上


【参考文献】
坂井 弘亮『12ステップで作る組込みOS自作入門』カットシステム 2010

組み込み自作OS-Macにて-Step1-その4

###############フラッシュROM書き込みツール(1.1.11)###################

Sourceforge(http://sourceforge.jp/projects/kz-h8write/)でshintaさんが開発されているh8writeの改良版であるkz_h8write-v0.2.1.zip (Date: 2012-12-19, Size: 491.1 KB)をダウンロードする。そして、~/12step/build/以下に解凍してPackageFilesという名のディレクトリを手に入れる。

cd /Users/kappa/12step/build/PackageFiles/src

#ビルド。Makefileは/Users/kappa/12step/build/PackageFiles/srcディレクトリ内にすでに存在している。
make

#生成した実行ファイルを~/12step/toolsへ移動させる
mv kz_h8write ~/12step/tools/




その5から、次から実際にマイコンをつないでテストをしてみる。

組み込み自作OS-Macにて-Step1-その3

##########GCCのインストールについて(1.1.9)###########
GCC4.5以降のバージョンでは、gmp, mpfr, mpcの三つのライブラリが事前にインストールされており、ビルドするときにそれらを--with-gmp=のようにして指定する必要があるという(AVR-GCC4.5導入編)。よって、まずは、gmp, mpfr, mpcの三つをインストールすることから始める。


##########gmpのインストール(1.1.9)##########
gmp : GMP (The GNU MP Bignum Library) は多倍長計算を非常に高速に行うライブラリ(GMPの使い方より)。gccに必要のようである。

cd ~/12step/build/
tar jxvf gmp-5.0.5.tar.bz2
cd gmp-5.0.5

./configure --prefix=$HOME/12step/tools/gmp

make
make check

make install

###########mpfrのインストール(1.1.9)###################
cd ~/12step/build
tar zxvf mpfr-3.1.1.tar.gz
cd mpfr-3.1.1

./configure --prefix=$HOME/12step/tools/mpfr --with-gmp=$HOME/12step/tools/gmp

make
make check

make install

###########mpcのインストール(1.1.9)###################
cd ~/12step/build/
tar zxvf mpc-0.9.tar.gz 
cd mpc-0.9

./configure --prefix=$HOME/12step/tools/mpc --with-gmp=$HOME/12step/tools/gmp --with-mpfr=$HOME/12step/tools/mpfr

make
make check
make install



###########gccのインストール(1.1.9)###################
はまった。参考にさせていただいていたサイトのgccのビルドの項目のうち、./configureの--with-mpcの記述を変更したら、うまくいった。おそらく、--with-mpc=/usr/local/mpcではなくて、--with-mpc=$HOME/12step/tools/mpcであろう。

cd ~/12step/build/
tar zxvf gcc-4.7.1.tar.gz 
cd gcc-4.7.1

./configure --target=h8300-elf -disable-nls --disable-threads --disable-shared --disable-werror --enable-languages=c --prefix=$HOME/12step/tools --with-gmp=$HOME/12step/tools/gmp --with-mpfr=$HOME/12step/tools/mpfr --with-mpc=$HOME/12step/tools/mpc

make
ここで、またはまった。libgcc.mvars: No such file or directoryというエラーが出る。このエラーはすでにネット上で多く報告されている。gcc-4.3.x以降ではビルドの際に,ビルドディレクトリと ソースディレクトリを別にしないと「libgcc.mvarsが無い」というエラーになって しまうとのこと。ここにもここには、「v4.3以降は、ソースディレクトのトップ以外のディレクトリでビルドしないと以下のエラーになる仕様だそうです」とわざわざ書いてある。
そこで、GCCのディレクトリを消去して

cd ~/12step/build/
tar zxvf gcc-4.7.1.tar.gz 
cd gcc-4.7.1
mkdir build
cd build

../configure --target=h8300-elf -disable-nls --disable-threads --disable-shared --disable-werror --enable-languages=c --prefix=$HOME/12step/tools --with-gmp=$HOME/12step/tools/gmp --with-mpfr=$HOME/12step/tools/mpfr --with-mpc=$HOME/12step/tools/mpc

make
としてみた。すると、今度はlibssp/ssp.cに関連するエラーが出て、止まってしまった。
--disable-libssp
がはいっていた。そこで、

cd ~/12step/build/
tar zxvf gcc-4.7.1.tar.gz 
cd gcc-4.7.1
mkdir build
cd build

../configure --target=h8300-elf -disable-nls --disable-threads --disable-shared --disable-werror --enable-languages=c --prefix=$HOME/12step/tools --with-gmp=$HOME/12step/tools/gmp --with-mpfr=$HOME/12step/tools/mpfr --with-mpc=$HOME/12step/tools/mpc --disable-libssp

make

としてみた。どうやらこれでうまくいくようだ。
あとはインストール
make install

###############確認###################
tree ~/12step




##############パスを通す(注意)######################
後々判明したが、わざわざパスを通さなくてもMakefileに~/12step/tools/binに読み込むように記述を行うため、このパートはスキップすればよい。メモのために一応残しておくが。
ls ~/12step/tools/bin








# $HOME/12step/tools/binにはパスを通しておく。とよい。
vim ~/.bash_profile

#前

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

#後
#export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH=$HOME/12step/tools/bin:/opt/local/bin:/opt/local/sbin:$PATH

設定ファイルの変更を反映させる
source ~/.bash_profile

これで、例えば、h8と打ちかけてTabキーを押すと以下のようになる。







【参考文献】
坂井 弘亮『12ステップで作る組込みOS自作入門』カットシステム 2010

組み込み自作OS-Macにて-Step1-その2

##############セルフ・コンパイラ(1.1.6)###############
Xcodeを入れてあれば、Macであらたにセルフ・コンパイラをインストールする必要は無い。


##############クロスコンパイラ・コンパイラ(1.1.7)###############

こちらの二つのサイトの実行例を大部分参考にして進めました。


#クロスコンパイラをインストールするディレクトリを作成
cd ~ 
mkdir 12step 
cd 12step 
mkdir build src tools

#ディレクトリ構成はこんな感じ
#buildはインストールツールをビルドする場所、srcはこれから開発するプログラムを億場所、toolsはクロスコンパイラなどをおいておく場所。今回のプロジェクトが終了したら、~/12stepをまとめて消去すれば、環境を元に戻す事ができる。
sudo port install tree
tree 12step

#ソースコードのダウンロード
cd ~/12step/build/
curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2
curl -O http://ftp.gnu.org/gnu/gmp/gmp-5.0.5.tar.bz2
curl -O http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
curl -O http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.1.tar.gz
curl -O http://ftp.gnu.org/gnu/gcc/gcc-4.7.1/gcc-4.7.1.tar.gz

#現在のディレクトリはこんな感じ
tree ~/12step










################これからそれぞれのツールをインストールしていく(1.1.8)############
#################binutilsのインストール(1.1.8)#################
#binutilsとはGNUが提供しているプログラミングに必要なツール群である。様々なオブジェクトファイルや、アセンブラ、リンカが含まれる
#ソースコードのアーカイブを解凍して、ディレクトリに入る
cd ~/12step/build
tar jxvf binutils-2.19.1.tar.bz2 
cd binutils-2.19.1

#--target=h8300-elfとは、H8のクロス開発用にbunutilsをビルドするということ
#--prefix=$HOME/12step/toolsとは、インストール先の指定を表している
#--disable-werrorは一部の環境ではビルドエラーを会費できるようである
./configure --target=h8300-elf --disable-nls --disable-werror --prefix=$HOME/12step/tools

#makeではエラーログらしきののが出るが、怯まずに前へ進む
make
make install

#tools以下に新しくディレクトリができて、インストールが成功していることが確認できる
tree -L 2 ~/12step/
















# tools/bin以下には各種ツールがインストールされている
ls ~/12step/tools/bin


【参考文献】
坂井 弘亮『12ステップで作る組込みOS自作入門』カットシステム 2010

組み込み自作OS-Macにて-Step1-その1

本書では推奨されていなかったが、ネット情報によるとクロスコンパイル環境の構築が可能とのことであった。そこで、まずは慣れ親しんだMacから着手した。

############まずはネットの情報を集める。#############

・このブログの内容が基本となる。本書のサポートページにもリンクされている
2010-12-26 MacでH8開発環境構築 - 12ステップ本を試す

・こちらのブログはより最近の環境(2012年)で試されている
2回目のC言語で『12ステップで作る組込みOS自作入門 』の通りに組込みOSを作ってみた

・slideshareにもよいスライドがある
http://www.slideshare.net/sandai/12step-1-14296356

・Macでの環境構築が大まかにまとめられている
まいんど工作室

・マックでシリアル通信を利用するための情報がまとめられている
Mac でシリアルコンソールを利用する方法



#######それでは今回のプロジェクトで使用する、ハードウェアを整理する。(1.1.1 - 1.1.5)###########

・試した環境
MacBook(Mac OS X 10.9.2)

・用意したもの
iBUFFALO USBシリアルケーブル(USBtypeA to D-sub9ピン)0.5m ブラックスケルトン BSUSRC0605BS

(以下のものは組み込みOSセットを購入して揃えた)
Fネット対応マイコンLANボード H8/3069F
超小型スイッチングアダプタ GP05-US0510
ストレートケーブル RCM-09PS-GR-1.8M-LF  #シリアル通信に使用。Macでは使用しない

###########USBシリアルケーブルをMacbookで使用可能になるように、ドライバをインストールする############

「iBUFFALO USBシリアルケーブル(USBtypeA to D-sub9ピン)0.5m ブラックスケルトン BSUSRC0605BS(以下USBシリアルケーブル)」は、メーカーであるBuffaloからMac用公式ドライバーが提要されていない。しかし、内臓チップのメーカーがドライバーを提供しているので、そちらをインストールする。Lion以降のOS Xを使用している場合は64bit ver.をインストールするのがミソ。
下のサイトにいく。
http://www.ftdichip.com/Drivers/VCP.htm
Virtual COM Port Drivers

ドライバーが追加されていることを確認するには、USBシリアルケーブルをMacbookに接続した後(もう一方はどこにも接続しなくてもよい)、下のようにドライバファイルを調べる。
$ ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port   /dev/tty.usbserial-FTB3L7SJ

/dev/tty.Bluetooth-Modem

/dev/tty.usbserial-FTB3L7SJが存在すれば、インストールは成功している。



とりあえず、今日はここまで。


【参考文献】
坂井 弘亮『12ステップで作る組込みOS自作入門』カットシステム 2010

12ステップで作る 組込みOS自作入門

以前から興味があった、『12ステップで作る 組込みOS自作入門』に挑戦する決意をした。

PC上でプログラムを作成する場合、環境によりセルフ開発とクロス開発に分類される。
セルフ開発とは、プログラムの開発環境と実行環境のプラットホームが同一になる開発である。一方、クロス開発は、開発環境と実行環境が異なるものを指す。クロス開発の場合、開発するPCのことをホストと呼び、プログラムが実際動作するデバイスをターゲットと呼ぶ。


本書に取り組む際には第1章で扱われている開発環境の構築が第一関門となりそうだ。クロス環境を用意するため、ハマるところが満載の予感がする。

1stステップ 開発環境の作成
1.1 開発環境の構築
1.2 「Hello World」のソース・コード
1.3 「Hello World」を動かしてみよう!

本書ではUbuntu9.10, Fedora11,  FreeBSD, Windows XP + Cygwinの4つの環境が推奨されている。

今後は、まずこれらの環境で開発環境を構築できるかどうか試して行く事から取りかかる。

【参考文献】
坂井 弘亮『12ステップで作る組込みOS自作入門』カットシステム 2010