CRUX-ARM : Home

Home :: Documentation :: Download :: Development :: Community :: Ports :: Packages :: Bugs :: Links :: About :: Donors
Improvements to use busybox --install to create links dinamically
authorJose V Beneyto <sepen@crux.nu>
Wed, 4 Jul 2012 06:44:07 +0000 (06:44 +0000)
committerJose V Beneyto <sepen@crux.nu>
Wed, 4 Jul 2012 06:44:07 +0000 (06:44 +0000)
Makefile
busybox-1.19.4.config
filesystem/rc
work/initramfs.lst

index 62eba8c7bcb2b67d74e7c1eac36d5e07c5c7385c..82c75e9590c055e6987f33da1fd6d2953188f796 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -113,11 +113,13 @@ $(WORK)/initramfs.cpio.gz-$(KERNEL_VERSION): check-root busybox dialog $(TOPDIR)
        install -v -m 0755 $(TOPDIR)/filesystem/{setup,crux} $(WORK)/mnt/usr/bin
        /sbin/ldconfig -r $(WORK)/mnt
        cd $(WORK)/mnt && \
-               $(WORK)/gen_init_cpio $(WORK)/initramfs.lst | cpio -id && \
+               sed -e "s/#KERNEL_VERSION#/$(KERNEL_VERSION)/g; s/#BUSYBOX_VERSION#/$(BUSYBOX_VERSION)/g" \
+               $(WORK)/initramfs.lst > $(WORK)/initramfs.lst-sed && \
+               $(WORK)/gen_init_cpio $(WORK)/initramfs.lst-sed | cpio -id && \
                find * | cpio -H newc -o > $(WORK)/initramfs.cpio && \
                gzip -v9 $(WORK)/initramfs.cpio
        mv $(WORK)/initramfs.cpio.gz{,-$(KERNEL_VERSION)}
-       #rm -rf $(WORK)/mnt
+       rm -rf $(WORK)/mnt
 
 initramfs: $(WORK)/initramfs.cpio.gz-$(KERNEL_VERSION)
 
index a9de529905da1ef09220f8347fe412564d4ab13a..2f12add93a6f1c1b560dfc70a6e24d08a486ea6b 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Busybox version: 1.19.4
-# Tue Mar  6 12:35:21 2012
+# Mon Jul  2 21:32:06 2012
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -23,7 +23,7 @@ CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
 CONFIG_SHOW_USAGE=y
 CONFIG_FEATURE_VERBOSE_USAGE=y
 # CONFIG_FEATURE_COMPRESS_USAGE is not set
-# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_FEATURE_INSTALLER=y
 # CONFIG_INSTALL_NO_USR is not set
 # CONFIG_LOCALE_SUPPORT is not set
 # CONFIG_UNICODE_SUPPORT is not set
index 8fd3474ac63b408b25d090a60aa1497a6e9ffed1..693ec70d159bf190b5a1ad923014a5033dd1b181 100755 (executable)
@@ -95,6 +95,8 @@ find_and_mount_media() {
        fi
 }
 
+/bin/busybox --install -s /bin
+
 #
 # main script
 #
@@ -105,10 +107,15 @@ echo ""
 
 exec >/dev/console </dev/console 2>&1
 
-echo -e -n " ${BOLD}${BLUE}*${NORM} Mounting filesystems... "
-mount -a && \
-mount -o remount,rw /
-checkReturn
+echo -e -n " ${BOLD}${BLUE}*${NORM} Mounting "
+echo -e -n "${BOLD}${GREEN}/proc${NORM}"
+mount -t proc proc /proc
+
+PRINTK="`cat /proc/sys/kernel/printk`"
+echo "0" > /proc/sys/kernel/printk
+
+echo -e ", ${BOLD}${GREEN}/sys${NORM}."
+mount -t sysfs sysfs /sys
 
 echo -e -n " ${BOLD}${BLUE}*${NORM} Populating /dev via mdev... "
 mdev -s
@@ -141,11 +148,65 @@ echo -e -n " ${BOLD}${BLUE}*${NORM} Saving boot messages... "
 dmesg > /var/log/boot
 checkReturn
 
