diff options
Diffstat (limited to 'target/linux/x86-2.6/image')
-rw-r--r-- | target/linux/x86-2.6/image/Config.in | 30 | ||||
-rw-r--r-- | target/linux/x86-2.6/image/Makefile | 62 | ||||
-rwxr-xr-x | target/linux/x86-2.6/image/gen_image.sh | 60 | ||||
-rw-r--r-- | target/linux/x86-2.6/image/grub/Makefile | 79 | ||||
-rw-r--r-- | target/linux/x86-2.6/image/grub/menu.lst | 11 |
5 files changed, 242 insertions, 0 deletions
diff --git a/target/linux/x86-2.6/image/Config.in b/target/linux/x86-2.6/image/Config.in new file mode 100644 index 0000000000..511a8d9d09 --- /dev/null +++ b/target/linux/x86-2.6/image/Config.in @@ -0,0 +1,30 @@ +config X86_GRUB_IMAGES + bool "Build GRUB images (Linux x86 or x86_64 host only)" + depends LINUX_2_6_X86 + depends TARGET_ROOTFS_EXT2FS || TARGET_ROOTFS_JFFS2 + default y + +config X86_GRUB_BAUDRATE + int "Serial port baud rate" + depends X86_GRUB_IMAGES + default 38400 + +config X86_GRUB_KERNELPART + int "Kernel partition size (in MB)" + depends X86_GRUB_IMAGES + default 4 + +config X86_GRUB_ROOTPART + string + prompt "Root partition on target device" if X86_GRUB_IMAGES + default "/dev/hda2" + help + The root partition on the final device. If you don't know, + you probably want the default (/dev/hda2). + +config X86_GRUB_BOOTOPTS + string + prompt "Extra kernel boot options" if X86_GRUB_IMAGES + default "" + help + If you don't know, just leave it blank. diff --git a/target/linux/x86-2.6/image/Makefile b/target/linux/x86-2.6/image/Makefile new file mode 100644 index 0000000000..7aa03b2d27 --- /dev/null +++ b/target/linux/x86-2.6/image/Makefile @@ -0,0 +1,62 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/image.mk + +export PATH=$(TARGET_PATH):/sbin +ROOTPART=$(strip $(subst ",, $(CONFIG_X86_GRUB_ROOTPART))) +#")) # fix vim's broken syntax highlighting + + +ifeq ($(CONFIG_X86_GRUB_IMAGES),y) + define Build/Compile + $(MAKE) -C grub compile + endef + + define Build/Clean + $(MAKE) -C grub clean + endef + + define Image/cmdline/jffs2-64k + block2mtd.block2mtd=$(ROOTPART),65536 root=/dev/mtdblock0 rootfstype=jffs2 + endef + + define Image/cmdline/jffs2-128k + block2mtd.block2mtd=$(ROOTPART),131072 root=/dev/mtdblock0 rootfstype=jffs2 + endef + + define Image/cmdline/ext2 + root=$(ROOTPART) rootfstype=ext2 $(CONFIG_X86_GRUB_BOOTOPTS) + endef + + define Image/Build/grub + mkdir -p $(KDIR)/root.grub/boot/grub + $(CP) \ + $(STAGING_DIR)/usr/lib/grub/i386-pc/stage1 \ + $(STAGING_DIR)/usr/lib/grub/i386-pc/stage2 \ + $(STAGING_DIR)/usr/lib/grub/i386-pc/e2fs_stage1_5 \ + $(KDIR)/root.grub/boot/grub/ + $(CP) $(LINUX_DIR)/arch/i386/boot/bzImage $(KDIR)/root.grub/boot/vmlinuz + sed \ + -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1)))#g' \ + -e 's#@BAUDRATE@#$(CONFIG_X86_GRUB_BAUDRATE)#g' \ + ./grub/menu.lst > $(KDIR)/root.grub/boot/grub/menu.lst + PATH="$(STAGING_DIR)/usr/sbin:$(STAGING_DIR)/bin:$(PATH)" ./gen_image.sh $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).image $(CONFIG_X86_GRUB_KERNELPART) $(KDIR)/root.grub $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) + endef +endif + +define Image/Build + $(call Image/Build/grub,$(1)) + cp $(KDIR)/root.$(1) $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).fs + cp $(LINUX_DIR)/arch/i386/boot/bzImage $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinuz +endef + +$(eval $(call BuildImage)) + +$(eval $(call RequireCommand,fdisk, \ + Please install fdisk \ +)) diff --git a/target/linux/x86-2.6/image/gen_image.sh b/target/linux/x86-2.6/image/gen_image.sh new file mode 100755 index 0000000000..21deeee6ac --- /dev/null +++ b/target/linux/x86-2.6/image/gen_image.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# Copyright (C) 2006 OpenWrt.org + +[ $# == 5 ] || { + echo "SYNTAX: $0 <file> <kernel size> <kernel directory> <rootfs size> <rootfs image>" + exit 1 +} + +file="$1" +part1s="$2" +part1d="$3" +part2s="$4" +part2f="$5" + +head=16 +sect=63 +cyl=$(( ($part1s + $part2s) * 1024 * 1024 / ($head * $sect * 512))) + +dd if=/dev/zero of="$file" bs=1M count=$(($part1s + $part2s)) 2>/dev/null || exit +fdisk -u -C $cyl -H $head -S $sect "$file" > /dev/null 2>/dev/null <<EOF +n +p +1 + ++$(($part1s * 1024))K +n +p +2 + + +w +q +EOF + +block() { + echo -e 'p\nq' | fdisk -u -C $cyl -H $head -S $sect "$file" | awk -v file="$file$1" -v n="$(($2 + 2))" ' +$1 == file { + print $n * 512 +}' +} + +start="$(block 1 0)" +end="$(block 1 1)" +blocks="$(( ($end - $start) / 1024 ))" + +genext2fs -d "$part1d" -b "$blocks" "$file.kernel" +dd if="$file.kernel" of="$file" bs=512 seek="$(($start / 512))" conv=notrunc +rm -f "$file.kernel" + +start="$(block 2 0)" +dd if="$part2f" of="$file" bs=512 seek="$(($start / 512))" conv=notrunc + +which chpax >/dev/null && chpax -zp $(which grub) +grub --device-map=/dev/null <<EOF +device (hd0) $file +geometry (hd0) $cyl $head $sect +root (hd0,0) +setup (hd0) +EOF + diff --git a/target/linux/x86-2.6/image/grub/Makefile b/target/linux/x86-2.6/image/grub/Makefile new file mode 100644 index 0000000000..e30443e18c --- /dev/null +++ b/target/linux/x86-2.6/image/grub/Makefile @@ -0,0 +1,79 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id: Makefile 4855 2006-09-24 20:49:31Z nico $ + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=grub +PKG_VERSION:=0.97 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=ftp://alpha.gnu.org/gnu/grub +PKG_MD5SUM:=cd3f3eb54446be6003156158d51f4884 +PKG_CAT:=zcat + +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/grub-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +ifeq ($(HOST_ARCH),x86_64) + define Build/Configure + (cd $(PKG_BUILD_DIR); \ + LDFLAGS="-static" \ + ./configure \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --program-prefix="" \ + --program-suffix="" \ + --prefix=/usr \ + --exec-prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --localstatedir=/var \ + --mandir=/usr/man \ + --infodir=/usr/info \ + $(DISABLE_NLS) \ + ) + endef +else + define Build/Configure + (cd $(PKG_BUILD_DIR); \ + LDFLAGS="-static" \ + ./configure \ + --program-prefix="" \ + --program-suffix="" \ + --prefix=/usr \ + --exec-prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --localstatedir=/var \ + --mandir=/usr/man \ + --infodir=/usr/info \ + ) + endef +endif + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) +endef + +define Build/InstallDev + $(MAKE) -C $(PKG_BUILD_DIR) \ + DESTDIR="$(STAGING_DIR)" \ + install +endef + +$(eval $(call Build/DefaultTargets)) diff --git a/target/linux/x86-2.6/image/grub/menu.lst b/target/linux/x86-2.6/image/grub/menu.lst new file mode 100644 index 0000000000..590a7d5e3a --- /dev/null +++ b/target/linux/x86-2.6/image/grub/menu.lst @@ -0,0 +1,11 @@ +serial --unit=0 --speed=@BAUDRATE@ --word=8 --parity=no --stop=1 +terminal --timeout=10 serial + +default 0 +timeout 5 + +title OpenWrt +root (hd0,0) +kernel /boot/vmlinuz @CMDLINE@ noinitrd console=ttyS0,@BAUDRATE@n8 reboot=bios +boot + |