From ea8823c99319e5c11b975d14c95b487d25ec0f3f Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 3 Nov 2009 01:02:39 +0000 Subject: [x86] merge the olpc target with the x86 target, both tested and running git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18279 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/x86/Makefile | 4 +- target/linux/x86/image/Config.in | 30 +- target/linux/x86/image/Makefile | 46 +- target/linux/x86/image/gen_image.sh | 48 -- target/linux/x86/image/gen_image_olpc.sh | 35 ++ target/linux/x86/image/gen_image_x86.sh | 48 ++ target/linux/x86/image/olpc.fth | 5 + target/linux/x86/olpc/base-files/etc/X11/xorg.conf | 71 +++ .../linux/x86/olpc/base-files/etc/config/network | 11 + target/linux/x86/olpc/base-files/etc/preinit.arch | 2 + .../x86/olpc/base-files/lib/upgrade/platform.sh | 27 ++ target/linux/x86/olpc/config-default | 528 +++++++++++++++++++++ target/linux/x86/olpc/target.mk | 2 + .../x86/patches-2.6.30/300-block2mtd_init.patch | 210 ++++++++ 14 files changed, 1012 insertions(+), 55 deletions(-) delete mode 100755 target/linux/x86/image/gen_image.sh create mode 100755 target/linux/x86/image/gen_image_olpc.sh create mode 100755 target/linux/x86/image/gen_image_x86.sh create mode 100644 target/linux/x86/image/olpc.fth create mode 100644 target/linux/x86/olpc/base-files/etc/X11/xorg.conf create mode 100644 target/linux/x86/olpc/base-files/etc/config/network create mode 100644 target/linux/x86/olpc/base-files/etc/preinit.arch create mode 100644 target/linux/x86/olpc/base-files/lib/upgrade/platform.sh create mode 100644 target/linux/x86/olpc/config-default create mode 100644 target/linux/x86/olpc/target.mk create mode 100644 target/linux/x86/patches-2.6.30/300-block2mtd_init.patch diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile index 899939581..d7c562522 100644 --- a/target/linux/x86/Makefile +++ b/target/linux/x86/Makefile @@ -10,9 +10,9 @@ ARCH=i386 BOARD:=x86 BOARDNAME:=x86 FEATURES:=squashfs jffs2 ext2 vdi vmdk pcmcia tgz -SUBTARGETS=generic +SUBTARGETS=generic olpc -LINUX_VERSION:=2.6.31.5 +LINUX_VERSION:=2.6.30.9 include $(INCLUDE_DIR)/target.mk diff --git a/target/linux/x86/image/Config.in b/target/linux/x86/image/Config.in index bf1426723..9dd7ae587 100644 --- a/target/linux/x86/image/Config.in +++ b/target/linux/x86/image/Config.in @@ -1,6 +1,6 @@ config X86_GRUB_IMAGES bool "Build GRUB images (Linux x86 or x86_64 host only)" - depends TARGET_x86 + depends TARGET_x86_generic depends TARGET_ROOTFS_EXT2FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS || TARGET_ROOTFS_ISO select PACKAGE_grub default y @@ -38,14 +38,38 @@ config X86_GRUB_BOOTOPTS config X86_VDI_IMAGES bool "Build VirtualBox image files (VDI). Requires VBoxManage" - depends TARGET_x86 + depends TARGET_x86_generic depends TARGET_ROOTFS_EXT2FS depends X86_GRUB_IMAGES select PACKAGE_kmod-pcnet32 config X86_VMDK_IMAGES bool "Build VMware image files (VMDK). Requires qemu-img" - depends TARGET_x86 + depends TARGET_x86_generic depends TARGET_ROOTFS_EXT2FS depends X86_GRUB_IMAGES select PACKAGE_kmod-e1000 + +config OLPC_BOOTSCRIPT_IMAGES + bool "Build images with bootscript" + depends TARGET_x86_olpc + depends TARGET_ROOTFS_EXT2FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS || TARGET_ROOTFS_ISO + default y + +config OLPC_BOOTSCRIPT_IMAGES_PAD + bool "Pad bootscript images to filesystem size (for JFFS2)" + depends OLPC_BOOTSCRIPT_IMAGES + +config OLPC_BOOTSCRIPT_KERNELPART + int "Kernel partition size (in MB)" + depends OLPC_BOOTSCRIPT_IMAGES + default 4 + +config OLPC_BOOTSCRIPT_ROOTPART + string + prompt "Root partition on target device" if OLPC_BOOTSCRIPT_IMAGES + default "/dev/sda2" + help + The root partition on the final device. If you don't know, + you probably want the default (/dev/sda2). + diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index 6d3c77b77..699dcfe6a 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -8,10 +8,17 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/image.mk export PATH=$(TARGET_PATH):/sbin + +ifeq ($(CONFIG_TARGET_x86_generic),y) BOOTOPTS=$(strip $(subst ",, $(CONFIG_X86_GRUB_BOOTOPTS))) ROOTPART=$(strip $(subst ",, $(CONFIG_X86_GRUB_ROOTPART))) #"))")) # fix vim's broken syntax highlighting +endif +ifeq ($(CONFIG_TARGET_x86_olpc),y) +ROOTPART=$(strip $(subst ",, $(CONFIG_OLPC_BOOTSCRIPT_ROOTPART))) +endif +#"))")) # fix vim's broken syntax highlighting ifeq ($(CONFIG_X86_GRUB_IMAGES),y) ifneq ($(HOST_OS),Darwin) @@ -42,7 +49,7 @@ ifneq ($(HOST_OS),Darwin) -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1))) $(BOOTOPTS)#g' \ -e 's#@BAUDRATE@#$(CONFIG_X86_GRUB_BAUDRATE)#g' \ ./menu.lst > $(KDIR)/root.grub/boot/grub/menu.lst - PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image.sh $(BIN_DIR)/openwrt-$(BOARD)-$(1).image $(CONFIG_X86_GRUB_KERNELPART) $(KDIR)/root.grub $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) + PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_x86.sh $(BIN_DIR)/openwrt-$(BOARD)-$(1).image $(CONFIG_X86_GRUB_KERNELPART) $(KDIR)/root.grub $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) $(call Image/Build/grub/$(1)) endef @@ -56,7 +63,7 @@ ifneq ($(HOST_OS),Darwin) endef else define Image/Build/grub - PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" NOGRUB=1 ./gen_image.sh $(BIN_DIR)/openwrt-$(BOARD)-$(1).image $(CONFIG_X86_GRUB_KERNELPART) "" $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) + PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" NOGRUB=1 ./gen_image_x86.sh $(BIN_DIR)/openwrt-$(BOARD)-$(1).image $(CONFIG_X86_GRUB_KERNELPART) "" $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) endef endif endif @@ -82,9 +89,43 @@ ifeq ($(CONFIG_X86_VMDK_IMAGES),y) endef endif +ROOTDELAY=10 + +ifeq ($(CONFIG_OLPC_BOOTSCRIPT_IMAGES),y) + define Image/cmdline/squashfs + block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootdelay=$(ROOTDELAY) + endef + + define Image/cmdline/jffs2-64k + block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootdelay=$(ROOTDELAY) + endef + + define Image/cmdline/jffs2-128k + block2mtd.block2mtd=$(ROOTPART),131072,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootdelay=$(ROOTDELAY) + endef + + define Image/cmdline/ext2 + root=$(ROOTPART) rootfstype=ext2 rootwait + endef + + define Image/Build/bootscript + # left here because the image builder doesnt need these + $(INSTALL_DIR) $(KDIR)/root.bootscript/boot + $(CP) $(KDIR)/bzImage $(KDIR)/root.bootscript/boot/vmlinuz + sed -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1))) $(BOOTOPTS)#g' \ + ./olpc.fth > $(KDIR)/root.bootscript/boot/olpc.fth + PADDING="$(CONFIG_OLPC_BOOTSCRIPT_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_olpc.sh $(BIN_DIR)/openwrt-$(BOARD)-$(1).image $(CONFIG_OLPC_BOOTSCRIPT_KERNELPART) $(KDIR)/root.bootscript $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) + endef +endif + define Image/Prepare $(CP) $(LINUX_DIR)/arch/x86/boot/bzImage $(KDIR)/bzImage +ifeq ($(CONFIG_TARGET_x86_generic),y) $(call Image/Prepare/grub) +endif +ifeq ($(CONFIG_TARGET_x86_olpc),y) + $(call Image/Prepare/bootscript) +endif endef define Image/Build/squashfs @@ -112,6 +153,7 @@ endef define Image/Build $(call Image/Build/$(1)) + $(call Image/Build/bootscript,$(1)) ifneq ($(1),iso) $(call Image/Build/grub,$(1)) $(call Image/Build/vdi,$(1)) diff --git a/target/linux/x86/image/gen_image.sh b/target/linux/x86/image/gen_image.sh deleted file mode 100755 index 5d4c0dd34..000000000 --- a/target/linux/x86/image/gen_image.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -# Copyright (C) 2006 OpenWrt.org -set -x -[ $# == 5 ] || { - echo "SYNTAX: $0 " - exit 1 -} - -OUTPUT="$1" -KERNELSIZE="$2" -KERNELDIR="$3" -ROOTFSSIZE="$4" -ROOTFSIMAGE="$5" - -rm -f "$OUTPUT" - -head=16 -sect=63 -cyl=$(( ($KERNELSIZE + $ROOTFSSIZE) * 1024 * 1024 / ($head * $sect * 512))) - -# create partition table -set `ptgen -o "$OUTPUT" -h $head -s $sect -p ${KERNELSIZE}m -p ${ROOTFSSIZE}m` - -KERNELOFFSET="$(($1 / 512))" -KERNELSIZE="$(($2 / 512))" -ROOTFSOFFSET="$(($3 / 512))" -ROOTFSSIZE="$(($4 / 512))" - -BLOCKS="$((($KERNELSIZE / 2) - 1))" - -[ -n "$PADDING" ] && dd if=/dev/zero of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc count="$ROOTFSSIZE" -dd if="$ROOTFSIMAGE" of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc - -[ -n "$NOGRUB" ] && exit 0 - -genext2fs -d "$KERNELDIR" -b "$BLOCKS" "$OUTPUT.kernel" -dd if="$OUTPUT.kernel" of="$OUTPUT" bs=512 seek="$KERNELOFFSET" conv=notrunc -#rm -f "$OUTPUT.kernel" - -which chpax >/dev/null && chpax -zp $(which grub) -grub --batch --no-curses --no-floppy --device-map=/dev/null < " + exit 1 +} + +OUTPUT="$1" +KERNELSIZE="$2" +KERNELDIR="$3" +ROOTFSSIZE="$4" +ROOTFSIMAGE="$5" + +rm -f "$OUTPUT" + +head=16 +sect=63 +cyl=$(( ($KERNELSIZE + $ROOTFSSIZE) * 1024 * 1024 / ($head * $sect * 512))) + +# create partition table +set `ptgen -o "$OUTPUT" -h $head -s $sect -p ${KERNELSIZE}m -p ${ROOTFSSIZE}m` + +KERNELOFFSET="$(($1 / 512))" +KERNELSIZE="$(($2 / 512))" +ROOTFSOFFSET="$(($3 / 512))" +ROOTFSSIZE="$(($4 / 512))" + +BLOCKS="$((($KERNELSIZE / 2) - 1))" + +genext2fs -d "$KERNELDIR" -b "$BLOCKS" "$OUTPUT.kernel" +dd if="$OUTPUT.kernel" of="$OUTPUT" bs=512 seek="$KERNELOFFSET" conv=notrunc +[ -n "$PADDING" ] && dd if=/dev/zero of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc count="$ROOTFSSIZE" +dd if="$ROOTFSIMAGE" of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc +#rm -f "$OUTPUT.kernel" diff --git a/target/linux/x86/image/gen_image_x86.sh b/target/linux/x86/image/gen_image_x86.sh new file mode 100755 index 000000000..5d4c0dd34 --- /dev/null +++ b/target/linux/x86/image/gen_image_x86.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Copyright (C) 2006 OpenWrt.org +set -x +[ $# == 5 ] || { + echo "SYNTAX: $0 " + exit 1 +} + +OUTPUT="$1" +KERNELSIZE="$2" +KERNELDIR="$3" +ROOTFSSIZE="$4" +ROOTFSIMAGE="$5" + +rm -f "$OUTPUT" + +head=16 +sect=63 +cyl=$(( ($KERNELSIZE + $ROOTFSSIZE) * 1024 * 1024 / ($head * $sect * 512))) + +# create partition table +set `ptgen -o "$OUTPUT" -h $head -s $sect -p ${KERNELSIZE}m -p ${ROOTFSSIZE}m` + +KERNELOFFSET="$(($1 / 512))" +KERNELSIZE="$(($2 / 512))" +ROOTFSOFFSET="$(($3 / 512))" +ROOTFSSIZE="$(($4 / 512))" + +BLOCKS="$((($KERNELSIZE / 2) - 1))" + +[ -n "$PADDING" ] && dd if=/dev/zero of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc count="$ROOTFSSIZE" +dd if="$ROOTFSIMAGE" of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc + +[ -n "$NOGRUB" ] && exit 0 + +genext2fs -d "$KERNELDIR" -b "$BLOCKS" "$OUTPUT.kernel" +dd if="$OUTPUT.kernel" of="$OUTPUT" bs=512 seek="$KERNELOFFSET" conv=notrunc +#rm -f "$OUTPUT.kernel" + +which chpax >/dev/null && chpax -zp $(which grub) +grub --batch --no-curses --no-floppy --device-map=/dev/null </dev/null || { + echo /dev/hda2,65536,rootfs > /sys/module/block2mtd/parameters/block2mtd + } +} +append sysupgrade_pre_upgrade x86_prepare_ext2 diff --git a/target/linux/x86/olpc/config-default b/target/linux/x86/olpc/config-default new file mode 100644 index 000000000..f4f32e0a9 --- /dev/null +++ b/target/linux/x86/olpc/config-default @@ -0,0 +1,528 @@ +CONFIG_4KSTACKS=y +# CONFIG_64BIT is not set +CONFIG_ACPI=y +CONFIG_ACPI_AC=y +# CONFIG_ACPI_ASUS is not set +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BLACKLIST_YEAR=0 +CONFIG_ACPI_BUTTON=y +# CONFIG_ACPI_CONTAINER is not set +# CONFIG_ACPI_CUSTOM_DSDT is not set +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_PCI_SLOT is not set +CONFIG_ACPI_PROCESSOR=y +# CONFIG_ACPI_PROCFS is not set +CONFIG_ACPI_PROCFS_POWER=y +CONFIG_ACPI_PROC_EVENT=y +# CONFIG_ACPI_SBS is not set +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_SYSFS_POWER=y +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_TOSHIBA is not set +# CONFIG_ACPI_WMI is not set +# CONFIG_AGP is not set +# CONFIG_APM is not set +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_ASUS_LAPTOP is not set +# CONFIG_AUDIT_ARCH is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_GENERIC=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_BACKLIGHT_MBP_NVIDIA is not set +# CONFIG_BACKLIGHT_PROGEAR is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +CONFIG_BASE_SMALL=0 +CONFIG_BATTERY_OLPC=y +CONFIG_BINARY_PRINTF=y +CONFIG_BINFMT_MISC=y +CONFIG_BITREVERSE=y +# CONFIG_BLK_DEV is not set +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +CONFIG_BLK_DEV_SR_VENDOR=y +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_BOOT_PRINTK_DELAY is not set +CONFIG_BOUNCE=y +CONFIG_CAN_PM_TRACE=y +# CONFIG_CC_STACKPROTECTOR is not set +CONFIG_CHR_DEV_SG=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +# CONFIG_CMDLINE_BOOL is not set +# CONFIG_COMPAL_LAPTOP is not set +CONFIG_COMPAT_VDSO=y +CONFIG_CONSOLE_TRANSLATIONS=y +# CONFIG_CPA_DEBUG is not set +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_SUP_AMD=y +# CONFIG_CPU_SUP_CENTAUR is not set +# CONFIG_CPU_SUP_CYRIX_32 is not set +# CONFIG_CPU_SUP_INTEL is not set +# CONFIG_CPU_SUP_TRANSMETA_32 is not set +# CONFIG_CPU_SUP_UMC_32 is not set +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_WORKQUEUE=y +# CONFIG_CS5535_GPIO is not set +# CONFIG_DCDBAS is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_BOOT_PARAMS is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_NX_TEST is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_RODATA is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +# CONFIG_DELL_RBU is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_DEVPORT=y +CONFIG_DISPLAY_SUPPORT=y +# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMI=y +CONFIG_DMIID=y +CONFIG_DOUBLEFAULT=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_EARLY_PRINTK=y +# CONFIG_EARLY_PRINTK_DBGP is not set +# CONFIG_EDAC is not set +# CONFIG_EDD is not set +# CONFIG_EEEPC_LAPTOP is not set +# CONFIG_EFI is not set +CONFIG_ELF_CORE=y +CONFIG_EXT2_FS=y +CONFIG_FAST_CMPXCHG_LOCAL=y +# CONFIG_FAULT_INJECTION is not set +CONFIG_FB=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_GEODE=y +# CONFIG_FB_GEODE_GX is not set +# CONFIG_FB_GEODE_GX1 is not set +CONFIG_FB_GEODE_LX=y +# CONFIG_FCOE_FNIC is not set +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FIRMWARE_MEMMAP is not set +CONFIG_FIX_EARLYCON_MEM=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x16=y +CONFIG_FONT_8x8=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FRAME_POINTER is not set +CONFIG_FREEZER=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_FTRACE_SYSCALLS is not set +# CONFIG_FUJITSU_LAPTOP is not set +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CMOS_UPDATE=y +# CONFIG_GENERIC_CPU is not set +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_FIND_LAST_BIT=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_ISA_DMA=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_GEODE_MFGPT_TIMER=y +# CONFIG_HAMRADIO is not set +# CONFIG_HANGCHECK_TIMER is not set +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAVE_AOUT=y +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_ATOMIC_IOMAP=y +# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_FTRACE_SYSCALLS=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_HAVE_IDE=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_KVM=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_HAVE_MLOCK=y +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_HAVE_OPROFILE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_HIBERNATION=y +CONFIG_HID=y +CONFIG_HID_SUPPORT=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +# CONFIG_HPET is not set +CONFIG_HPET_EMULATE_RTC=y +CONFIG_HPET_TIMER=y +CONFIG_HT_IRQ=y +# CONFIG_HUGETLBFS is not set +CONFIG_HW_CONSOLE=y +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_AMD is not set +CONFIG_HW_RANDOM_GEODE=y +# CONFIG_HW_RANDOM_INTEL is not set +CONFIG_HW_RANDOM_VIA=y +# CONFIG_I2C is not set +# CONFIG_I8K is not set +# CONFIG_IMA is not set +CONFIG_INITRAMFS_SOURCE="" +CONFIG_INPUT=y +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_KEYBOARD=y +CONFIG_INPUT_MOUSE=y +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1200 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=900 +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INTEL_MENLOW is not set +# CONFIG_IOMMU_API is not set +# CONFIG_IOMMU_HELPER is not set +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_ISA is not set +CONFIG_ISA_DMA_API=y +# CONFIG_ISCSI_IBFT_FIND is not set +# CONFIG_ISDN is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +CONFIG_KEXEC=y +# CONFIG_KEXEC_JUMP is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KGDB is not set +CONFIG_KTIME_SCALAR=y +CONFIG_LCD_CLASS_DEVICE=y +# CONFIG_LCD_ILI9320 is not set +# CONFIG_LCD_PLATFORM is not set +# CONFIG_LEDS_ALIX2 is not set +# CONFIG_LEDS_CLEVO_MAIL is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_LOGO is not set +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586MMX is not set +# CONFIG_M586TSC is not set +# CONFIG_M686 is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_MARKERS=y +# CONFIG_MATH_EMULATION is not set +# CONFIG_MCA is not set +# CONFIG_MCORE2 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MEMTEST is not set +# CONFIG_MGEODEGX1 is not set +CONFIG_MGEODE_LX=y +# CONFIG_MICROCODE is not set +# CONFIG_MISC_DEVICES is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +CONFIG_MMC=y +CONFIG_MMC_BLOCK=y +CONFIG_MMC_SDHCI=y +# CONFIG_MMIOTRACE is not set +# CONFIG_MOUSE_BCM5974 is not set +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +# CONFIG_MOUSE_PS2_ELANTECH is not set +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_OLPC=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MPSC is not set +# CONFIG_MSI_LAPTOP is not set +CONFIG_MTD_BLOCK2MTD=y +# CONFIG_MTD_CFI is not set +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_PCI=y +# CONFIG_MTD_TS5500 is not set +# CONFIG_MTRR is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +# CONFIG_NET_DROP_MONITOR is not set +# CONFIG_NET_ETHERNET is not set +CONFIG_NOHIGHMEM=y +CONFIG_NOP_TRACER=y +CONFIG_NO_HZ=y +CONFIG_NR_CPUS=1 +# CONFIG_NSC_GPIO is not set +CONFIG_NVRAM=y +CONFIG_OLPC=y +CONFIG_OPROFILE=y +# CONFIG_OPTIMIZE_INLINING is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_PAGE_OFFSET=0xC0000000 +# CONFIG_PANASONIC_LAPTOP is not set +# CONFIG_PARAVIRT_GUEST is not set +# CONFIG_PARTITION_ADVANCED is not set +# CONFIG_PC8736x_GPIO is not set +CONFIG_PCI=y +# CONFIG_PCIEPORTBUS is not set +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_DIRECT=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_GOANY is not set +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GODIRECT is not set +# CONFIG_PCI_GOMMCONFIG is not set +CONFIG_PCI_GOOLPC=y +CONFIG_PCI_OLPC=y +CONFIG_PCSPKR_PLATFORM=y +# CONFIG_PDA_POWER is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_PHYSICAL_START=0x100000 +CONFIG_PM=y +CONFIG_PM_DEBUG=y +CONFIG_PM_SLEEP=y +CONFIG_PM_STD_PARTITION="" +# CONFIG_PM_TRACE_RTC is not set +# CONFIG_PM_VERBOSE is not set +CONFIG_PNP=y +CONFIG_PNPACPI=y +CONFIG_PNP_DEBUG_MESSAGES=y +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_POWER_TRACER is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_PROFILING=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_RCU_TORTURE_TEST is not set +CONFIG_RELAY=y +# CONFIG_RELOCATABLE is not set +CONFIG_RING_BUFFER=y +CONFIG_RTC=y +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_SCHEDSTATS=y +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_HRTICK=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_SCSI=y +# CONFIG_SCx200 is not set +# CONFIG_SDIO_UART is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIO=y +# CONFIG_SERIO_CT82C710 is not set +CONFIG_SERIO_I8042=y +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_PCIPS2 is not set +# CONFIG_SERIO_RAW is not set +CONFIG_SERIO_SERPORT=y +# CONFIG_SLOW_WORK is not set +# CONFIG_SMP is not set +# CONFIG_SONYPI is not set +CONFIG_SPARSEMEM_STATIC=y +# CONFIG_SPARSE_IRQ is not set +CONFIG_STACKTRACE=y +CONFIG_STRICT_DEVMEM=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SYSPROF_TRACER is not set +# CONFIG_TC1100_WMI is not set +# CONFIG_TELCLOCK is not set +CONFIG_THERMAL=y +# CONFIG_THINKPAD_ACPI is not set +CONFIG_TICK_ONESHOT=y +CONFIG_TIMER_STATS=y +# CONFIG_TOSHIBA is not set +CONFIG_TRACEPOINTS=y +CONFIG_TRACING=y +CONFIG_TRACING_SUPPORT=y +CONFIG_UID16=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_SUSPEND=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_VGACON_SOFT_SCROLLBACK=y +CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 +CONFIG_VGA_CONSOLE=y +CONFIG_VM86=y +# CONFIG_VMSPLIT_2G_OPT is not set +# CONFIG_VMSPLIT_3G_OPT is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_WATCHDOG is not set +CONFIG_X86=y +CONFIG_X86_32=y +CONFIG_X86_32_LAZY_GS=y +# CONFIG_X86_64 is not set +# CONFIG_X86_ACPI_CPUFREQ is not set +CONFIG_X86_BSWAP=y +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_CMPXCHG=y +CONFIG_X86_CPU=y +# CONFIG_X86_CPUFREQ_NFORCE2 is not set +# CONFIG_X86_CPUID is not set +# CONFIG_X86_CPU_DEBUG is not set +CONFIG_X86_DEBUGCTLMSR=y +# CONFIG_X86_DS is not set +# CONFIG_X86_ELAN is not set +CONFIG_X86_EXTENDED_PLATFORM=y +# CONFIG_X86_E_POWERSAVER is not set +CONFIG_X86_GENERIC=y +# CONFIG_X86_GX_SUSPMOD is not set +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_INTERNODE_CACHE_BYTES=64 +CONFIG_X86_INVLPG=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_L1_CACHE_BYTES=64 +CONFIG_X86_L1_CACHE_SHIFT=5 +CONFIG_X86_LOCAL_APIC=y +# CONFIG_X86_LONGHAUL is not set +# CONFIG_X86_LONGRUN is not set +# CONFIG_X86_MCE is not set +CONFIG_X86_MINIMUM_CPU_FAMILY=4 +CONFIG_X86_MPPARSE=y +# CONFIG_X86_MSR is not set +# CONFIG_X86_P4_CLOCKMOD is not set +# CONFIG_X86_PAE is not set +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_X86_PM_TIMER=y +CONFIG_X86_POPAD_OK=y +# CONFIG_X86_POWERNOW_K6 is not set +# CONFIG_X86_POWERNOW_K7 is not set +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_PTDUMP is not set +# CONFIG_X86_RDC321X is not set +# CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set +# CONFIG_X86_RESERVE_LOW_64K is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_SPEEDSTEP_ICH is not set +# CONFIG_X86_SPEEDSTEP_LIB is not set +# CONFIG_X86_SPEEDSTEP_SMI is not set +CONFIG_X86_TSC=y +CONFIG_X86_UP_APIC=y +CONFIG_X86_UP_IOAPIC=y +CONFIG_X86_USE_3DNOW=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_VERBOSE_BOOTUP=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_XADD=y +# CONFIG_ZONE_DMA32 is not set diff --git a/target/linux/x86/olpc/target.mk b/target/linux/x86/olpc/target.mk new file mode 100644 index 000000000..9ed2edc9e --- /dev/null +++ b/target/linux/x86/olpc/target.mk @@ -0,0 +1,2 @@ +BOARDNAME:=OLPC XO-1 +DEFAULT_PACKAGES += kmod-natsemi kmod-ne2k-pci kmod-libertas diff --git a/target/linux/x86/patches-2.6.30/300-block2mtd_init.patch b/target/linux/x86/patches-2.6.30/300-block2mtd_init.patch new file mode 100644 index 000000000..12165b52b --- /dev/null +++ b/target/linux/x86/patches-2.6.30/300-block2mtd_init.patch @@ -0,0 +1,210 @@ +--- a/arch/x86/kernel/vmlinux_32.lds.S ++++ b/arch/x86/kernel/vmlinux_32.lds.S +@@ -136,6 +136,12 @@ SECTIONS + INITCALLS + __initcall_end = .; + } ++ .root_initcall.init : AT(ADDR(.root_initcall.init) - LOAD_OFFSET) { ++ __root_initcall_start = .; ++ INITCALLS_ROOT ++ __root_initcall_end = .; ++ } ++ + .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { + __con_initcall_start = .; + *(.con_initcall.init) +--- a/drivers/mtd/devices/block2mtd.c ++++ b/drivers/mtd/devices/block2mtd.c +@@ -18,10 +18,18 @@ + #include + #include + #include ++#include ++#include + + #define ERROR(fmt, args...) printk(KERN_ERR "block2mtd: " fmt "\n" , ## args) + #define INFO(fmt, args...) printk(KERN_INFO "block2mtd: " fmt "\n" , ## args) + ++struct retry { ++ struct list_head list; ++ const char *val; ++}; ++ ++static LIST_HEAD(retry_list); + + /* Info for the block device */ + struct block2mtd_dev { +@@ -33,10 +41,34 @@ struct block2mtd_dev { + char devname[0]; + }; + ++static int block2mtd_setup2(const char *val); + + /* Static info about the MTD, used in cleanup_module */ + static LIST_HEAD(blkmtd_device_list); + ++static int add_retry(const char *val) { ++ struct retry *r = kmalloc(sizeof(struct retry), GFP_KERNEL); ++ ++ INIT_LIST_HEAD(&r->list); ++ r->val = val; ++ list_add(&r->list, &retry_list); ++ ++ return 0; ++} ++ ++static int __init process_retries(void) { ++ struct list_head *p, *tmp; ++ ++ list_for_each_safe(p, tmp, &retry_list) { ++ struct retry *r = list_entry(p, struct retry, list); ++ block2mtd_setup2(r->val); ++ msleep(100); ++ list_del(p); ++ kfree(r); ++ } ++ return 0; ++} ++rootfs_initcall(process_retries); + + static struct page *page_read(struct address_space *mapping, int index) + { +@@ -510,7 +542,9 @@ static int block2mtd_setup2(const char * + if (token[2] && (strlen(token[2]) + 1 > 80)) + parse_err("mtd device name too long"); + +- add_device(name, erase_size, token[2]); ++ if (add_device(name, erase_size, token[2]) == NULL) { ++ add_retry(val); ++ } + + return 0; + } +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -447,12 +447,14 @@ + *(.initcall4s.init) \ + *(.initcall5.init) \ + *(.initcall5s.init) \ +- *(.initcallrootfs.init) \ + *(.initcall6.init) \ + *(.initcall6s.init) \ + *(.initcall7.init) \ + *(.initcall7s.init) + ++#define INITCALLS_ROOT \ ++ *(.initcallrootfs.init) ++ + /** + * PERCPU_VADDR - define output section for percpu area + * @vaddr: explicit base address (optional) +--- a/init/do_mounts.c ++++ b/init/do_mounts.c +@@ -176,16 +176,8 @@ static int __init fs_names_setup(char *s + return 1; + } + +-static unsigned int __initdata root_delay; +-static int __init root_delay_setup(char *str) +-{ +- root_delay = simple_strtoul(str, NULL, 0); +- return 1; +-} +- + __setup("rootflags=", root_data_setup); + __setup("rootfstype=", fs_names_setup); +-__setup("rootdelay=", root_delay_setup); + + static void __init get_fs_names(char *page) + { +@@ -365,23 +357,6 @@ void __init prepare_namespace(void) + { + int is_floppy; + +- if (root_delay) { +- printk(KERN_INFO "Waiting %dsec before mounting root device...\n", +- root_delay); +- ssleep(root_delay); +- } +- +- /* +- * wait for the known devices to complete their probing +- * +- * Note: this is a potential source of long boot delays. +- * For example, it is not atypical to wait 5 seconds here +- * for the touchpad of a laptop to initialize. +- */ +- wait_for_device_probe(); +- +- md_run_setup(); +- + if (saved_root_name[0]) { + root_device_name = saved_root_name; + if (!strncmp(root_device_name, "mtd", 3) || +--- a/init/main.c ++++ b/init/main.c +@@ -76,6 +76,7 @@ + #ifdef CONFIG_X86_LOCAL_APIC + #include + #endif ++#include "do_mounts.h" + + static int kernel_init(void *); + +@@ -752,12 +753,13 @@ int do_one_initcall(initcall_t fn) + + + extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[]; ++extern initcall_t __root_initcall_start[], __root_initcall_end[]; + +-static void __init do_initcalls(void) ++static void __init do_initcalls(initcall_t *start, initcall_t *end) + { + initcall_t *call; + +- for (call = __early_initcall_end; call < __initcall_end; call++) ++ for (call = start; call < end; call++) + do_one_initcall(*call); + + /* Make sure there is no pending stuff from the initcall sequence */ +@@ -779,7 +781,7 @@ static void __init do_basic_setup(void) + usermodehelper_init(); + driver_init(); + init_irq_proc(); +- do_initcalls(); ++ do_initcalls(__early_initcall_end, __initcall_end); + } + + static void __init do_pre_smp_initcalls(void) +@@ -840,6 +842,13 @@ static noinline int init_post(void) + panic("No init found. Try passing init= option to kernel."); + } + ++static unsigned int __initdata root_delay; ++static int __init root_delay_setup(char *str) ++{ ++ root_delay = simple_strtoul(str, NULL, 0); ++ return 1; ++} ++__setup("rootdelay=", root_delay_setup); + static int __init kernel_init(void * unused) + { + lock_kernel(); +@@ -879,7 +888,16 @@ static int __init kernel_init(void * unu + + if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) { + ramdisk_execute_command = NULL; +- prepare_namespace(); ++ if (root_delay) { ++ printk(KERN_INFO "Waiting %desc before mounting root device...\n", ++ root_delay); ++ ssleep(root_delay); ++ } ++ while (driver_probe_done() != 0) ++ msleep(100); ++ md_run_setup(); ++ do_initcalls(__root_initcall_start, __root_initcall_end); ++ prepare_namespace(); + } + + /* -- cgit v1.2.3