-echo -e " ${BOLD}${BLUE}*${NORM} Trying to find and mount the media installer..."
-find_and_mount_media
-
-echo
-echo "The system is coming up. Please wait."
-echo
+grep -q "devicetimeout=*" /proc/cmdline
+if [ $? -eq 0 ]
+then
+       for opt in `cat /proc/cmdline`
+       do
+               echo "$opt" | grep -q "devicetimeout="
+               if [ $? -eq 0 ]
+               then
+                       DEVTIMEOUT=`echo $opt | cut -d'=' -f2`
+               fi
+       done
+else
+       DEVTIMEOUT=10
+fi
+echo -e " ${BOLD}${BLUE}*${NORM} Waiting $DEVTIMEOUT seconds for devices to settle..."
+sleep $DEVTIMEOUT
+
+# if root=/dev/XXX was specified on the command line, use that as the new root
+# instead of searching for the media and using it. if it fails, fall back to the media
+grep -q "root=/dev/*" /proc/cmdline
+if [ $? -eq 0 ]
+then
+       for opt in `cat /proc/cmdline`
+       do
+               echo "$opt" | grep -q "root="
+               if [ $? -eq 0 ]
+               then
+                       ROOTDEV=`echo $opt | cut -d'=' -f2`
+               fi
+       done
+       mkdir -p /newroot
+       # check the specified root device to see if it has an init
+       mount $ROOTDEV /newroot
+       if [ $? -ne 0 ]
+       then
+               echo -e " ${BOLD}${RED}*${NORM} Unable to mount the specified root device! Falling back to the live media."
+               find_and_mount_media
+       else
+               if [ -x /newroot/sbin/init ]
+               then
+                       echo -e " ${BOLD}${BLUE}*${NORM} Mounted root device $ROOTDEV."
+               else
+                       echo -e " ${BOLD}${RED}*${NORM} The specified root device ($ROOTDEV) does not appear to be usable! Falling back to the live media."
+                       umount /newroot
+                       find_and_mount_media
+               fi
+       fi
+else
+       find_and_mount_media
+fi
+
+echo -e "${BOLD}${BLUE}*${NORM} Switching root.\n"
+echo "$PRINTK" > /proc/sys/kernel/printk
+echo > /proc/sys/kernel/hotplug
+umount /sys
+umount /proc
+exec /bin/switch_root /newroot /sbin/init
+
+echo "Something's broken, here's a shell."
+exec /bin/sh
 
 # End of file
index 7db149428a54d5da62e30d340cc2451108073f02..e8aeacab075420b57283d6340cb5e635a03f0ad3 100644 (file)
@@ -1,40 +1,15 @@
-dir / 755 0 0
-
-nod /dev/console 664 0 0 c 5 1
-
+# base directories/device nodes
+dir /proc 755 0 0
+dir /sys 755 0 0
+dir /lib 755 0 0
+dir /dev 755 0 0
+nod /dev/console 640 0 0 c 5 1
 nod /dev/null 664 0 0 c 1 3
 
-nod /dev/tty 664 0 0 c 5 0
-
-nod /dev/tty0 644 0 0 c 4 0
-nod /dev/tty1 644 0 0 c 4 1
-nod /dev/tty2 644 0 0 c 4 2
-nod /dev/tty3 644 0 0 c 4 3
-nod /dev/tty4 644 0 0 c 4 4
-nod /dev/tty5 644 0 0 c 4 5
-nod /dev/tty6 644 0 0 c 4 6
-nod /dev/tty7 644 0 0 c 4 7
-
-nod /dev/rd/0 664 0 0 b 1 0
-
-nod /dev/ram0 664 0 0 b 1 0
-
-nod /dev/hda0 644 0 0 b 3 0
-nod /dev/hda1 644 0 0 b 3 1
-
-nod /dev/mmcblk0 664 0 0 b 179 0
-
-nod /dev/mmcblk0p0 644 0 0 b 179 0
-nod /dev/mmcblk0p1 644 0 0 b 179 1
-nod /dev/mmcblk0p2 644 0 0 b 179 2
-nod /dev/mmcblk0p3 644 0 0 b 179 3
-
-nod /dev/mtd0 644 0 0 c 90 0
-nod /dev/mtd1 644 0 0 c 90 1
-nod /dev/mtd2 644 0 0 c 90 2
-nod /dev/mtd3 644 0 0 c 90 3
+# init itself
+file /init init 755 0 0
 
-nod /dev/mtdblock0 644 0 0 c 31 0
-nod /dev/mtdblock1 644 0 0 c 31 1
-nod /dev/mtdblock2 644 0 0 c 31 2
-nod /dev/mtdblock3 644 0 0 c 31 3
+# busybox and links
+dir /bin 755 0 0
+file /bin/busybox ../busybox-#BUSYBOX_VERSION#/busybox 4755 0 0
+slink /bin/sh busybox 777 0 0