[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
boot from secondary IDE drive
- Subject: boot from secondary IDE drive
- From: 藤原 誠/ Makoto Fujiwara<makoto@ki.nu>
- To: port-powerpc-ja@jp.netbsd.org
- Date: Fri, 17 Aug 2001 18:11:16 +0900
- Organization: www.ki.nu
- Message-ID: <yfm7kw359vv.wl@harry.ki.nu>
- Delivered-To: mailing list port-powerpc-ja@jp.netbsd.org
- Mailing-List: contact port-powerpc-ja-help@jp.netbsd.org; run by ezmlm-idx
- User-Agent: Wanderlust/2.6.0 (Twist And Shout) SEMI/1.14.3 (Ushinoya)FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/21.0.104(powerpc-apple-netbsdelf1.5W) MULE/5.0 (賢木)
> 千葉市中央区長洲
> 藤原 誠
port-macppc でも話題になったことがあるのですが、
例えば G4 の中の wd0 の隣に、wd1 を slave で増設して、
その中に、sysinst などで netbsd を入れると、ここから
boot enet:0 /pci@f2000000/pci-bridge@d/mac-io@7/ata-4/disk@1:0
しても、boot はするのですが、boot-device が unknown になるか、
万一 wd0 に設置済だと、そちらを root だと思って mount してしまう
という問題があって、(誰も send-pr していないと思います。多分)
(本当のことを言うと、StarMax の IDE0/IDE1 も少し似た問題が
あって.. それは実はまた全然別の問題らしいのですが)
添付のような printf を入れて何かなぁと見ているのですが、
addr(1) aa_channel(0) does not match, returning.
という表示とその他沢山表示が出て、いまは画面でやっているので効
率が上りませんが、多分問題のところは
-- dv_xname(wd1)
-- cp (disk1)
-- bp (disk@:1/netbsd)
と表示されているような気がします。(不確か。後でもっと良く見て
おきます)
どうも、
sys/arch/macppc/macppc/autoconf.c の
次の部分が問題なのではないかと思うのですが...
216 行目で /netbsd の部分が問題 ?
それとも p + 1 でなくて + 2 ?
204 /* Get the address part of the current path component. The
205 * last component of the canonical bootpath may have no
206 * address (eg, "disk"), in which case we need to get the
207 * address from the original bootpath instead.
208 */
209 p = strchr(cp, '@');
210 if (!p) {
211 if (bp)
212 p = strchr(bp, '@');
213 if (!p)
214 addr = 0;
215 else {
216 addr = strtoul(p + 1, NULL, 16);
217 p = NULL;
218 }
219 } else
220 addr = strtoul(p + 1, &p, 16);
---
(藤原)
http://www.ki.nu/software/NetBSD/iBook2/
--- sys/arch/macppc/macppc/autoconf.c-ooo Sun Jul 22 20:29:47 2001
+++ sys/arch/macppc/macppc/autoconf.c Fri Aug 17 17:45:54 2001
@@ -142,6 +142,10 @@
*
* The last component may have no address... so append it.
*/
+#if 0
+ printf("\n -- cbootpath(%s)\n -- bootpath(%s)\n -- last(%s)\n",
+ cbootpath,bootpath,last);
+#endif
p = strrchr(cbootpath, '/');
if (p != NULL && strchr(p, '@') == NULL) {
/* Append it. */
@@ -219,6 +223,9 @@
} else
addr = strtoul(p + 1, &p, 16);
+#if 1
+ printf("\n -- addr(%x)\n -- p(%s)\n",(int) addr, p);
+#endif
if (DEVICE_IS(dev->dv_parent, "mainbus")) {
struct confargs *ca = aux;
@@ -262,9 +269,17 @@
return;
} else if (DEVICE_IS(dev->dv_parent, "wdc")) {
struct ata_atapi_attach *aa = aux;
+#if 1
+ printf("\n -- dv_xname(%s)\n -- cp (%s)\n -- bp (%s)\n",
+ dev->dv_xname,cp,bp);
+#endif
if (addr != aa->aa_channel)
+ {
+ printf("\n -- addr(%x) aa_channel(%x) does not match, returning.\n",
+ (int) addr, aa->aa_channel );
return;
+ }
} else
return;