]> Zhao Yanbai Git Server - minix.git/commitdiff
dynamic executables on ramdisk support
authorBen Gras <ben@minix3.org>
Tue, 10 Apr 2012 02:07:51 +0000 (02:07 +0000)
committerBen Gras <ben@minix3.org>
Mon, 16 Apr 2012 12:06:09 +0000 (14:06 +0200)
See UPDATING about upgrading clang for dynamic linking.

. allow executables on ramdisk to be dynamically linked; this means
  putting a few required shared libraries and ld.elf_so on the ramdisk.
. this makes the ramdisk (usage) smaller when they are dynamic, but
  bigger when they're not.
. also we can safely ditch newroot and call mount directly as that is
  all newroot does.
. create proto.common to share a bunch of entries between
  small/nonsmall cases

commands/Makefile
commands/newroot/Makefile [deleted file]
commands/newroot/newroot.sh [deleted file]
docs/UPDATING
drivers/ramdisk/Makefile
drivers/ramdisk/proto
drivers/ramdisk/proto.common.dynamic [new file with mode: 0644]
drivers/ramdisk/proto.common.etc [new file with mode: 0644]
drivers/ramdisk/proto.sh
drivers/ramdisk/proto.small
drivers/ramdisk/rc

index 8be3ed5c749fc22f35207d2d53c35b6df00f90b3..747e07e909631270869a3c79a79d42b55bb4be0a 100644 (file)
@@ -18,7 +18,7 @@ SUBDIR=       add_route arp ash at awk \
        less lex loadkeys loadramdisk logger look lp \
        lpd ls lspci mail make  MAKEDEV \
        mdb  mesg mined mkfifo mkfs.mfs mknod \
-       mkproto mount mt netconf newroot nice acknm nohup \
+       mkproto mount mt netconf nice acknm nohup \
        nonamed od paste patch pax \
        ping postinstall poweroff pr prep printf printroot \
        profile progressbar pr_routes ps pwd pwdauth \
diff --git a/commands/newroot/Makefile b/commands/newroot/Makefile
deleted file mode 100644 (file)
index d23bb9d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-SCRIPTS= newroot.sh
-MAN=
-
-.include <bsd.prog.mk>
diff --git a/commands/newroot/newroot.sh b/commands/newroot/newroot.sh
deleted file mode 100644 (file)
index 1042c38..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-# Actually, newroot is just like mounting on the root
-exec mount -n "$*" / > /dev/null
-
index 3378358ed3e7597db04b624fc0bb7b2d0c08516d..9740f6cb5d220dd8e07ee6b76c625a7edc73a347 100644 (file)
@@ -1,3 +1,9 @@
+20120416:
+       Upgrade your clang to clang-2.9nb6 or clang-3.1nb3 to be able to
+       build shared libraries and dynamically linked executables. The
+       system will keep working without them, but a dynamic-capable
+       system will be a requirement soon.
+
 20120413:
        Boot loader menu now has an option to boot into single user mode. To
        get the menu option do:
index 682ae0ca7154e3e6677dd2c5c552b3fe3a829c74..6a44007098985f70bfcea178e8bb7b0ffdd1b47b 100644 (file)
@@ -2,34 +2,35 @@
 
 .include <bsd.own.mk>
 
-PROGRAMS= at_wini cdprobe dev2name floppy loadramdisk mount \
-       pci procfs sh service sysenv mfs fsck.mfs
-SCRIPTS=newroot
-
-.if ${MKSMALL} != "yes"
-PROGRAMS+= ahci ext2
-.endif
-
-.if ${MKACPI} != "no"
-PROGRAMS+= acpi
-.endif
+PROG_DRIVERS=at_wini floppy pci
+PROG_COMMANDS=cdprobe dev2name loadramdisk mount fsck.mfs sysenv sh \
+       service 
+PROG_SERVERS=mfs procfs
+PROG_USRSBIN=pwd_mkdb
+PROGRAMS=$(PROG_DRIVERS) $(PROG_COMMANDS) $(PROG_SERVERS) $(PROG_USRSBIN)
+EXTRA=system.conf master.passwd pwd.db spwd.db rs.single
 
 .if ${MKSMALL} != "yes"
