Module Name:    src
Committed By:   tsutsui
Date:           Wed Feb 19 12:14:41 UTC 2014

Modified Files:
        src/distrib/utils/sysinst: bsddisklabel.c
        src/distrib/utils/sysinst/arch/luna68k: md.c md.h msg.md.en

Log Message:
Improve luna68k md part of sysinst.

- setup a boot UFS partition and install native bootloader
- add messages how to setup NVRAM variables for firmware to load bootloader
- enable swap on <= 32MB machines


To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 src/distrib/utils/sysinst/bsddisklabel.c
cvs rdiff -u -r1.2 -r1.3 src/distrib/utils/sysinst/arch/luna68k/md.c \
    src/distrib/utils/sysinst/arch/luna68k/md.h
cvs rdiff -u -r1.1 -r1.2 src/distrib/utils/sysinst/arch/luna68k/msg.md.en

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/utils/sysinst/bsddisklabel.c
diff -u src/distrib/utils/sysinst/bsddisklabel.c:1.59 src/distrib/utils/sysinst/bsddisklabel.c:1.60
--- src/distrib/utils/sysinst/bsddisklabel.c:1.59	Mon Nov  4 20:07:49 2013
+++ src/distrib/utils/sysinst/bsddisklabel.c	Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bsddisklabel.c,v 1.59 2013/11/04 20:07:49 christos Exp $	*/
+/*	$NetBSD: bsddisklabel.c,v 1.60 2014/02/19 12:14:40 tsutsui Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -594,7 +594,12 @@ make_bsd_partitions(void)
 		i = (i + dlcylsize * sectorsize - 1) / (dlcylsize * sectorsize);
 		i *= dlcylsize;
 	}
+#if defined(PART_BOOT_FFS)
+	bsdlabel[PART_BOOT].pi_fstype = FS_BSDFFS;
+	bsdlabel[PART_BOOT].pi_flags = PIF_NEWFS;
+#else
 	bsdlabel[PART_BOOT].pi_fstype = FS_BOOT;
+#endif
 	bsdlabel[PART_BOOT].pi_size = i;
 #ifdef BOOT_HIGH
 	bsdlabel[PART_BOOT].pi_offset = ptend - i;

Index: src/distrib/utils/sysinst/arch/luna68k/md.c
diff -u src/distrib/utils/sysinst/arch/luna68k/md.c:1.2 src/distrib/utils/sysinst/arch/luna68k/md.c:1.3
--- src/distrib/utils/sysinst/arch/luna68k/md.c:1.2	Fri Nov  4 11:27:03 2011
+++ src/distrib/utils/sysinst/arch/luna68k/md.c	Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: md.c,v 1.2 2011/11/04 11:27:03 martin Exp $	*/
+/*	$NetBSD: md.c,v 1.3 2014/02/19 12:14:40 tsutsui Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -38,7 +38,9 @@
 #include <sys/disklabel.h>
 #include <sys/ioctl.h>
 #include <sys/param.h>
+#include <sys/stat.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <curses.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -49,6 +51,9 @@
 #include "msg_defs.h"
 #include "menu_defs.h"
 
+#define PART_BOOT_BSIZE	4096
+#define PART_BOOT_FSIZE	512
+
 void
 md_init(void)
 {
@@ -120,6 +125,16 @@ int
 md_check_partitions(void)
 {
 
+	/*
+	 * Make sure that a boot partition (old 4.3BSD UFS) is prepared
+	 * properly for our native bootloader.
+	 */
+	if (bsdlabel[PART_BOOT].pi_fstype != FS_BSDFFS ||
+	    (bsdlabel[PART_BOOT].pi_flags & PIF_NEWFS) == 0) {
+		msg_display(MSG_nobootpartdisklabel);
+		process_menu(MENU_ok, NULL);
+		return 0;
+	}
 	return 1;
 }
 
@@ -140,29 +155,45 @@ int
 md_post_disklabel(void)
 {
 
+	if (get_ramsize() <= 32)
+		set_swap(diskdev, bsdlabel);
+
+	return 0;
+}
+
+static int
+copy_bootloader(void)
+{
+	const char *mntdir = "/mnt2";
+
+	msg_display(MSG_copybootloader, diskdev);
+	if (!run_program(RUN_SILENT | RUN_ERROR_OK,
+	    "mount /dev/%s%c %s", diskdev, 'a' + PART_BOOT, mntdir)) {
+		mnt2_mounted = 1;
+		run_program(0, "/bin/cp /usr/mdec/boot %s", mntdir);
+		run_program(RUN_SILENT | RUN_ERROR_OK, "umount %s", mntdir);
+		mnt2_mounted = 0;
+	} else {
+		/* XXX print proper error message */
+		return 1;
+	}
 	return 0;
 }
 
 /*
- * hook called after upgrade() or install() has finished setting
- * up the target disk but immediately before the user is given the
- * ``disks are now set up'' message.
- *
- * On the news68k, we use this opportunity to install the boot blocks.
+ * hook called after install() has finished setting up the target disk
+ * but immediately before the user is given the ``disks are now set up''
+ * message.
  */
 int
 md_post_newfs(void)
 {
-#if 0	/* no bootloader (yet) */
-	const char *bootfile = "/boot";
 
-	printf(msg_string(MSG_dobootblks), diskdev);
-	cp_to_target("/usr/mdec/boot", bootfile);
-	sync();
-	run_program(RUN_DISPLAY, "/usr/sbin/installboot /dev/r%sc %s %s",
-	    diskdev, "/usr/mdec/bootxx", bootfile);
-#endif
-	return 0;
+	if (run_program(RUN_DISPLAY | RUN_PROGRESS,
+	    "/sbin/newfs -V2 -O 0 -b %d -f %d /dev/r%s%c",
+	    PART_BOOT_BSIZE, PART_BOOT_FSIZE, diskdev, 'a' + PART_BOOT))
+		return 1;
+	return copy_bootloader();
 }
 
 int
