トップ «前の日記(2005年10月04日) 最新 次の日記(2005年10月06日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2005年10月05日

SH-Linux (SH3 glibc-2.3.5-6)

kkojimaさんのbugfix版でkogiidenaさんが作ったソースパッケージをSH3/SH4でセルフでビルドした。
real    1929m25.879s
user    1179m32.860s
sys     170m26.360s
sh3版はdistcc併用しても32時間かかった。その間
胃が痛いこと痛いこと(*_*)
無事に.debが出来たときには奇跡かと思った。二日間ultracat君が拘束されたのも痛かった。以下関連リンク
http://lists.sourceforge.jp/mailman/archives/iohack-users/2005-September/000224.html kkojimasaんによる解説
http://eggplant.ddo.jp/www/pukiwiki/index.php?%B3%AB%C8%AF%B4%C4%B6%AD%20%28debian26%C8%C7%29 kogiidenaさんのメモ
http://www.si-linux.co.jp/pub/debian-sh/pool/main/g/glibc/ パッケージプール

SH-Linux (SH3 linux-2.6.13.2 ext-ide)

ne.cをカーネルにstaticに組み込むとext-ideの割り込み(PINT11=IRQ75)が入らなくなる。do_IRQ()にprintkを挟むという原始的な方法でデバックしてみる(A^^;;
ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)
Last modified Nov 1, 2000 by Paul Gortmaker
NE*000 ethercard probe at 0x300:<1>IRQ 41
IRQ 77
IRQ 76
IRQ 78
IRQ 41
IRQ 77
IRQ 78
IRQ 41
 10 20 30 40 50 60
eth0: NE2000 found at 0x300, using IRQ 35.
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
ide: SuperH generic IDE interface
hdc: HTS541040G9AT00, ATA DISK drive
ide1 at 0x170-0x177,0x376 on irq 75
hdc: max request size: 1024KiB
hdc: lost interrupt
hdc: lost interrupt
hdc: lost interrupt
おそらく、
1. 先に初期化されるne.cが割り込みプローブを行い、実態のない割り込み(IRQ41?)をdisableにしてしまう
2. そののち、IDEドライバがPINT11(=IRQ75)を起こしてもPINT8(IRQ41)がdisable状態なので動作しない
というロジックかと思われる。PINTをenableにするときは親側もenableにする改造が必要かと思われる。
今のところ俺しか困らないはずなので放置。

SH-Linux (SH3 linux-2.6.13.2 PINT割り込み)

Yes!ビンゴ! 想像の通りだった。以下のようなパッチでFix
arch/sh/kernel/cpu/irq_ipr.c
 static void enable_pint_irq(unsigned int irq)
 {
         unsigned long val, flags;
 
         local_irq_save(flags);
         val = ctrl_inw(INTC_INTER);
         val |= 1 << (irq - PINT_IRQ_BASE);
         ctrl_outw(val, INTC_INTER);     /* enable PINTn */
         portcr_mask |= 3 << (irq - PINT_IRQ_BASE)*2;
         local_irq_restore(flags);
 
+#if defined(CONFIG_SH_CAT709)
+        irq -= PINT_IRQ_BASE;
+        if(irq>=0 && irq <= 7)  enable_ipr_irq(PINT0_IRQ);
+        else if(irq <= 15)      enable_ipr_irq(PINT8_IRQ);
+#endif
 }