+PROG_DRIVERS+= ahci
+PROG_SERVERS+= ext2
 PROTO= proto
 .else
 PROTO= proto.small
 .endif
 
-EXTRA=system.conf master.passwd passwd pwd.db spwd.db rs.single
+.if ${MKACPI} != "no"
+PROG_DRIVERS+= acpi
+.endif
 
 CPPFLAGS+= -I${MINIXSRCDIR}/servers -I${MINIXSRCDIR}
 CLEANFILES += $(PROGRAMS) $(SCRIPTS) $(EXTRA) image image.c t proto.gen
+CLEANFILES += $(LIBRARIES)
 
 install: all
 
 realall: image
 
-image: proto.gen mtab rc $(EXTRA)
+image: proto.gen mtab rc $(EXTRA) passwd
        mkfs.mfs image proto.gen || { rm -f image; false; }
        if fsck.mfs -s image | grep -q CLEAN;   \
        then    : ;     \
@@ -38,134 +39,56 @@ image:     proto.gen mtab rc $(EXTRA)
                rm -f image; false;             \
        fi
 
-ahci: ../ahci/ahci
-       install ${STRIPFLAG} ../$@/$@ $@
-
-../ahci/ahci:
-       $(MAKE) -C ../ahci
-
-at_wini: ../at_wini/at_wini
-       install ${STRIPFLAG} ../$@/$@ $@
-
-../at_wini/at_wini:
-       $(MAKE) -C ../at_wini
-
-floppy: ../floppy/floppy
-       install ${STRIPFLAG} ../$@/$@ $@
-
-../floppy/floppy:
-       $(MAKE) -C ../floppy
-
-acpi: ../acpi/acpi
-       install ${STRIPFLAG} ../$@/$@ $@
-
-../acpi/acpi:
-       $(MAKE) -C ../acpi
-
-pci: ../pci/pci
-       install ${STRIPFLAG} ../$@/$@ $@
-
-../pci/pci:
-       $(MAKE) -C ../pci
-
-cdprobe:  ../../commands/cdprobe/cdprobe
-       install ${STRIPFLAG} ../../commands/$@/$@ $@
-
-../../commands/cdprobe:
-       $(MAKE) -C ../../commands/cdprobe
-
-dev2name:  ../../commands/dev2name/dev2name
-       install ${STRIPFLAG} ../../commands/$@/$@ $@
-
-../../commands/dev2name/dev2name:
-       $(MAKE) -C ../../commands/dev2name
+.for driver in $(PROG_DRIVERS)
+$(driver): ../$(driver)/$(driver)
+       install $> $@
 
-loadramdisk:  ../../commands/loadramdisk/loadramdisk
-       install ${STRIPFLAG} ../../commands/$@/$@ $@
+../$(driver)/$(driver):
+       $(MAKE) -C ../$(driver) $(driver)
+.endfor
 
-../../commands/loadramdisk/loadramdisk:
-       $(MAKE) -C ../../commands/loadramdisk
-
-mount:  ../../commands/mount/mount
-       install ${STRIPFLAG} ../../commands/$@/$@ $@
-
-../../commands/mount/mount:
-       $(MAKE) -C ../../commands/mount
-
-fsck.mfs:  ../../commands/fsck.mfs/fsck.mfs
-       install ${STRIPFLAG} ../../commands/$@/$@ $@
-
-../../commands/fsck.mfs/fsck.mfs:
-       $(MAKE) -C ../../commands/fsck.mfs
-
-newroot:  ../../commands/newroot/newroot.sh
-       install ${STRIPFLAG} ../../commands/$@/$@.sh $@
-
-../../commands/newroot/newroot:
-       $(MAKE) -C ../../commands/newroot
-
-sysenv:  ../../commands/sysenv/sysenv
-       install ${STRIPFLAG} ../../commands/$@/$@ $@
-
-../../commands/sysenv/sysenv:
-       $(MAKE) -C ../../commands/sysenv
-
-sh:    ../../commands/ash/sh
-       install ${STRIPFLAG} ../../commands/ash/$@ $@
-
-../../commands/ash/sh:
-       $(MAKE) -C ../../commands/ash sh
-
-service: ../../commands/service/service
-       install ${STRIPFLAG} ../../commands/service/$@ $@
-
-../../commands/service/service:
-       $(MAKE) -C ../../commands/service
-
-mfs: ../../servers/mfs/mfs
-       install ${STRIPFLAG} ../../servers/mfs/$@ $@
+.for cmd in $(PROG_COMMANDS)
+.if $(cmd) == sh
+dir.$(cmd)=ash
+.else
+dir.$(cmd)=$(cmd)
+.endif
+$(cmd): ../../commands/$(dir.$(cmd))/$(cmd)
+       install $> $@
 
