Yoichi Koyanagi
yk****@tinyw*****
2003年 12月 26日 (金) 12:31:25 JST
こんにちは。小柳と申します。 > > 次のステップと思いまして,eCos開発環境の整備をという事で > > http://sourceforge.jp/projects/ecos-h8/docman/ > > http://sourceforge.jp/projects/ecos-h8/document/toolchain/ja/3/toolchain.html > > を見ますと,gccはver.3.1 (3.2以降は未サポート)で,eCos用に別の > > 環境を整備する必要があるのでしょうか? あるいは3.3でも実は問題 > > が無いのか,お知恵を拝借したいと思います. > > > > #C++も必要との事なので何れにしても再度構築する必要があるのですが... > > リリースに置いてあるバイナリは3.3でコンパイルしています。 > #正式には3.2.xまでということになっていますが。 > #3.2と3.3を同居させるのが面倒なので… > h8300-elfであればバージョンはいくつでも問題ないでしょう。 私のところでも、gcc-3.3 + patch で、eCos(redboot) も uClinux も コンパイルできて動作しています。 > > http://uclinux-h8.sourceforge.jp/pukiwiki/pukiwiki.php?CFBoot > > ではCFからのbootが出来るとの事ですがこの記事のターゲットボード > > はどちらのものになりますか? (ストロベリーリナックスさんのH8MAX > > か自作かと思いますが) > > 今の所対応しているのは、 > ・秋月ボード+三岩氏の参考回路(http://www.linet.gr.jp/~mituiwa/h8/h8osv3/hddprog/hdd.png) > ・H8MAX > です。 > 秋月ボードは未テストなので、対応していると言って良いのかどうか疑問ですが… 秋月3069ネットボードに IDE disk をつけて、stand-alone で動作させるところまで できました。回路は、 http://lists.sourceforge.jp/pipermail/uclinux-h8-devel/2003q2/000085.html で指摘されている通り、INT にインバータを入れています。また、uClinux の ソースを見ると、aki3068では IRQ4 を使うようになっていたので、IDE の INT は(反転して) IRQ4 (CN2 3pin)につなぐように上記の回路から変更しました。 (CN2 4pin は open) eCos/uClinux共に、aki3068 の IDEまわりのソースは H8MAX と比べてちょっと 修正が遅れているようにみうけられたので、eCos の cvs に施した修正を 下記につけますので、もしよろしければご参照ください。 disk の model名を表示する修正も加えてあります。(eCosの方に出した方がよかったでしょうか) uClinux の方のパッチはまだ整理できていないので、準備ができたらまたこちらに 出したいと思っています。 -Koya Index: packages/hal/h8300/aki3068net/current/include/platform.inc =================================================================== RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/aki3068net/current/include/platform.inc,v retrieving revision 1.12 diff -c -r1.12 platform.inc *** packages/hal/h8300/aki3068net/current/include/platform.inc 15 Jul 2003 11:30:38 -0000 1.12 --- packages/hal/h8300/aki3068net/current/include/platform.inc 26 Dec 2003 02:50:07 -0000 *************** *** 65,73 **** ##----------------------------------------------------------------------------- ! #if CYGINT_HAL_PLF_IF_IDE != 0 ! #define ABWCR_VAL ~((1 << ((CYGHWR_HAL_IDE_REGISTER >> 25) & 7)) |\ ! (1 << ((CYGHWR_HAL_IDE_ALT_REGS >> 25) & 7))) #else #define ABWCR_VAL 0xff #endif --- 65,73 ---- ##----------------------------------------------------------------------------- ! #if ((CYGINT_HAL_PLF_IF_IDE != 0) && (CYGHWR_HAL_IDE_BUSWIDTH == 16)) ! #define ABWCR_VAL ~((1 << ((CYGHWR_HAL_IDE_REGISTER >> 21) & 7)) |\ ! (1 << ((CYGHWR_HAL_IDE_ALT_REGS >> 21) & 7))) #else #define ABWCR_VAL 0xff #endif *************** *** 105,111 **** INIT_REGS_DATA(CYGARC_P1DDR,0xff) INIT_REGS_DATA(CYGARC_P2DDR,0xff) INIT_REGS_DATA(CYGARC_P5DDR,0x01) ! INIT_REGS_DATA(CYGARC_P8DDR,0x0c) .word 0 init_regs_end: ;; Thanks Hiroyuki Senshu --- 105,111 ---- INIT_REGS_DATA(CYGARC_P1DDR,0xff) INIT_REGS_DATA(CYGARC_P2DDR,0xff) INIT_REGS_DATA(CYGARC_P5DDR,0x01) ! INIT_REGS_DATA(CYGARC_P8DDR,0x0e) .word 0 init_regs_end: ;; Thanks Hiroyuki Senshu Index: packages/hal/h8300/aki3068net/current/include/plf_io.h =================================================================== RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/aki3068net/current/include/plf_io.h,v retrieving revision 1.1 diff -c -r1.1 plf_io.h *** packages/hal/h8300/aki3068net/current/include/plf_io.h 28 Feb 2003 12:24:24 -0000 1.1 --- packages/hal/h8300/aki3068net/current/include/plf_io.h 26 Dec 2003 02:50:07 -0000 *************** *** 65,75 **** #define HAL_IDE_INIT() aki3068net_ide_setup() #define HAL_IDE_READ_UINT8( __ctlr, __regno, __val ) \ ! aki3068net_read_command(__regno, __val) #define HAL_IDE_READ_UINT16( __ctlr, __regno, __val ) \ ! aki3068net_read_data(__regno, __val) #define HAL_IDE_READ_ALTSTATUS( __ctlr, __val ) \ ! aki3068net_read_control( __val) #define HAL_IDE_WRITE_UINT8( __ctlr, __regno, __val ) \ aki3068net_write_command(__regno, __val) --- 65,75 ---- #define HAL_IDE_INIT() aki3068net_ide_setup() #define HAL_IDE_READ_UINT8( __ctlr, __regno, __val ) \ ! aki3068net_read_command(__regno, &(__val)) #define HAL_IDE_READ_UINT16( __ctlr, __regno, __val ) \ ! aki3068net_read_data(__regno, &(__val)) #define HAL_IDE_READ_ALTSTATUS( __ctlr, __val ) \ ! aki3068net_read_control( &(__val)) #define HAL_IDE_WRITE_UINT8( __ctlr, __regno, __val ) \ aki3068net_write_command(__regno, __val) Index: packages/hal/h8300/aki3068net/current/src/plf_ide.c =================================================================== RCS file: /cvsroot/ecos-h8/ecos/packages/hal/h8300/aki3068net/current/src/plf_ide.c,v retrieving revision 1.1 diff -c -r1.1 plf_ide.c *** packages/hal/h8300/aki3068net/current/src/plf_ide.c 28 Feb 2003 12:24:34 -0000 1.1 --- packages/hal/h8300/aki3068net/current/src/plf_ide.c 26 Dec 2003 02:50:07 -0000 *************** *** 81,87 **** #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *d = *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_REGISTER + r); #else ! *d = *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + (r << 1)) & 0xff; #endif } --- 81,87 ---- #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *d = *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_REGISTER + r); #else ! *d = *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_REGISTER + (r << 1) + 1); #endif } *************** *** 90,96 **** #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *d = *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + r); #else ! *d = *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + (r << 1)); #endif } --- 90,98 ---- #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *d = *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + r); #else ! cyg_uint16 t; ! t = *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + (r << 1)); ! *d = ((t >> 8) & 0x00FF) | ((t << 8) & 0xFF00); #endif } *************** *** 99,105 **** #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *d = *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_ALT_REGS + 6); #else ! *d = *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_ALT_REGS + 12) & 0xff; #endif } --- 101,107 ---- #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *d = *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_ALT_REGS + 6); #else ! *d = *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_ALT_REGS + 12 + 1); #endif } *************** *** 108,114 **** #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_REGISTER + r) = d; #else ! *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + (r << 1) +1) = d; #endif } --- 110,116 ---- #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_REGISTER + r) = d; #else ! *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + (r << 1)) = d; #endif } *************** *** 117,123 **** #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_REGISTER + r) = d; #else ! *(volatile CYG_WORD16 *)(CYGHWR_HAL_IDE_REGISTER + (__regno <<1)) = (__val >> 8) | (__val << 8); #endif } --- 119,125 ---- #if CYGHWR_HAL_IDE_BUSWIDTH == 8 *(volatile cyg_uint8 *)(CYGHWR_HAL_IDE_REGISTER + r) = d; #else ! *(volatile cyg_uint16 *)(CYGHWR_HAL_IDE_REGISTER + (r << 1)) = ((d >> 8) & 0x00FF) | ((d << 8) & 0xFF00); #endif } Index: packages/redboot/current/src/fs/ide.c =================================================================== RCS file: /cvsroot/ecos-h8/ecos/packages/redboot/current/src/fs/ide.c,v retrieving revision 1.4 diff -c -r1.4 ide.c *** packages/redboot/current/src/fs/ide.c 27 Feb 2003 14:38:51 -0000 1.4 --- packages/redboot/current/src/fs/ide.c 26 Dec 2003 02:50:17 -0000 *************** *** 119,124 **** --- 119,125 ---- ide_ident(int ctlr, int dev, int is_packet_dev, cyg_uint16 *buf) { int i; + cyg_uint16 *p; HAL_IDE_WRITE_UINT8(ctlr, IDE_REG_DEVICE, dev << 4); HAL_IDE_WRITE_UINT8(ctlr, IDE_REG_COMMAND, is_packet_dev ? 0xA1 : 0xEC); *************** *** 127,134 **** if (!__wait_for_drq(ctlr)) return 0; ! for (i = 0; i < (SECTOR_SIZE / sizeof(cyg_uint16)); i++, buf++) ! HAL_IDE_READ_UINT16(ctlr, IDE_REG_DATA, *buf); return 1; } --- 128,141 ---- if (!__wait_for_drq(ctlr)) return 0; ! for (i = 0, p = buf; i < (SECTOR_SIZE / sizeof(cyg_uint16)); i++, p++) ! HAL_IDE_READ_UINT16(ctlr, IDE_REG_DATA, *p); ! ! for (i = 27; i <= 46; i++) { ! diag_printf("%c", buf[i] & 0xFF); ! diag_printf("%c", (buf[i] >> 8) & 0xFF); ! } ! diag_printf("\n"); return 1; } *************** *** 207,213 **** HAL_IDE_READ_UINT8(ctlr, IDE_REG_LBAMID, tmp); \ (x) = tmp; \ HAL_IDE_READ_UINT8(ctlr, IDE_REG_LBAHI, tmp); \ ! (x) = cdcount |= (tmp << 8); \ } --- 214,220 ---- HAL_IDE_READ_UINT8(ctlr, IDE_REG_LBAMID, tmp); \ (x) = tmp; \ HAL_IDE_READ_UINT8(ctlr, IDE_REG_LBAHI, tmp); \ ! (x) = ((x) | (tmp << 8)); \ }