fc2ブログ

[KOZOS]gdb Linux対応

gdbのLinux対応版を見つけた。ここの記事で提供されてるgdb用device.cを使ってgdbをビルドしたらLinuxでも動いた。

(H8移植編その2第14回)シミュレータのLinux対応
http://kozos.jp/kozos/h8_2_14.html

device.cソースはここからGET
http://kozos.jp/kozos/h8_2/h8_14/gdb/


次のように動いたけど、rootで実行する必要がある。

[root@centos66x86 bootload]# gdb kzload.elf
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=h8300-elf".
For bug reporting instructions, please see:
...
Reading symbols from /mnt/hgfs/onedrive/kozos/osbook_03a/osbook_03a/h8_sim_02/bootload/kzload.elf...done.
(gdb) target sim
Connected to the simulator.
(gdb) load
connect to /dev/pts/1
interface: tap0
Loading section .vectors, size 0x100 vma 0x0
Loading section .text, size 0x1142 vma 0x100
Loading section .rodata, size 0xcd vma 0x1242
Loading section .data, size 0x10 vma 0xfffc20
Start address 0x100
Transfer rate: 39160 bits in <1 sec.
(gdb)



connect to /dev/pts/1 と出るので、ここに接続する。
別terminalで、こちらもrootで、

minicom -p /dev/pts/1


と実行。
さらにminicomの設定も変える必要あるのか?と思い、デバイスを/dev/pts/1にした。

gdbのプロンプトへ戻り、run と実行すると、

(gdb) run
Starting program: /mnt/hgfs/onedrive/kozos/osbook_03a/osbook_03a/h8_sim_02/bootload/kzload.elf


となった。

さっきminicomを起動しておいたterminalでは次のようになって、

kzload (kozos boot loader) started. た。 | |
kzload> AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0 |
unknown. トコル | |
kzload>


のように「kzload (kozos boot loader) started.」と出た。
スポンサーサイト



[KOZOS]ポータブル環境

VMware Player 7.0.0 上 CentOS6.6

■h8writeの準備
本家のh8write.cはgccの際にいろいろ(mpfrとか)不足と言われビルド解決せず。
以下を使う。
http://osdn.jp/projects/kz-h8write/downloads/57645/kz_h8write-v0.2.1.zip/
このzipを解凍してPackageFiles/srcへ移動。
/usr/bin/gcc, /usr/bin/ccにパスが通っている事を確認後、make allとやればあっさりビルド完了。

■モバイル電源で書き込み

ホストPC(VMware上CentOS6.6) --> USB to Serial --> Serialケーブル --> H8/3069 & 5V入力DCプラグ
 <-- USB to DCプラグ <-- スイッチ付USB延長ケーブル <-- 700-BTL017BKの5V 2.1A出力



700-BTL017BK使わなくても、eneloopスティックブースター(5V出力、500mA)を使っても書き込み成功した。
しかもスイッチ付だから、スイッチ付USBケーブル不要になるし。型番以下か忘れたけど。
http://ctlg.panasonic.co.jp/sanyo/products/products/kbc/KBC-D1AS/

■注意点
ちなみにrootでやらないと以下のようにエラーになる。原因未解析。

[bob@centos66x86 bootload]$ make write
/home/bob/kozos/tool/PackageFiles/src/kz_h8write -3069 -f20 kzload.mot /dev/ttyUSB0
=================================================
H8/3069F Flash Writer for KOZOS (Version 0.2.1)
Copyright(C) 2011-2012 Shinichiro Nakamura
=================================================
com port open error
make: *** [write] エラー 1

[KOZOS]ソースの自動diffバッチ

本書の最終12とgdb対応したh8_sim_02のソース差分を取るバッチ。
ソースの種類をいちいち指定するのは面倒なので、フォルダに存在するファイルを自動的にリスト化してdiffしてる。

後述のバッチ記述を例えばbat.hogeとして保存して、以下のようなDIR関係で使う。

bat.hoge
12/
h8_sim_02/
diff_result/

#!/bin/csh -f

set ref_dir = 12
set imp_dir = h8_sim_02

# set list_dir = ( bootload os gdb )
set list_dir = ( bootload os )

foreach hoge ($list_dir)
echo " set list_src = ( \" > list.src.$hoge
ls -lst $ref_dir/$hoge/* | sed 's;.*/\(.*\);\1 \\;' | grep -v ".o" | grep -v ".elf" | grep -v LICENSE | grep -v KL | grep -v Make >> list.src.$hoge
echo " )" >> list.src.$hoge

source list.src.$hoge
foreach src ($list_src)
diff $ref_dir/$hoge/$src $imp_dir/$hoge/$src > diff_result/diff.$hoge.$src
end
end

[KOZOS]gcc, binutils, gdb自動インストールバッチ(CentOS6.6 64bit)

