autopart now guesses the bios drive number and the setup script tells it

to the user.

minixsize has fallback default sizes set before specifics set by input list.
This commit is contained in:
Ben Gras 2005-08-31 15:48:15 +00:00
parent 4d3e666043
commit 509394f2ba
3 changed files with 17 additions and 13 deletions

View File

@ -280,6 +280,7 @@ typedef struct device {
char *name; /* E.g. /dev/c0d0 */
char *subname; /* E.g. /dev/c0d0:2 */
parttype_t parttype;
int biosdrive;
} device_t;
typedef struct region {
@ -307,6 +308,7 @@ device_t *firstdev= nil, *curdev;
static struct {
device_t *dev;
int nr_partitions, free_regions, used_regions, sectors, nr_regions;
int biosdrive;
region_t regions[NR_REGIONS];
} devices[MAX_DEVICES];
@ -1840,7 +1842,7 @@ void regionize(void)
}
void m_read(int ev, object_t *op)
void m_read(int ev, int *biosdrive)
/* Read the partition table from the current device. */
{
int si, i, mode, n, r, v;
@ -1860,15 +1862,6 @@ void m_read(int ev, object_t *op)
v = 2*HZ;
ioctl(device, DIOCTIMEOUT, &v);
/* Assume up to five lines of kernel messages. */
statusrow+= 5-1;
stat_end(5);
if (mode == O_RDONLY) {
stat_start(1);
printf("%s: Readonly", curdev->name);
stat_end(5);
}
memset(bootblock, 0, sizeof(bootblock));
n= boot_readwrite(0);
@ -1887,6 +1880,8 @@ void m_read(int ev, object_t *op)
if (n < SECTOR_SIZE) n= SECTOR_SIZE;
if(biosdrive) (*biosdrive)++;
if(!open_ct_ok(device)) {
printf("\n%s: device in use! skipping it.", curdev->subname);
fflush(stdout);
@ -2139,7 +2134,7 @@ void event(int ev, object_t *op)
m_magic(ev, op);
m_in(ev, op);
m_out(ev, op);
m_read(ev, op);
m_read(ev, NULL);
m_write(ev, op);
m_shell(ev, op);
m_quit(ev, op);
@ -2437,6 +2432,7 @@ select_disk(void)
int done = 0;
int i, choice, drives;
static char line[500];
int biosdrive = 0;
printstep(1, "Select a disk to install MINIX 3");
printf("\nProbing for disks. This may take a short while.");
@ -2447,7 +2443,7 @@ select_disk(void)
for(; i < MAX_DEVICES;) {
printf(".");
fflush(stdout);
m_read('r', NULL);
m_read('r', &biosdrive);
if(device >= 0) {
devices[i].dev = curdev;
devices[i].free_regions = free_regions;
@ -2455,6 +2451,7 @@ select_disk(void)
devices[i].nr_partitions = nr_partitions;
devices[i].used_regions = used_regions;
devices[i].sectors = table[0].size;
curdev->biosdrive = biosdrive-1;
memcpy(devices[i].regions, regions, sizeof(regions));
i++;
}
@ -2688,7 +2685,9 @@ do_autopart(int resultfd)
name=strrchr(curdev->name, '/');
if(!name) name = curdev->name;
else name++;
sprintf(partbuf, "%sp%d\n", name, found-1);
sprintf(partbuf, "%sp%d d%dp%d\n", name, found-1,
curdev->biosdrive, found-1);
sprintf(devname, "/dev/%sp%d", name, found-1);
if(resultfd >= 0 && write(resultfd, partbuf, strlen(partbuf)) < strlen(partbuf)) {
fprintf(stderr, "Autopart internal error (couldn't write result).\n");

View File

@ -3,6 +3,7 @@ t=/usr/src/etc/binary_sizes
if [ "$1" = big ]
then t=$t.big
fi
chmem =200000 /usr/lib/* /usr/lib/i386/*
if [ -f $t ]
then cat "$t" | while read line
do awk '{ print "chmem =" $2 " " $1 }'

View File

@ -172,6 +172,7 @@ echo -n "Are you sure you want to continue? Please enter 'yes' or 'no': "
read confirmation
if [ "$confirmation" = yes ]; then step2=ok; fi
done
biosdrivename="Actual BIOS device name unknown, due to expert mode."
else
# Automatic mode
@ -182,6 +183,8 @@ else
then if [ -s "$PF" ]
then
bd="`cat $PF`"
cat "$PF" | read bd bdn
biosdrivename="Probably, the right command is \"boot $bdn\"."
if [ -b "/dev/$bd" ]
then primary="$bd"
else echo "Funny device $bd from autopart."
@ -440,6 +443,7 @@ echo "
Please type 'shutdown' to exit MINIX 3 and enter the boot monitor. At
the boot monitor prompt, type 'boot $bios', where X is the bios drive
number of the drive you installed on, to try your new MINIX system.
$biosdrivename
This ends the MINIX setup script. After booting your newly set up system,
you can run the test suites as indicated in the setup manual. You also