-../../servers/mfs/mfs:
-       $(MAKE) -C ../../servers/mfs
+../../commands/$(dir.$(cmd))/$(cmd):
+       $(MAKE) -C ../../commands/$(dir.$(cmd)) $(cmd)
+.endfor
 
-procfs: ../../servers/procfs/procfs
-       install ${STRIPFLAG} ../../servers/procfs/$@ $@
+.for etc in $(EXTRA)
+$(etc): ../../etc/$(etc)
+       install $> $@
+.endfor
 
-../../servers/procfs/procfs:
-       $(MAKE) -C ../../servers/procfs
+.for cmd in $(PROG_USRSBIN)
+$(cmd): ../../usr.sbin/$(cmd)/$(cmd)
+       install $> $@
 
-ext2: ../../servers/ext2/ext2
-       install ${STRIPFLAG} ../../servers/ext2/$@ $@
+../../usr.sbin/$(cmd)/$(cmd):
+       $(MAKE) -C ../../usr.sbin/$(cmd) $(cmd)
+.endfor
 
-../../servers/ext2/ext2:
-       $(MAKE) -C ../../servers/ext2
+.for server in $(PROG_SERVERS)
+$(server): ../../servers/$(server)/$(server)
+       install $> $@
 
-system.conf: ../../etc/system.conf
-       install ${STRIPFLAG} ../../etc/$@ $@
+../../servers/$(server)/$(server):
+       $(MAKE) -C ../../servers/$(server) $(server)
+.endfor
 
 passwd: ../../etc/master.passwd ../../usr.sbin/pwd_mkdb/pwd_mkdb
        rm -f ../../etc/master.passwd.orig ../../etc/passwd.orig
        rm -f ../../etc/pwd.db.tmp ../../etc/spwd.db.tmp
        ../../usr.sbin/pwd_mkdb/pwd_mkdb -V 0 -p -d ../../ ../../etc/master.passwd
-       install ${STRIPFLAG} ../../etc/$@ $@
-
-../../usr.sbin/pwd_mkdb/pwd_mkdb:
-       $(MAKE) -C ../../usr.sbin/pwd_mkdb
-
-master.passwd: ../../etc/master.passwd
-       install ${STRIPFLAG} ../../etc/$@ $@
-
-pwd.db: passwd
-       install ${STRIPFLAG} ../../etc/$@ $@
-
-spwd.db: passwd
-       install ${STRIPFLAG} ../../etc/$@ $@
-
-rs.single: ../../etc/rs.single
-       install ${STRIPFLAG} ../../etc/$@ $@
+       install ../../etc/$@ $@
 
-proto.gen: $(PROGRAMS) $(SCRIPTS) proto.sh ${PROTO}
-       for p in $(PROGRAMS); do file $$p | grep -q ELF && strip -s $$p || true; done
+proto.gen: $(PROGRAMS) proto.sh ${PROTO} proto.common.etc proto.common.dynamic proto.sh
+       strip $(PROGRAMS)
        sh -e proto.sh ${PROTO} >proto.gen
 
 .include <minix.service.mk>
index a5dbeb82741ce8416316728064e82cd01bf75f82..d134caaa5bc91eab944aea853b843751eab8b021 100644 (file)
@@ -1,12 +1,11 @@
 boot 
-840 540
+1200 540
 d--755 0 0
        bin d--755 0 0
                cdprobe ---755 0 0 cdprobe
                dev2name ---755 0 0 dev2name
                loadramdisk ---755 0 0 loadramdisk
                mount ---755 0 0 mount
-               newroot ---755 0 0 newroot
                sh ---755 0 0 sh
                service ---755 0 0 service
                sysenv ---755 0 0 sysenv
@@ -25,14 +24,3 @@ d--755 0 0
        dev d--755 0 0
 @DEV@
        $
