summaryrefslogtreecommitdiff
path: root/target/linux/x86-2.6/image
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/x86-2.6/image')
-rw-r--r--target/linux/x86-2.6/image/Config.in30
-rw-r--r--target/linux/x86-2.6/image/Makefile62
-rwxr-xr-xtarget/linux/x86-2.6/image/gen_image.sh60
-rw-r--r--target/linux/x86-2.6/image/grub/Makefile79
-rw-r--r--target/linux/x86-2.6/image/grub/menu.lst11
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
+