/home/bob/kozos/tool へ以下バッチを置いて、実行すると、
必要ファイルの入手からインストールまで自動でやってくれる。
CentOS6.6 64bitでは上手く行ったけど、もし不足PKGとか指摘されたら都度追加で。

#!/bin/csh -f

#-----------------------------------------
# Install gcc
#-----------------------------------------
wget http://kozos.jp/books/makeos/gcc-3.4.6.tar.gz
tar zxvf gcc-3.4.6.tar.gz
cd gcc-3.4.6/
./configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c

# 2015.7.12 for error --> ./libgcc2.c:537: error: unrecognizable insn:
sed 's/redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT)/redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0755)/' gcc/collect2.c > gcc/collect2.c.mod
\mv gcc/collect2.c.mod gcc/collect2.c

# 2015.7.12 for error --> ./libgcc2.c:537: internal compiler error: in extract_insn, at recog.c:2083
cd gcc/config/h8300
\cp ../../../../patch.gcc.for_64bit_env .
patch < patch.gcc.for_64bit_env

cd ../../../
make
make install
cd ../


#-----------------------------------------
# Install binutils
#-----------------------------------------
wget http://kozos.jp/books/makeos/binutils-2.19.1.tar.gz
tar zxvf binutils-2.19.1.tar.gz
cd binutils-2.19.1/
./configure --target=h8300-elf --disable-nls
make
make install
cd ../


#-----------------------------------------
# Install gdb
#-----------------------------------------
# need to install readline-devel before gdb
yum install readline-devel

# use v7.2, refer to http://kozos.jp/kozos/h8_sim_01.html
wget http://ftp.gnu.org/gnu/gdb/gdb-7.2a.tar.gz
tar zxvf gdb-7.2a.tar.gz
cd gdb-7.2/
./configure --target=h8300-elf --disable-nls
gmake
cd ../

[KOZOS]binutils、gccインストール

http://ishikuro.hateblo.jp/entry/20120812/1344750799

■ディレクトリ構成と実行方法
rootにログイン
あるDIRへ以下2つのファイルを置く。

bat.kozos_gcc_binutils_inst
patch.gcc.for_64bit_env


あとはbat.*を実行するだけ。

■パッチの準備
64bitホストでのgcc makeエラー対策のパッチは以下を参照。
https://gcc.gnu.org/ml/gcc-patches/2006-10/msg00337.html

patch.gcc.for_64bit_env という名前で以下内容のファイルを準備。

Index: h8300.c
===================================================================
--- h8300.c (revision 117513)
+++ h8300.c (working copy)
@@ -83,8 +83,8 @@
static int h8300_saveall_function_p (tree);
static int h8300_monitor_function_p (tree);
static int h8300_os_task_function_p (tree);
-static void h8300_emit_stack_adjustment (int, unsigned int);
-static int round_frame_size (int);
+static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT);
+static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT);
static unsigned int compute_saved_regs (void);
static void push (int);
static void pop (int);
@@ -510,7 +510,7 @@
SIZE to adjust the stack pointer. */

static void
-h8300_emit_stack_adjustment (int sign, unsigned int size)
+h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size)
{
/* If the frame size is 0, we don't have anything to do. */
if (size == 0)
@@ -546,8 +546,8 @@

/* Round up frame size SIZE. */

-static int
-round_frame_size (int size)
+static HOST_WIDE_INT
+round_frame_size (HOST_WIDE_INT size)
{
return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
& -STACK_BOUNDARY / BITS_PER_UNIT);



■インストールバッチを準備
bat.kozos_gcc_binutils_inst という名前で以下内容のファイルを準備。

#!/bin/csh -f

wget http://kozos.jp/books/makeos/binutils-2.19.1.tar.gz
wget http://kozos.jp/books/makeos/gcc-3.4.6.tar.gz

#-----------------------------------------
# Install gcc
#-----------------------------------------
tar zxvf gcc-3.4.6.tar.gz
cd gcc-3.4.6/
./configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c

# 2015.7.12 for error --> ./libgcc2.c:537: error: unrecognizable insn:
sed 's/redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT)/redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0755)/' gcc/collect2.c > gcc/collect2.c.mod
\mv gcc/collect2.c.mod gcc/collect2.c

# 2015.7.12 for error --> ./libgcc2.c:537: internal compiler error: in extract_insn, at recog.c:2083
cd gcc/config/h8300
\cp ../../../../patch.gcc.for_64bit_env .
patch < patch.gcc.for_64bit_env

cd ../../../
make
make install
cd ../


#-----------------------------------------
# Install binutils
#-----------------------------------------
tar zxvf binutils-2.19.1.tar.gz
cd binutils-2.19.1/
./configure --target=h8300-elf --disable-nls
make
make install
cd ../

カレンダー
11 | 2023/12 | 01
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード