multiple ram disks; also make release process use this
so temporary partitions aren't needed any more.
This commit is contained in:
parent
347fa61675
commit
e5079dfc02
5 changed files with 81 additions and 98 deletions
|
@ -77,7 +77,10 @@ do
|
|||
$e mknod boot b 1 4; $e chmod 600 ram
|
||||
$e mknod zero c 1 5; $e chmod 644 zero
|
||||
$e mknod imgrd b 1 6; $e chmod 644 zero
|
||||
$e chgrp kmem ram mem kmem null boot zero imgrd
|
||||
for n in 0 1 2 3 4 5
|
||||
do $e mknod ram$n b 1 $((7+$n)); $e chmod 600 ram$n
|
||||
done
|
||||
$e chgrp kmem ram* mem kmem null boot zero imgrd
|
||||
;;
|
||||
fd[0-3])
|
||||
# Floppy disk drive n.
|
||||
|
|
|
@ -11,17 +11,22 @@ main(int argc, char *argv[])
|
|||
{
|
||||
int fd;
|
||||
signed long size;
|
||||
if((fd=open(_PATH_RAMDISK, O_RDONLY)) < 0) {
|
||||
perror(_PATH_RAMDISK);
|
||||
char *d;
|
||||
|
||||
if(argc < 2 || argc > 3) {
|
||||
fprintf(stderr, "usage: %s <size in kB> [device]\n",
|
||||
argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(argc != 2) {
|
||||
fprintf(stderr, "usage: %s <size in bytes>\n", argv[0]);
|
||||
d = argc == 2 ? _PATH_RAMDISK : argv[2];
|
||||
if((fd=open(d, O_RDONLY)) < 0) {
|
||||
perror(d);
|
||||
return 1;
|
||||
}
|
||||
|
||||
size = atol(argv[1]);
|
||||
#define KFACTOR 1024
|
||||
size = atol(argv[1])*KFACTOR;
|
||||
|
||||
if(size <= 0) {
|
||||
fprintf(stderr, "size should be positive.\n");
|
||||
|
@ -33,6 +38,8 @@ main(int argc, char *argv[])
|
|||
return 1;
|
||||
}
|
||||
|
||||
fprintf(stderr, "size on %s set to %dkB\n", d, size/KFACTOR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,12 @@
|
|||
|
||||
#include "local.h"
|
||||
|
||||
#define NR_DEVS 7 /* number of minor devices */
|
||||
/* ramdisks (/dev/ram*) */
|
||||
#define RAMDISKS 6
|
||||
|
||||
#define RAM_DEV_LAST (RAM_DEV_FIRST+RAMDISKS-1)
|
||||
|
||||
#define NR_DEVS (7+RAMDISKS) /* number of minor devices */
|
||||
|
||||
PRIVATE struct device m_geom[NR_DEVS]; /* base and size of each device */
|
||||
PRIVATE vir_bytes m_vaddrs[NR_DEVS];
|
||||
|
@ -164,10 +169,15 @@ int safe; /* safe copies */
|
|||
if (opcode == DEV_GATHER_S) return(OK); /* always at EOF */
|
||||
break;
|
||||
|
||||
/* Virtual copying. For RAM disk, kernel memory and internal FS. */
|
||||
/* Virtual copying. For RAM disks, kernel memory and internal FS. */
|
||||
default:
|
||||
case KMEM_DEV:
|
||||
case RAM_DEV:
|
||||
case RAM_DEV_OLD:
|
||||
case IMGRD_DEV:
|
||||
/* Bogus number. */
|
||||
if(m_device < 0 || m_device >= NR_DEVS) {
|
||||
return(EINVAL);
|
||||
}
|
||||
if(!dev_vaddr || dev_vaddr == (vir_bytes) MAP_FAILED) {
|
||||
printf("MEM: dev %d not initialized\n", m_device);
|
||||
return EIO;
|
||||
|
@ -265,9 +275,6 @@ int safe; /* safe copies */
|
|||
}
|
||||
break;
|
||||
|
||||
/* Unknown (illegal) minor device. */
|
||||
default:
|
||||
return(EINVAL);
|
||||
}
|
||||
|
||||
/* Book the number of bytes transferred. */
|
||||
|
@ -364,34 +371,47 @@ int safe;
|
|||
switch (m_ptr->REQUEST) {
|
||||
case MIOCRAMSIZE: {
|
||||
/* Someone wants to create a new RAM disk with the given size. */
|
||||
static int first_time= 1;
|
||||
|
||||
u32_t ramdev_size;
|
||||
int s;
|
||||
int s, dev;
|
||||
void *mem;
|
||||
|
||||
/* A ramdisk can be created only once, and only on RAM disk device. */
|
||||
if (!first_time) return(EPERM);
|
||||
if (m_ptr->DEVICE != RAM_DEV) return(EINVAL);
|
||||
if ((dv = m_prepare(m_ptr->DEVICE)) == NIL_DEV) return(ENXIO);
|
||||
dev = m_ptr->DEVICE;
|
||||
if(dev < 0 || dev >= NR_DEVS) {
|
||||
printf("MEM: MIOCRAMSIZE: %d not a valid device\n", dev);
|
||||
}
|
||||
if((dev < RAM_DEV_FIRST || dev > RAM_DEV_LAST) && dev != RAM_DEV_OLD) {
|
||||
printf("MEM: MIOCRAMSIZE: %d not a ramdisk\n", dev);
|
||||
}
|
||||
if ((dv = m_prepare(dev)) == NIL_DEV) return(ENXIO);
|
||||
|
||||
/* Get request structure */
|
||||
s= sys_safecopyfrom(m_ptr->IO_ENDPT, (vir_bytes)m_ptr->IO_GRANT,
|
||||
0, (vir_bytes)&ramdev_size, sizeof(ramdev_size), D);
|
||||
if (s != OK)
|
||||
return s;
|
||||
if(m_vaddrs[dev] && !cmp64(dv->dv_size, cvul64(ramdev_size))) {
|
||||
return(OK);
|
||||
}
|
||||
if(m_vaddrs[dev]) {
|
||||
printf("MEM: MIOCRAMSIZE: %d already has a ramdisk\n", dev);
|
||||
return(EPERM);
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
printf("allocating ramdisk of size 0x%x\n", ramdev_size);
|
||||
printf("MEM:%d: allocating ramdisk of size 0x%x\n", dev, ramdev_size);
|
||||
#endif
|
||||
|
||||
/* Try to allocate a piece of memory for the RAM disk. */
|
||||
if((m_vaddrs[RAM_DEV] = (vir_bytes) mmap(0, ramdev_size, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0)) == (vir_bytes) MAP_FAILED) {
|
||||
if((mem = mmap(0, ramdev_size, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0)) == MAP_FAILED) {
|
||||
printf("MEM: failed to get memory for ramdisk\n");
|
||||
return(ENOMEM);
|
||||
}
|
||||
|
||||
m_vaddrs[dev] = (vir_bytes) mem;
|
||||
|
||||
dv->dv_size = cvul64(ramdev_size);
|
||||
first_time= 0;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,13 +15,14 @@ enum dev_style { STYLE_DEV, STYLE_NDEV, STYLE_TTY, STYLE_CLONE };
|
|||
|
||||
/* Major and minor device numbers for MEMORY driver. */
|
||||
#define MEMORY_MAJOR 1 /* major device for memory devices */
|
||||
# define RAM_DEV 0 /* minor device for /dev/ram */
|
||||
# define RAM_DEV_OLD 0 /* minor device for /dev/ram */
|
||||
# define MEM_DEV 1 /* minor device for /dev/mem */
|
||||
# define KMEM_DEV 2 /* minor device for /dev/kmem */
|
||||
# define NULL_DEV 3 /* minor device for /dev/null */
|
||||
# define BOOT_DEV 4 /* minor device for /dev/boot */
|
||||
# define ZERO_DEV 5 /* minor device for /dev/zero */
|
||||
# define IMGRD_DEV 6 /* minor device for /dev/imgrd */
|
||||
# define RAM_DEV_FIRST 7 /* first minor device for /dev/ram* */
|
||||
|
||||
#define CTRLR(n) ((n)==0 ? 3 : (8 + 2*((n)-1))) /* magic formula */
|
||||
|
||||
|
|
104
tools/release.sh
104
tools/release.sh
|
@ -5,6 +5,9 @@ set -e
|
|||
XBIN=usr/xbin
|
||||
SRC=src
|
||||
|
||||
# size of /tmp during build
|
||||
TMPKB=32000
|
||||
|
||||
PACKAGEDIR=/usr/bigports/Packages
|
||||
PACKAGESOURCEDIR=/usr/bigports/Sources
|
||||
secs=`expr 32 '*' 64`
|
||||
|
@ -12,7 +15,7 @@ export SHELL=/bin/sh
|
|||
|
||||
make_hdimage()
|
||||
{
|
||||
dd if=$TMPDISK of=usrimage bs=$BS count=$USRBLOCKS
|
||||
dd if=$TMPDISK1 of=usrimage bs=$BS count=$USRBLOCKS
|
||||
|
||||
rootsize=`stat -size rootimage`
|
||||
usrsize=`stat -size usrimage`
|
||||
|
@ -133,87 +136,36 @@ do
|
|||
done
|
||||
|
||||
USRMB=550
|
||||
|
||||
USRBLOCKS="`expr $USRMB \* 1024 \* 1024 / $BS`"
|
||||
USRSECTS="`expr $USRMB \* 1024 \* 2`"
|
||||
USRKB=$(($USRMB*1024))
|
||||
USRBLOCKS=$(($USRMB * 1024 * 1024 / $BS))
|
||||
USRSECTS=$(($USRMB * 1024 * 2))
|
||||
ROOTKB=4096
|
||||
ROOTSECTS="`expr $ROOTKB \* 2`"
|
||||
ROOTBLOCKS="`expr $ROOTKB \* 1024 / $BS`"
|
||||
ROOTSECTS=$(($ROOTKB * 2))
|
||||
ROOTBLOCKS=$(($ROOTKB * 1024 / $BS))
|
||||
|
||||
if [ "$COPY" -ne 1 ]
|
||||
then
|
||||
echo "Note: this script wants to do svn operations."
|
||||
fi
|
||||
|
||||
TD1=.td1
|
||||
TD2=.td2
|
||||
TD3=.td3
|
||||
TMPDISK1=/dev/ram0
|
||||
TMPDISK2=/dev/ram1
|
||||
TMPDISK3=/dev/ram2
|
||||
|
||||
|
||||
if [ -f $TD1 ]
|
||||
then TMPDISK="`cat $TD1`"
|
||||
echo " * Warning: I'm going to overwrite $TMPDISK!"
|
||||
else
|
||||
echo "Temporary (sub)partition to use to make the /usr FS image? "
|
||||
echo "I need $USRMB MB. It will be mkfsed!"
|
||||
echo -n "Device: /dev/"
|
||||
read dev || exit 1
|
||||
TMPDISK=/dev/$dev
|
||||
fi
|
||||
|
||||
if [ -b $TMPDISK ]
|
||||
then :
|
||||
else echo "$TMPDISK is not a block device.."
|
||||
if [ ! -b $TMPDISK1 -o ! -b $TMPDISK2 -o ! $TMPDISK3 ]
|
||||
then echo "$TMPDISK1, $TMPDISK2 or $TMPDISK3 is not a block device.."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $TMPDISK >$TD1
|
||||
ramdisk $USRKB $TMPDISK1
|
||||
ramdisk $TMPKB $TMPDISK2
|
||||
ramdisk $ROOTKB $TMPDISK3
|
||||
|
||||
if [ -f $TD2 ]
|
||||
then TMPDISK2="`cat $TD2`"
|
||||
echo " * Warning: I'm going to overwrite $TMPDISK2!"
|
||||
else
|
||||
echo "Temporary (sub)partition to use for /tmp? "
|
||||
echo "It will be mkfsed!"
|
||||
echo -n "Device: /dev/"
|
||||
read dev || exit 1
|
||||
TMPDISK2=/dev/$dev
|
||||
fi
|
||||
|
||||
if [ -b $TMPDISK2 ]
|
||||
then :
|
||||
else echo "$TMPDISK2 is not a block device.."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $TMPDISK2 >$TD2
|
||||
|
||||
if [ -f $TD3 ]
|
||||
then TMPDISK3="`cat $TD3`"
|
||||
echo " * Warning: I'm going to overwrite $TMPDISK3!"
|
||||
else
|
||||
echo "It has to be at least $ROOTKB KB."
|
||||
echo ""
|
||||
echo "Temporary (sub)partition to use to make the root FS image? "
|
||||
echo "It will be mkfsed!"
|
||||
echo -n "Device: /dev/"
|
||||
read dev || exit 1
|
||||
TMPDISK3=/dev/$dev
|
||||
fi
|
||||
|
||||
if [ -b $TMPDISK3 ]
|
||||
then :
|
||||
else echo "$TMPDISK3 is not a block device.."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $TMPDISK3 >$TD3
|
||||
|
||||
umount $TMPDISK || true
|
||||
umount $TMPDISK1 || true
|
||||
umount $TMPDISK2 || true
|
||||
umount $TMPDISK3 || true
|
||||
|
||||
if [ $TMPDISK = $TMPDISK2 -o $TMPDISK = $TMPDISK3 -o $TMPDISK2 = $TMPDISK3 ]
|
||||
if [ $TMPDISK1 = $TMPDISK2 -o $TMPDISK1 = $TMPDISK3 -o $TMPDISK2 = $TMPDISK3 ]
|
||||
then
|
||||
echo "Temporary devices can't be equal."
|
||||
exit
|
||||
|
@ -223,17 +175,17 @@ echo " * Cleanup old files"
|
|||
rm -rf $RELEASEDIR $IMG $IMAGE $ROOTIMAGE $CDFILES image*
|
||||
mkdir -p $CDFILES || exit
|
||||
mkdir -p $RELEASEDIR
|
||||
mkfs -B $BS -b $ROOTBLOCKS $TMPDISK3 || exit
|
||||
mkfs $TMPDISK2 || exit
|
||||
mkfs -i 2000 -B $BS -b $ROOTBLOCKS $TMPDISK3 || exit
|
||||
mkfs -B 1024 -b $TMPKB $TMPDISK2 || exit
|
||||
echo " * mounting $TMPDISK3 as $RELEASEDIR"
|
||||
mount $TMPDISK3 $RELEASEDIR || exit
|
||||
mkdir -m 755 $RELEASEDIR/usr
|
||||
mkdir -m 1777 $RELEASEDIR/tmp
|
||||
mount $TMPDISK2 $RELEASEDIR/tmp
|
||||
|
||||
mkfs -B $BS -b $USRBLOCKS $TMPDISK || exit
|
||||
echo " * Mounting $TMPDISK as $RELEASEDIR/usr"
|
||||
mount $TMPDISK $RELEASEDIR/usr || exit
|
||||
mkfs -B $BS -b $USRBLOCKS $TMPDISK1 || exit
|
||||
echo " * Mounting $TMPDISK1 as $RELEASEDIR/usr"
|
||||
mount $TMPDISK1 $RELEASEDIR/usr || exit
|
||||
mkdir -p $RELEASEDIR/tmp
|
||||
mkdir -p $RELEASEDIR/usr/tmp
|
||||
mkdir -p $RELEASEDIR/$XBIN
|
||||
|
@ -347,18 +299,18 @@ fi
|
|||
echo $version_pretty, SVN revision $SVNREV, generated `date` >$RELEASEDIR/etc/version
|
||||
echo " * Counting files"
|
||||
extrakb=`du -s $RELEASEDIR/usr/install | awk '{ print $1 }'`
|
||||
expr `df $TMPDISK | tail -1 | awk '{ print $4 }'` - $extrakb >$RELEASEDIR/.usrkb
|
||||
expr `df $TMPDISK1 | tail -1 | awk '{ print $4 }'` - $extrakb >$RELEASEDIR/.usrkb
|
||||
find $RELEASEDIR/usr | fgrep -v /install/ | wc -l >$RELEASEDIR/.usrfiles
|
||||
find $RELEASEDIR -xdev | wc -l >$RELEASEDIR/.rootfiles
|
||||
echo " * Zeroing remainder of temporary areas"
|
||||
df $TMPDISK
|
||||
df $TMPDISK1
|
||||
df $TMPDISK3
|
||||
cp /dev/zero $RELEASEDIR/usr/.x 2>/dev/null || true
|
||||
rm $RELEASEDIR/usr/.x
|
||||
cp /dev/zero $RELEASEDIR/.x 2>/dev/null || true
|
||||
rm $RELEASEDIR/.x
|
||||
|
||||
umount $TMPDISK || exit
|
||||
umount $TMPDISK1 || exit
|
||||
umount $TMPDISK2 || exit
|
||||
umount $TMPDISK3 || exit
|
||||
|
||||
|
@ -393,7 +345,7 @@ else
|
|||
# number of sectors
|
||||
isosects=`expr $isosects + $isopad`
|
||||
( cat $IMG $ROOTIMAGE ;
|
||||
dd if=$TMPDISK bs=$BS count=$USRBLOCKS ) >m
|
||||
dd if=$TMPDISK1 bs=$BS count=$USRBLOCKS ) >m
|
||||
mv m $IMG
|
||||
# Make CD partition table
|
||||
installboot -m $IMG /usr/mdec/masterboot
|
||||
|
|
Loading…
Reference in a new issue