Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/distrib/utils/sysinst Improve luna68k md part of sysinst.
details: https://anonhg.NetBSD.org/src/rev/12d701474ab3
branches: trunk
changeset: 326814:12d701474ab3
user: tsutsui <tsutsui%NetBSD.org@localhost>
date: Wed Feb 19 12:14:40 2014 +0000
description:
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
diffstat:
distrib/utils/sysinst/arch/luna68k/md.c | 86 ++++++++++++++++++++++-----
distrib/utils/sysinst/arch/luna68k/md.h | 8 +-
distrib/utils/sysinst/arch/luna68k/msg.md.en | 30 +++++++-
distrib/utils/sysinst/bsddisklabel.c | 7 +-
4 files changed, 106 insertions(+), 25 deletions(-)
diffs (242 lines):
diff -r 7e539b48cdcd -r 12d701474ab3 distrib/utils/sysinst/arch/luna68k/md.c
--- a/distrib/utils/sysinst/arch/luna68k/md.c Wed Feb 19 11:40:31 2014 +0000
+++ b/distrib/utils/sysinst/arch/luna68k/md.c Wed Feb 19 12:14:40 2014 +0000
@@ -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 @@
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 @@
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 @@
#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 @@
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;
}
diff -r 7e539b48cdcd -r 12d701474ab3 distrib/utils/sysinst/arch/luna68k/md.h
--- a/distrib/utils/sysinst/arch/luna68k/md.h Wed Feb 19 11:40:31 2014 +0000
+++ b/distrib/utils/sysinst/arch/luna68k/md.h Wed Feb 19 12:14:40 2014 +0000
@@ -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 */
diff -r 7e539b48cdcd -r 12d701474ab3 distrib/utils/sysinst/arch/luna68k/msg.md.en
--- a/distrib/utils/sysinst/arch/luna68k/msg.md.en Wed Feb 19 11:40:31 2014 +0000
+++ b/distrib/utils/sysinst/arch/luna68k/msg.md.en Wed Feb 19 12:14:40 2014 +0000
@@ -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 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)}
-
diff -r 7e539b48cdcd -r 12d701474ab3 distrib/utils/sysinst/bsddisklabel.c
--- a/distrib/utils/sysinst/bsddisklabel.c Wed Feb 19 11:40:31 2014 +0000
+++ b/distrib/utils/sysinst/bsddisklabel.c Wed Feb 19 12:14:40 2014 +0000
@@ -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 @@
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;
Home |
Main Index |
Thread Index |
Old Index