[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
disks.c: write_label (Re: src/distrib/utils/sysinst/install.c)
- Subject: disks.c: write_label (Re: src/distrib/utils/sysinst/install.c)
- From: 藤原 誠/ Makoto Fujiwara<makoto@ki.nu>
- To: port-powerpc-ja@jp.netbsd.org
- Date: Sat, 23 Jun 2001 10:47:33 +0900
- Organization: www.ki.nu
- Message-ID: <yfmelsct1ai.wl@harry.ki.nu>
- In-Reply-To: <yfmr8wfpbw5.wl@harry.ki.nu>
- References: <yfmr8wfpbw5.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.4.1 (Stand By Me) SEMI/1.13.7 (Awazu) FLIM/1.13.2(Kasanui) Emacs/21.0.103 (powerpc-apple-netbsdelf1.5K) MULE/5.0(賢木)
> 千葉市中央区長洲
> 藤原 誠
From: 藤原 誠 / Makoto Fujiwara <makoto@ki.nu>
Subject: get_real_geom() Re: src/distrib/utils/sysinst/geom.c
Date: Wed, 20 Jun 2001 21:35:22 +0900
藤原> src/distrib/utils/sysinst/install.c
藤原> から呼ばれている
藤原> src/distrib/utils/sysinst/geom.c
藤原> の中の get_real_geom(disk, l)
藤原> は正しく Apple label を読んでいるのかな
藤原> 3.
藤原> a: Standard
藤原> b: Standard with X
藤原> c: Custom
藤原> d: Use Existing
藤原> で d: を選ぶと
藤原> 4.
藤原> c: 19077 0 19076 unused
藤原> しか表示されないのは何か変だなぁと思っている訳です。
これは例によって、勘違いがありました。
問題は
/usr/src/distrib/utils/sysinst/arch/macppc/md.c の中の
case 3:
....
case 4: /* Use Existing */
以下に、何も書いてないことでした。この辺を(添付のように)少し変更すると、
上に挙げた操作で disk label が表示されるようにはなりました。
ところが、
http://cvsweb.netbsd.org/cgi-bin/cvsweb.cgi/basesrc/distrib/utils/sysinst/install.c
の中に、
if (write_disklabel() != 0)
return;
という部分があって、これは、
http://cvsweb.netbsd.org/cgi-bin/cvsweb.cgi/basesrc/distrib/utils/sysinst/disks.c
の
-------------------------------------------
write_disklabel (void)
{
#ifdef DISKLABEL_CMD
/* disklabel the disk */
return run_prog(RUN_DISPLAY, MSG_cmdfail,
"%s %s %s", DISKLABEL_CMD, diskdev, bsddiskname);
#endif
return 0;
}
-------------------------------------------
のように make 時には切換出来るようになっているのですが、実行時に
Apple map の時には飛ばして、BSD label の時には実行するというよう
に切換える必要があると思うのですが、どうすると良いでしょうか。
・install.c を書換えてよい
・DISKLABEL_CMD の中にコードを埋込む
・その他
そうして更に、その
Apple map of BSD label をどうやって判別するかというのもあります。
(付けたものは一応途中までは動きますが、まだ修正途中のものです)
--- /usr/src/distrib/utils/sysinst/arch/macppc/md.c-oo Sun Jan 14 20:22:26 2001
+++ md.c Sat Jun 23 09:53:02 2001
@@ -138,11 +138,25 @@
{
const char *bootfile = target_expand("/boot"); /*XXX*/
+ if (md_get_info()) {
+
+ printf ("Proceeding for installboot.\n");
+process_menu(MENU_noyes);
+ if (!yesno) { msg_display(MSG_abort);
+ process_menu(MENU_ok);
+ return 0;}
+
printf (msg_string(MSG_dobootblks), diskdev);
cp_to_target("/usr/mdec/ofwboot", "/boot");
sync();
run_prog(RUN_DISPLAY, NULL, "/usr/mdec/installboot %s %s /dev/r%sa",
bootfile, "/usr/mdec/bootxx", diskdev);
+ }
+ else {
+ printf (msg_string(MSG_applelabelexists), diskdev);
+ printf ("Label looks like Apples one. Will not run installboot\n");
+process_menu(MENU_noyes);}
+
return 0;
}
@@ -163,6 +177,8 @@
char isize[20];
int maxpart = getmaxpartitions();
+ struct disklabel disklabel;
+
/*
* Initialize global variables that track space used on this disk.
* Standard 4.3BSD 8-partition labels always cover whole disk.
@@ -318,10 +334,26 @@
remain = fsdsize - partstart;
part++;
}
+ case 4: /* Use Existing */
+ if (get_real_geom(diskdev,&disklabel ) == 0) {
+ msg_display(MSG_abort); /* XXX more informative */
+ }
+ for (i = 0; i < maxpart; i++) {
+#define p disklabel.d_partitions[i]
+ bsdlabel[i].pi_size = p.p_size;
+ bsdlabel[i].pi_offset = p.p_offset;
+ if (i != RAW_PART) {
+ bsdlabel[i].pi_fstype = p.p_fstype;
+ bsdlabel[i].pi_bsize = p.p_fsize * p.p_frag;
+ bsdlabel[i].pi_fsize = p.p_fsize;
+ /* menu to get fsmount[] entry */
+#undef p
+ } else
+ bsdlabel[i].pi_fstype = FS_UNUSED;
+ }
break;
}
-
/*
* OK, we have a partition table. Give the user the chance to
---
(藤原)
http://www.ki.nu/software/NetBSD/iBook2/