69eead77ff
The CD now boots directly from the ISO 9660 filesystem instead of using MBR partitioning with Minix file systems. This saves some space on the CD and reduces memory requirements by some unknown amount as the root ramdisk is completely eliminated. The x86 hard drive image creation is also rewritten in the same fashion. The setup is modified to be more NetBSD-like (unpacking sets tarballs instead of blindly copying the CD contents). Splitting MINIX into sets is done in another commit due to it being a nightmare to rebase. Since MINIX lacks union mounts for now, a bunch of ramdisks are generated at run-time to make parts of the filesystem writeable for the CD. This solution isn't ideal, but it's enough for an installation CD. Change-Id: Icbd9cca4dafebf7b42c345b107a17679a622d5cd
219 lines
6.2 KiB
Makefile
219 lines
6.2 KiB
Makefile
# Makefile for ramdisk image
|
|
.include <bsd.own.mk>
|
|
|
|
USE_BITCODE:=no
|
|
|
|
install:
|
|
|
|
all:
|
|
|
|
# Add a few defines we are going to use during the image
|
|
# creation to determine what features and binaries to include
|
|
# in the final image
|
|
# ACPI do we have/include the acpi binary
|
|
# RAMDISK_SMALL is the script called with MKSMALL=yes
|
|
# DYNAMIC does the ramdisk contain dynamic binaries?
|
|
RAMDISK_INC_ACPI= 0
|
|
RAMDISK_SMALL= 0
|
|
RAMDISK_DYNAMIC= 0
|
|
|
|
RAMDISK_DEFINES= \
|
|
-DRAMDISK_INC_ACPI=${RAMDISK_INC_ACPI} \
|
|
-DRAMDISK_SMALL=${RAMDISK_SMALL} \
|
|
-DRAMDISK_DYNAMIC=${RAMDISK_DYNAMIC}
|
|
|
|
# The name of the proto file to use
|
|
PROTO= proto
|
|
|
|
# Common to all architectures
|
|
ETC= system.conf group
|
|
EXTRA= rc
|
|
PROTO_FILES= proto.common.etc
|
|
PROTO_FILES+= proto.common.dynamic
|
|
PROGRAMS= # defined
|
|
PROGRAMS+= fsck_mfs
|
|
dir.fsck_mfs:= minix/commands/fsck.mfs
|
|
PROGRAMS+= grep
|
|
dir.grep:= minix/usr.bin/grep
|
|
PROGRAMS+= input
|
|
dir.input:= minix/servers/input
|
|
PROGRAMS+= loadramdisk
|
|
dir.loadramdisk:= minix/commands/loadramdisk
|
|
PROGRAMS+= mfs
|
|
dir.mfs:= minix/fs/mfs
|
|
PROGRAMS+= mount
|
|
dir.mount:= minix/commands/mount
|
|
PROGRAMS+= procfs
|
|
dir.procfs:= minix/fs/procfs
|
|
PROGRAMS+= service
|
|
dir.service:= minix/commands/service
|
|
PROGRAMS+= sh
|
|
dir.sh:= bin/sh
|
|
PROGRAMS+= sysenv
|
|
dir.sysenv:= minix/commands/sysenv
|
|
PROGRAMS+= umount
|
|
dir.umount:= minix/commands/umount
|
|
|
|
.if ${MKSMALL} != "yes"
|
|
RAMDISK_SMALL= 1
|
|
.endif
|
|
|
|
.if ${MACHINE_ARCH} == "i386"
|
|
ETC+= rs.single
|
|
PROGRAMS+= at_wini
|
|
dir.at_wini:= minix/drivers/storage/at_wini
|
|
PROGRAMS+= floppy
|
|
dir.floppy:= minix/drivers/storage/floppy
|
|
PROGRAMS+= pci
|
|
dir.pci:= minix/drivers/bus/pci
|
|
PROGRAMS+= pckbd
|
|
dir.pckbd:= minix/drivers/hid/pckbd
|
|
PROGRAMS+= cdprobe
|
|
dir.cdprobe:= minix/commands/cdprobe
|
|
PROGRAMS+= pwd_mkdb
|
|
dir.pwd_mkdb:= usr.sbin/pwd_mkdb
|
|
PROGRAMS+= isofs
|
|
dir.isofs:= minix/fs/isofs
|
|
|
|
.if ${MKSMALL} != "yes"
|
|
PROGRAMS+= ahci
|
|
dir.ahci:= minix/drivers/storage/ahci
|
|
PROGRAMS+= virtio_blk
|
|
dir.virtio_blk:= minix/drivers/storage/virtio_blk
|
|
PROGRAMS+= ext2
|
|
dir.ext2:= minix/fs/ext2
|
|
.endif
|
|
|
|
.if ${MKACPI} != "no"
|
|
RAMDISK_INC_ACPI= 1
|
|
PROGRAMS+= acpi
|
|
dir.acpi:= minix/drivers/power/acpi
|
|
.endif
|
|
.endif # ${MACHINE_ARCH} == "i386"
|
|
|
|
.if ${MACHINE_ARCH} == "earm"
|
|
PROGRAMS+= mmc
|
|
dir.mmc:= minix/drivers/storage/mmc
|
|
.endif # ${MACHINE_ARCH} == "earm"
|
|
|
|
.if ${LDSTATIC} == "-dynamic"
|
|
RAMDISK_DYNAMIC= 1
|
|
PROGRAMS+= ld.elf_so
|
|
PROG_LIBS+= libc
|
|
PROG_MINIXLIBS+= libterminfo
|
|
.endif
|
|
|
|
CPPFLAGS+= -I${NETBSDSRCDIR}/servers
|
|
|
|
# LSC We have to take care of not erasing the source file, so never add EXTRA
|
|
# to CLEANFILES
|
|
CLEANFILES += ${PROGRAMS} ${SCRIPTS} ${ETC} image image.c
|
|
CLEANFILES += proto.gen proto.dev proto.dev.mtree
|
|
CLEANFILES += ${PROG_LIBEXEC}
|
|
CLEANFILES += ${.OBJDIR}/etc/*
|
|
|
|
#############################################################
|
|
# LSC Below this point the rules should not be modified
|
|
#############################################################
|
|
|
|
# Tool to bootstrap the password db
|
|
TOOL_PWD_MKDB?= ${NETBSDSRCDIR}/usr.sbin/pwd_mkdb/pwd_mkdb
|
|
|
|
# Remove "drivers/storage/ramdisk" component from path
|
|
PROGROOT:= ${.OBJDIR:S,/minix/drivers/storage/ramdisk,,}
|
|
|
|
# Generate dependencies rules for config files
|
|
.for etc in ${ETC}
|
|
etc/${etc}: ${NETBSDSRCDIR}/etc/${etc}
|
|
mkdir -p ${.OBJDIR}/etc
|
|
${INSTALL} $> $@
|
|
.endfor
|
|
|
|
# LSC Force the regeneration of the proto file as it seems sometimes
|
|
# they are not copied over as needed.
|
|
# LSC ramdisk rc file != /etc/rc
|
|
# BJG if ${.CURDIR} == ${.OBJDIR}, we are building in-tree and install
|
|
# shouldn't try to install the originals over the originals. Otherwise
|
|
# we are building out-of-tree and the contents should be copied
|
|
# unconditionally in case the contents have changed after the first copy.
|
|
.if ${.CURDIR} != ${.OBJDIR}
|
|
.for file in ${EXTRA} ${PROTO} ${PROTO_FILES}
|
|
CLEANFILES += ${.OBJDIR}/${file}
|
|
${file}: ${NETBSDSRCDIR}/minix/drivers/storage/ramdisk/${file} .PHONY
|
|
${INSTALL} $> $@
|
|
.endfor
|
|
.endif
|
|
|
|
# Generate dependencies rules for dynamic libraries, if needed
|
|
.for lib in ${PROG_LIBS}
|
|
PROGRAMS+= ${lib}.so.0
|
|
CLEANFILES += ${lib}.so.0
|
|
${lib}.so.0:${PROGROOT}/lib/${lib}/${lib}.so.0
|
|
${INSTALL} $> $@
|
|
|
|
# BJG - Don't invoke parallel Makes
|
|
#${PROGROOT}/lib/${lib}/${lib}.so.0:
|
|
# ${MAKE} -C ${NETBSDSRCDIR}/lib/${lib} all
|
|
.endfor
|
|
|
|
.for lib in ${PROG_MINIXLIBS}
|
|
PROGRAMS+= ${lib}.so.0
|
|
CLEANFILES += ${lib}.so.0
|
|
${lib}.so.0:${PROGROOT}/minix/lib/${lib}/${lib}.so.0
|
|
${INSTALL} $> $@
|
|
|
|
# BJG - Don't invoke parallel Makes
|
|
#${PROGROOT}/minix/lib/${lib}/${lib}.so.0:
|
|
# ${MAKE} -C ${NETBSDSRCDIR}/minix/lib/${lib} all
|
|
.endfor
|
|
|
|
# Generate dependencies rules for binaries
|
|
.for prog in ${PROGRAMS}
|
|
${prog}: ${PROGROOT}/${dir.${prog}}/${prog}
|
|
${INSTALL} $> $@
|
|
|
|
# BJG - don't invoke parallel Makes
|
|
#${PROGROOT}/${dir.${prog}}/${prog}:
|
|
# ${MAKE} -C ${NETBSDSRCDIR}/${dir.${prog}} all
|
|
.endfor # prog
|
|
|
|
realall image: proto.gen ${ETC:C/^/etc\//} ${EXTRA} \
|
|
etc/master.passwd etc/pwd.db etc/spwd.db etc/passwd etc/group
|
|
${_MKMSG_CREATE} "Generating ramdisk image"
|
|
${TOOL_MKFSMFS} image proto.gen || { rm -f image; false; }
|
|
|
|
etc/pwd.db etc/spwd.db etc/passwd: etc/master.passwd
|
|
|
|
etc/master.passwd: ${NETBSDSRCDIR}/etc/master.passwd
|
|
mkdir -p ${.OBJDIR}/etc
|
|
${INSTALL} $> $@
|
|
${TOOL_PWD_MKDB} -V 0 -p -d . etc/master.passwd
|
|
|
|
proto.dev.mtree:
|
|
@echo ". type=dir uname=root gname=operator mode=0755" \
|
|
>${.TARGET}.tmp && \
|
|
echo "./dev type=dir uname=root gname=operator mode=0755" \
|
|
>>${.TARGET}.tmp && \
|
|
${NETBSDSRCDIR}/minix/commands/MAKEDEV/MAKEDEV.sh -m -r \
|
|
>> ${.TARGET}.tmp && mv ${.TARGET}.tmp ${.TARGET}
|
|
|
|
# We have to remove the two first entries of the generated proto file, as
|
|
# well as the two last ones (closing $).
|
|
# Do not forget to double $ so that make doesn't try to expand it.
|
|
proto.dev: proto.dev.mtree etc/pwd.db etc/spwd.db etc/passwd etc/group
|
|
${TOOL_MTREE} -f ${.TARGET}.mtree -N ${.OBJDIR}/etc -C -K device | \
|
|
${TOOL_TOPROTO} | ${TOOL_SED} -e '1,4d' | \
|
|
${TOOL_SED} -e '$$d' |${TOOL_SED} -e '$$d' > ${.TARGET}.tmp
|
|
grep console ${.TARGET}.tmp # sanity check; is there a console entry?
|
|
mv ${.TARGET}.tmp ${.TARGET}
|
|
|
|
proto.gen: ${PROTO} ${PROTO_FILES} proto.dev ${PROGRAMS}
|
|
${STRIP} ${PROGRAMS}
|
|
# We are using the c preprocessor to generate proto.gen
|
|
# used in the mkfs tool.
|
|
${TOOL_CAT} ${PROTO} | ${CC} \
|
|
${RAMDISK_DEFINES} \
|
|
-E - | grep -v "^$$" | grep -v "#" >${.TARGET}
|
|
|
|
.include <minix.service.mk>
|