@@ -179,12 +210,17 @@ md_cleanup_install(void)
 #ifndef DEBUG
 	enable_rc_conf();
 #endif
+	msg_display(MSG_howtoboot);
+	process_menu(MENU_ok, NULL);
 }
 
 int
 md_pre_update(void)
 {
 
+	if (get_ramsize() <= 32)
+		set_swap(diskdev, bsdlabel);
+
 	return 1;
 }
 
@@ -192,8 +228,26 @@ md_pre_update(void)
 int
 md_update(void)
 {
+	const char *mntdir = "/mnt2";
+	char bootpath[MAXPATHLEN];
+	struct stat sb;
+	bool hasboot = false;
 
-	md_post_newfs();
+	/*
+	 * Check if there is a boot UFS parttion and it has the old bootloader.
+	 * We'll update bootloader only if the old one was installed.
+	 */
+	if (!run_program(RUN_SILENT | RUN_ERROR_OK,
+	    "mount -r /dev/%s%c %s", diskdev, 'a' + PART_BOOT, mntdir)) {
+		mnt2_mounted = 1;
+		snprintf(bootpath, sizeof(bootpath), "%s/%s", mntdir, "boot");
+		if (stat(bootpath, &sb) == 0 && S_ISREG(sb.st_mode))
+			hasboot = true;
+		run_program(RUN_SILENT | RUN_ERROR_OK, "umount %s", mntdir);
+		mnt2_mounted = 0;
+		if (hasboot)
+			(void)copy_bootloader();
+	}
 	return 1;
 }
 
Index: src/distrib/utils/sysinst/arch/luna68k/md.h
diff -u src/distrib/utils/sysinst/arch/luna68k/md.h:1.2 src/distrib/utils/sysinst/arch/luna68k/md.h:1.3
--- src/distrib/utils/sysinst/arch/luna68k/md.h:1.2	Tue May 14 13:08:57 2013
+++ src/distrib/utils/sysinst/arch/luna68k/md.h	Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: md.h,v 1.2 2013/05/14 13:08:57 tsutsui Exp $	*/
+/*	$NetBSD: md.h,v 1.3 2014/02/19 12:14:40 tsutsui Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -43,8 +43,12 @@
 #define PART_ROOT	PART_A
 #define PART_SWAP	PART_B
 #define PART_RAW	PART_C
+#define PART_BOOT	PART_D
 #define PART_USR	PART_G	/* Can be after PART_FIRST_FREE */
-#define PART_FIRST_FREE	PART_D
+#define PART_FIRST_FREE	PART_E
+
+#define PART_BOOT_FFS
+#define BOOT_SIZE	(8 * 1024 * 1024)	/* for a.out kernel and boot */
 
 #define DEFSWAPRAM	8	/* Assume at least this RAM for swap calc */
 #define DEFROOTSIZE	64	/* Default root size */

Index: src/distrib/utils/sysinst/arch/luna68k/msg.md.en
diff -u src/distrib/utils/sysinst/arch/luna68k/msg.md.en:1.1 src/distrib/utils/sysinst/arch/luna68k/msg.md.en:1.2
--- src/distrib/utils/sysinst/arch/luna68k/msg.md.en:1.1	Sat Jul 16 15:52:21 2011
+++ src/distrib/utils/sysinst/arch/luna68k/msg.md.en	Wed Feb 19 12:14:40 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg.md.en,v 1.1 2011/07/16 15:52:21 tsutsui Exp $	*/
+/*	$NetBSD: msg.md.en,v 1.2 2014/02/19 12:14:40 tsutsui Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -44,12 +44,30 @@ message md_may_remove_boot_medium
 {
 }
 
-message dobootblks
-{Installing boot blocks on %s....
+message nobootpartdisklabel
+{There is no boot UFS partition in the disklabel.  The boot partition should
+be prepared for the LUNA's firmware to load our native bootloader.}
+
+message copybootloader
+{Copying bootloader into the 4.3BSD boot partition on %s...
+}
+
+message howtoboot
+{The installation is almost complete. Note the installer doesn't set
+firmware NVRAM variables to load NetBSD's bootloader by default.
+
+To boot NetBSD, you need to set boot NVRAM variables 'drv'
+(or 'id' on LUNA-II), 'par' (partition, should be 'd'), and 'fname'
+(filename, should be 'boot') by 'k' (Set Boot-file constant) command.
+
+On LUNA-I, drv 0 is SCSI ID 6 disk, and drv 1 is SCSI ID 5 disk.
+The firmware can't boot from other SCSI ID disks. 
+On LUNA-II, 'id' is SCSI ID and you can also specify the external SCSI
+controller number (1) like '1-6'.
+
+Check 'h' (Help) and 'hk' (Help of 'k' command) commands on the firmware
+prompt for more details.
 }
 
 message set_kernel_1
 {Kernel (GENERIC)}
-message set_kernel_2
-{Kernel (GENERIC_TINY)}
-

Reply via email to