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 *name; /* E.g. /dev/c0d0 */
char *subname; /* E.g. /dev/c0d0:2 */ char *subname; /* E.g. /dev/c0d0:2 */
parttype_t parttype; parttype_t parttype;
int biosdrive;
} device_t; } device_t;
typedef struct region { typedef struct region {
@ -307,6 +308,7 @@ device_t *firstdev= nil, *curdev;
static struct { static struct {
device_t *dev; device_t *dev;
int nr_partitions, free_regions, used_regions, sectors, nr_regions; int nr_partitions, free_regions, used_regions, sectors, nr_regions;
int biosdrive;
region_t regions[NR_REGIONS]; region_t regions[NR_REGIONS];
} devices[MAX_DEVICES]; } 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. */ /* Read the partition table from the current device. */
{ {
int si, i, mode, n, r, v; int si, i, mode, n, r, v;
@ -1860,15 +1862,6 @@ void m_read(int ev, object_t *op)
v = 2*HZ; v = 2*HZ;
ioctl(device, DIOCTIMEOUT, &v); 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)); memset(bootblock, 0, sizeof(bootblock));
n= boot_readwrite(0); n= boot_readwrite(0);
@ -1887,6 +1880,8 @@ void m_read(int ev, object_t *op)
if (n < SECTOR_SIZE) n= SECTOR_SIZE; if (n < SECTOR_SIZE) n= SECTOR_SIZE;
if(biosdrive) (*biosdrive)++;
if(!open_ct_ok(device)) { if(!open_ct_ok(device)) {
printf("\n%s: device in use! skipping it.", curdev->subname); printf("\n%s: device in use! skipping it.", curdev->subname);
fflush(stdout); fflush(stdout);
@ -2139,7 +2134,7 @@ void event(int ev, object_t *op)
m_magic(ev, op); m_magic(ev, op);
m_in(ev, op); m_in(ev, op);
m_out(ev, op); m_out(ev, op);
m_read(ev, op); m_read(ev, NULL);
m_write(ev, op); m_write(ev, op);
m_shell(ev, op); m_shell(ev, op);
m_quit(ev, op); m_quit(ev, op);
@ -2437,6 +2432,7 @@ select_disk(void)
int done = 0; int done = 0;
int i, choice, drives; int i, choice, drives;
static char line[500]; static char line[500];
int biosdrive = 0;
printstep(1, "Select a disk to install MINIX 3"); printstep(1, "Select a disk to install MINIX 3");
printf("\nProbing for disks. This may take a short while."); printf("\nProbing for disks. This may take a short while.");
@ -2447,7 +2443,7 @@ select_disk(void)
for(; i < MAX_DEVICES;) { for(; i < MAX_DEVICES;) {
printf("."); printf(".");
fflush(stdout); fflush(stdout);
m_read('r', NULL); m_read('r', &biosdrive);
if(device >= 0) { if(device >= 0) {
devices[i].dev = curdev; devices[i].dev = curdev;
devices[i].free_regions = free_regions; devices[i].free_regions = free_regions;
@ -2455,6 +2451,7 @@ select_disk(void)
devices[i].nr_partitions = nr_partitions; devices[i].nr_partitions = nr_partitions;
devices[i].used_regions = used_regions; devices[i].used_regions = used_regions;
devices[i].sectors = table[0].size; devices[i].sectors = table[0].size;
curdev->biosdrive = biosdrive-1;
memcpy(devices[i].regions, regions, sizeof(regions)); memcpy(devices[i].regions, regions, sizeof(regions));
i++; i++;
} }
@ -2688,7 +2685,9 @@ do_autopart(int resultfd)
name=strrchr(curdev->name, '/'); name=strrchr(curdev->name, '/');
if(!name) name = curdev->name; if(!name) name = curdev->name;
else 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); sprintf(devname, "/dev/%sp%d", name, found-1);
if(resultfd >= 0 && write(resultfd, partbuf, strlen(partbuf)) < strlen(partbuf)) { if(resultfd >= 0 && write(resultfd, partbuf, strlen(partbuf)) < strlen(partbuf)) {
fprintf(stderr, "Autopart internal error (couldn't write result).\n"); 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 ] if [ "$1" = big ]
then t=$t.big then t=$t.big
fi fi
chmem =200000 /usr/lib/* /usr/lib/i386/*
if [ -f $t ] if [ -f $t ]
then cat "$t" | while read line then cat "$t" | while read line
do awk '{ print "chmem =" $2 " " $1 }' 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 read confirmation
if [ "$confirmation" = yes ]; then step2=ok; fi if [ "$confirmation" = yes ]; then step2=ok; fi
done done
biosdrivename="Actual BIOS device name unknown, due to expert mode."
else else
# Automatic mode # Automatic mode
@ -182,6 +183,8 @@ else
then if [ -s "$PF" ] then if [ -s "$PF" ]
then then
bd="`cat $PF`" bd="`cat $PF`"
cat "$PF" | read bd bdn
biosdrivename="Probably, the right command is \"boot $bdn\"."
if [ -b "/dev/$bd" ] if [ -b "/dev/$bd" ]
then primary="$bd" then primary="$bd"
else echo "Funny device $bd from autopart." 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 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 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. 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, 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 you can run the test suites as indicated in the setup manual. You also