-       etc d--755 0 0
-               system.conf ---644 0 0 system.conf
-               mtab ---644 0 0 mtab
-               passwd ---644 0 0 passwd
-               pwd.db ---644 0 0 pwd.db
-               spwd.db ---600 0 0 spwd.db
-               master.passwd ---600 0 0 master.passwd
-               rc ---755 0 0 rc
-               rs.single ---755 0 0 rs.single
-       $
-$
diff --git a/drivers/ramdisk/proto.common.dynamic b/drivers/ramdisk/proto.common.dynamic
new file mode 100644 (file)
index 0000000..82a9fb1
--- /dev/null
@@ -0,0 +1,11 @@
+       libexec d--755 0 0
+               ld.elf_so ---755 0 0 /libexec/ld.elf_so
+       $
+       usr d--755 0 0
+               lib d--755 0 0
+                       libc.so.12 ---755 0 0 /lib/libc.so.12
+                       libminlib.so.1 ---755 0 0 /lib/libminlib.so.1
+                       libcompat_minix.so.1 ---755 0 0 /lib/libcompat_minix.so.1
+                       libterminfo.so.1 ---755 0 0 /lib/libterminfo.so.1
+               $
+       $
diff --git a/drivers/ramdisk/proto.common.etc b/drivers/ramdisk/proto.common.etc
new file mode 100644 (file)
index 0000000..b2c12f2
--- /dev/null
@@ -0,0 +1,10 @@
+       etc d--755 0 0
+               system.conf ---644 0 0 system.conf
+               mtab ---644 0 0 mtab
+               passwd ---644 0 0 passwd
+               pwd.db ---644 0 0 pwd.db
+               spwd.db ---600 0 0 spwd.db
+               master.passwd ---600 0 0 master.passwd
+               rc ---755 0 0 rc
+               rs.single ---755 0 0 rs.single
+       $
index 3ed5ce6914d1e773d24b3b9a6bae13b67e40ee6c..630fcdc1edebe2492f5c366dcd59c9d8570e62b9 100644 (file)
@@ -18,3 +18,8 @@ sed   -e 's/^[bc]/& /' -e 's/rw-/6/g' -e 's/r--/4/g' \
 awk '{ printf "\t\t%s %s--%s %d %d %d %d \n", $11, $1, $2, $4, $5, $6, $7; }'
 )
 sed -n '/@DEV/,$p' <${PROTO}  | grep -v @DEV@
+cat proto.common.etc
+if [ -x /libexec/ld.elf_so ]
+then   cat proto.common.dynamic
+fi
+echo '$'
index 1cc6d52359395c3503ec8e58faced96e961c5710..1dec5f427f2548f8b1da45c8801cb0b93cd92807 100644 (file)
@@ -6,7 +6,6 @@ d--755 0 0
                dev2name ---755 0 0 dev2name
                loadramdisk ---755 0 0 loadramdisk
                mount ---755 0 0 mount
-               newroot ---755 0 0 newroot
                sh ---755 0 0 sh
                service ---755 0 0 service
                sysenv ---755 0 0 sysenv
@@ -22,14 +21,3 @@ d--755 0 0
        dev d--755 0 0
 @DEV@
        $
-       etc d--755 0 0
-               system.conf ---644 0 0 system.conf
-               mtab ---644 0 0 mtab
-               passwd ---644 0 0 passwd
-               pwd.db ---644 0 0 pwd.db
-               spwd.db ---600 0 0 spwd.db
-               master.passwd ---600 0 0 master.passwd
-               rc ---755 0 0 rc
-               rs.single ---755 0 0 rs.single
-       $
-$
index 0aeb4a95ba1b35f9d16c5524198accccd674a868..7be8797b6f2bf98082efaa72e4013ffb534ff1b5 100644 (file)
@@ -67,7 +67,11 @@ echo "Root device name is $rootdevname"
 if [ -e $FSCK ]
 then   $FSCK -p $rootdevname
 fi
-/bin/newroot $bin_img"$rootdevname"
+
+# Change root from temporary boot ramdisk to the configure
+# root device
+/bin/mount -n $bin_img"$rootdevname" /
+
 /bin/mount -e -n -t procfs none /proc || echo "WARNING: couldn't mount procfs"
 
 exec /bin/sh /etc/rc "$@"