Hi! The attached series of patches adds support for Kurobox Pro to Debian Installer. Kurobox Pro uses Das U-Boot so flash-kernel is used to create U-Boot images of kernel and ramdisk during installation. The original firmware has files with network and host information that can be used by oldsys-preseed. In short the installation on Kurobox Pro would be: 1) Build d-i 2) Format /dev/sda1 on Kurobox Pro with ext2 3) Put d-i images on /dev/sda1 4) Run flash-debian 5) Reboot 6) Install as normal 7) Reboot 8) Success The adding of jffs2 to i386 is not related to Kurobox Pro support, only done by request. [0] Attached patches: 0000 Adds support for Kurobox Pro to flash-kernel 0001 Adds support for Kurobox Pro to oldsys-preseed, needs jffs2-modules to work (see 0003) 0002 Adds tests for Kurobox Pro to oldsys-preseed. 0003 Adds support for jffs2 modules to kernel-wedge, needed by oldsys-preseed on Kurobox Pro. Also requested to support OLPC XO. 0004 Adds jffs2 modules to armel-orion5x, needed by oldsys-preseed on Kurobox Pro, and to i386, to support OLPC XO (requested). [0] 0005 Adds build options and flash-debian script to d-i to support Kurobox Pro. kuroboxpro_dhcp.tgz kuroboxpro_static.tgz Archives of files used by Kurobox Pro tests in oldsys-preseed. -- Per [0] http://lists.debian.org/debian-boot/2008/07/msg00368.html
diff --git a/packages/flash-kernel/README b/packages/flash-kernel/README
index 6cf34d8..39f3dd5 100644
--- a/packages/flash-kernel/README
+++ b/packages/flash-kernel/README
@@ -22,6 +22,7 @@ Supported systems
At the moment, the following systems are supported:
+ - Buffalo/Revogear Kurobox Pro
- HP Media Vault mv2120
- Linksys NSLU2
- QNAP TS-109
diff --git a/packages/flash-kernel/debian/flash-kernel-installer.postinst b/packages/flash-kernel/debian/flash-kernel-installer.postinst
index ad5d0f6..0a2d7d6 100755
--- a/packages/flash-kernel/debian/flash-kernel-installer.postinst
+++ b/packages/flash-kernel/debian/flash-kernel-installer.postinst
@@ -22,7 +22,7 @@ findfs () {
# Are we writing to flash or constructing an image on disk?
write_to_flash() {
case "$machine" in
- "HP Media Vault mv2120")
+ "Buffalo/Revogear Kurobox Pro" | "HP Media Vault mv2120")
return 1
;;
*)
@@ -51,6 +51,12 @@ if ! grep -q flash-kernel /target/etc/kernel-img.conf; then
fi
case "$machine" in
+ "Buffalo/Revogear Kurobox Pro")
+ in-target update-initramfs -u || true
+ if ! apt-install uboot-mkimage; then
+ error "apt-install uboot-mkimage failed"
+ fi
+ ;;
"HP Media Vault mv2120")
in-target update-initramfs -u || true
if ! apt-install uboot-mkimage; then
diff --git a/packages/flash-kernel/flash-kernel b/packages/flash-kernel/flash-kernel
index 1614e0c..78b3b10 100755
--- a/packages/flash-kernel/flash-kernel
+++ b/packages/flash-kernel/flash-kernel
@@ -82,6 +82,7 @@ if [ -n "$1" ]; then
kfile=/boot/vmlinuz-$kvers
ifile=/boot/initrd.img-$kvers
desc="Debian kernel $1"
+ idesc="Debian ramdisk $1"
else
if [ -e /vmlinuz ]; then
kfile=/vmlinuz
@@ -93,6 +94,7 @@ else
error "Cannot find a default kernel in /vmlinuz or /boot/vmlinuz"
fi
desc="Debian kernel"
+ idesc="Debian ramdisk"
fi
if [ ! -e $kfile ] || [ ! -e $ifile ]; then
@@ -109,6 +111,32 @@ subarch=$(echo "$kfile" | sed -e 's/.*-//')
machine=$(grep "^Hardware" /proc/cpuinfo | sed 's/Hardware\s*:\s*//')
case "$machine" in
+ "Buffalo/Revogear Kurobox Pro")
+ check_subarch "orion5x"
+ printf "Generating kernel u-boot image... " >&2
+ tmp=$(tempfile)
+ # Set machine id 1509 (0x05e5)
+ devio > $tmp 'wl 0xe3a01c05,4' 'wl 0xe38110e5,4'
+ cat $kfile >> $tmp
+ mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "$desc" -d $tmp $tmp.uboot >&2 1>/dev/null
+ echo "done." >&2
+ if [ -e /boot/uImage.buffalo ]; then
+ echo "Creating backup of /boot/uImage.buffalo." >&2
+ mv /boot/uImage.buffalo /boot/uImage.buffalo.bak
+ fi
+ echo "Creating new /boot/uImage.buffalo." >&2
+ mv $tmp.uboot /boot/uImage.buffalo
+ rm -f $tmp
+ printf "Generating initrd u-boot image... " >&2
+ mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00008000 -e 0x00008000 -n "$idesc" -d $ifile initrd.uboot >&2 1>/dev/null
+ echo "done." >&2
+ if [ -e /boot/initrd.buffalo ]; then
+ echo "Creating backup of /boot/initrd.buffalo." >&2
+ mv /boot/initrd.buffalo /boot/initrd.buffalo.bak
+ fi
+ echo "Creating new /boot/initrd.buffalo." >&2
+ mv initrd.uboot /boot/initrd.buffalo
+ ;;
"HP Media Vault mv2120")
check_subarch "orion5x"
tmp=$(tempfile)
diff --git a/packages/flash-kernel/initramfs-tools/hooks/flash_kernel_set_root b/packages/flash-kernel/initramfs-tools/hooks/flash_kernel_set_root
index c2e5e0a..f37a6af 100755
--- a/packages/flash-kernel/initramfs-tools/hooks/flash_kernel_set_root
+++ b/packages/flash-kernel/initramfs-tools/hooks/flash_kernel_set_root
@@ -31,7 +31,7 @@ esac
# Only run on some machines
machine=$(grep "^Hardware" /proc/cpuinfo | sed 's/Hardware\s*:\s*//')
case "$machine" in
- "HP Media Vault mv2120" | "Linksys NSLU2" | "QNAP TS-109/TS-209" | "QNAP TS-409" | "Thecus N2100")
+ "Buffalo/Revogear Kurobox Pro" | "HP Media Vault mv2120" | "Linksys NSLU2" | "QNAP TS-109/TS-209" | "QNAP TS-409" | "Thecus N2100")
# Pass the check and continue below
;;
*)
@@ -93,7 +93,7 @@ case "$machine" in
;;
# The boot loader passes a bogus root= (e.g. root=/dev/ram), so
# override the command line parameter.
- "HP Media Vault mv2120" | "QNAP TS-109/TS-209" | "QNAP TS-409" | "Thecus N2100")
+ "Buffalo/Revogear Kurobox Pro" | "HP Media Vault mv2120" | "QNAP TS-109/TS-209" | "QNAP TS-409" | "Thecus N2100")
install -d $DESTDIR/conf
echo ROOT="$rootdev" >> $DESTDIR/conf/param.conf
;;
diff --git a/packages/oldsys-preseed/oldsys-preseed b/packages/oldsys-preseed/oldsys-preseed
index 449bbed..8408ec4 100755
--- a/packages/oldsys-preseed/oldsys-preseed
+++ b/packages/oldsys-preseed/oldsys-preseed
@@ -112,7 +112,46 @@ case "`archdetect`" in
;;
arm*/orion5x)
machine=$(grep "^Hardware" /proc/cpuinfo | sed 's/Hardware\s*:\s*//')
- if echo "$machine" | grep -q "^HP Media Vault mv2120"; then
+ if echo "$machine" | grep -q "^Buffalo/Revogear Kurobox Pro"; then
+ check_file /proc/mtd
+ rootfs=$(get_mtdblock "rootfs")
+ if [ -z "$rootfs" ]; then
+ log "Can't find rootfs MTD partition"
+ exit
+ fi
+ path=/tmp/oldsys-preseed
+ mkdir -p $path/rootfs
+ mount -t jffs2 -o ro /dev/$rootfs $path/rootfs || true
+ INTERFACE=eth0
+ parse_unix_tree $path/rootfs
+ netinfo=$path/rootfs/etc/netinfo
+ if [ -e "$netinfo" ]; then
+ usage=$(sed -n '/^my_ipaddress/ {s/.*=//; p}' "$netinfo")
+ if [ "$usage" = "dhcp" ]; then
+ NET_CONFIG=dhcp
+ else
+ NET_CONFIG=static
+ IP_ADDRESS=$usage
+ NETMASK=$(sed -n '/^my_subnetmask/ {s/.*=//; p}' "$netinfo")
+ GATEWAY=$(sed -n '/^my_dgw/ {s/.*=//; p}' "$netinfo")
+ fi
+ fi
+ hostinfo=$path/rootfs/etc/host.info
+ if [ -e "$hostinfo" ]; then
+ HOSTNAME=$(sed '/^hostname/ {s/.*=//; p}' "$hostinfo")
+ fi
+
+ unset_matching_var "HOSTNAME" "KUROBOX-PRO"
+ if [ "$NET_CONFIG" != "static" ]; then
+ IPADDRESS=192.168.11.150
+ NETMASK=255.255.255.0
+ GATEWAY=192.168.11.1
+ [ -z "$NAMESERVERS" ] && NAMESERVERS=192.168.11.1
+ dhcp_fallback $FILE
+ fi
+ umount $path/rootfs || true
+ rmdir $path/rootfs $path || true
+ elif echo "$machine" | grep -q "^HP Media Vault mv2120"; then
path=/tmp/oldsys-preseed
mkdir -p $path/sda5
mount -t ext3 -o ro /dev/sda5 $path/sda5 || true
diff --git a/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.preseed b/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.preseed
new file mode 100644
index 0000000..58f50e4
--- /dev/null
+++ b/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.preseed
@@ -0,0 +1,8 @@
+d-i netcfg/dhcp_failed note
+d-i netcfg/dhcp_options select Configure network manually
+d-i netcfg/get_ipaddress string 192.168.11.150
+d-i netcfg/get_netmask string 255.255.255.0
+d-i netcfg/get_gateway string 192.168.11.1
+d-i netcfg/get_nameservers string 83.255.249.10 83.255.245.10
+d-i netcfg/choose_interface select eth0
+d-i netcfg/use_dhcp boolean true
diff --git a/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.test b/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.test
new file mode 100644
index 0000000..180bf0d
--- /dev/null
+++ b/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.test
@@ -0,0 +1,29 @@
+path=$(mktemp -t oldsys-preseed-tests.XXXXXX -d)
+mkdir -p $path/rootfs
+(cd $path/rootfs ; tar -xzf $TEST_DIR/kuroboxpro_dhcp.tgz > /dev/null 2>&1)
+INTERFACE=eth0
+parse_unix_tree $path/rootfs
+netinfo=$path/rootfs/etc/netinfo
+if [ -e "$netinfo" ]; then
+ IPADDRESS=$(sed -n '/^my_ipaddress/ {s/.*=//; p}' "$netinfo")
+ if [ "$IPADDRESS" = "dhcp" ]; then
+ NET_CONFIG=dhcp
+ else
+ NET_CONFIG=static
+ NETMASK=$(sed -n '/^my_subnetmask/ {s/.*=//; p}' "$netinfo")
+ GATEWAY=$(sed -n '/^my_dgw/ {s/.*=//; p}' "$netinfo")
+ fi
+fi
+hostinfo=$path/rootfs/etc/host.info
+if [ -e "$hostinfo" ]; then
+ HOSTNAME=$(sed -n '/^hostname/ {s/.*=//; p}' "$hostinfo")
+fi
+unset_matching_var "HOSTNAME" "KUROBOX-PRO"
+if [ "$NET_CONFIG" != "static" ]; then
+ IPADDRESS=192.168.11.150
+ NETMASK=255.255.255.0
+ GATEWAY=192.168.11.1
+ [ -z "$NAMESERVERS" ] && NAMESERVERS=192.168.11.1
+ dhcp_fallback "$1"
+fi
+generate_preseed_file $1
diff --git a/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.tgz b/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.tgz
new file mode 100644
index 0000000..bdbcd12
Binary files /dev/null and b/packages/oldsys-preseed/tests/arm/kuroboxpro_dhcp.tgz differ
diff --git a/packages/oldsys-preseed/tests/arm/kuroboxpro_static.preseed b/packages/oldsys-preseed/tests/arm/kuroboxpro_static.preseed
new file mode 100644
index 0000000..4650bbd
--- /dev/null
+++ b/packages/oldsys-preseed/tests/arm/kuroboxpro_static.preseed
@@ -0,0 +1,7 @@
+d-i netcfg/choose_interface select eth0
+d-i netcfg/get_ipaddress string 192.168.0.22
+d-i netcfg/get_netmask string 255.255.255.0
+d-i netcfg/get_gateway string 192.168.0.10
+d-i netcfg/get_nameservers string 192.168.0.10
+d-i netcfg/confirm_static boolean true
+d-i netcfg/disable_dhcp boolean true
diff --git a/packages/oldsys-preseed/tests/arm/kuroboxpro_static.test b/packages/oldsys-preseed/tests/arm/kuroboxpro_static.test
new file mode 100644
index 0000000..8a43534
--- /dev/null
+++ b/packages/oldsys-preseed/tests/arm/kuroboxpro_static.test
@@ -0,0 +1,29 @@
+path=$(mktemp -t oldsys-preseed-tests.XXXXXX -d)
+mkdir -p $path/rootfs
+(cd $path/rootfs ; tar -xzf $TEST_DIR/kuroboxpro_static.tgz > /dev/null 2>&1)
+INTERFACE=eth0
+parse_unix_tree $path/rootfs
+netinfo=$path/rootfs/etc/netinfo
+if [ -e "$netinfo" ]; then
+ IPADDRESS=$(sed -n '/^my_ipaddress/ {s/.*=//; p}' "$netinfo")
+ if [ "$IPADDRESS" = "dhcp" ]; then
+ NET_CONFIG=dhcp
+ else
+ NET_CONFIG=static
+ NETMASK=$(sed -n '/^my_subnetmask/ {s/.*=//; p}' "$netinfo")
+ GATEWAY=$(sed -n '/^my_dgw/ {s/.*=//; p}' "$netinfo")
+ fi
+fi
+hostinfo=$path/rootfs/etc/host.info
+if [ -e "$hostinfo" ]; then
+ HOSTNAME=$(sed -n '/^hostname/ {s/.*=//; p}' "$hostinfo")
+fi
+unset_matching_var "HOSTNAME" "KUROBOX-PRO"
+if [ "$NET_CONFIG" != "static" ]; then
+ IPADDRESS=192.168.11.150
+ NETMASK=255.255.255.0
+ GATEWAY=192.168.11.1
+ [ -z "$NAMESERVERS" ] && NAMESERVERS=192.168.11.1
+ dhcp_fallback "$1"
+fi
+generate_preseed_file $1
diff --git a/packages/oldsys-preseed/tests/arm/kuroboxpro_static.tgz b/packages/oldsys-preseed/tests/arm/kuroboxpro_static.tgz
new file mode 100644
index 0000000..d166d85
Binary files /dev/null and b/packages/oldsys-preseed/tests/arm/kuroboxpro_static.tgz differ
diff --git a/packages/kernel/kernel-wedge/package-list b/packages/kernel/kernel-wedge/package-list index 13eba22..5b0e4e4 100644 --- a/packages/kernel/kernel-wedge/package-list +++ b/packages/kernel/kernel-wedge/package-list @@ -177,6 +177,12 @@ Priority: standard Description: ISOFS filesystem support This package contains the ISOFS filesystem module for the Linux kernel. +Package: jffs2-modules +Depends: kernel-image, zlib-modules +Priority: standard +Description: JFFS2 filesystem support + This package contains the JFFS2 filesystem module for the Linux kernel. + Package: jfs-modules Depends: kernel-image, nls-core-modules Priority: standard diff --git a/packages/kernel/kernel-wedge/modules/jffs2-modules b/packages/kernel/kernel-wedge/modules/jffs2-modules new file mode 100644 index 0000000..19f4e10 --- /dev/null +++ b/packages/kernel/kernel-wedge/modules/jffs2-modules @@ -0,0 +1 @@ +jffs2
diff --git a/packages/kernel/linux-modules-di-armel-2.6/modules/armel/jffs2-modules b/packages/kernel/linux-modules-di-armel-2.6/modules/armel/jffs2-modules new file mode 100644 index 0000000..245c7d8 --- /dev/null +++ b/packages/kernel/linux-modules-di-armel-2.6/modules/armel/jffs2-modules @@ -0,0 +1 @@ +#include <jffs2-modules> diff --git a/packages/kernel/linux-modules-di-i386-2.6/modules/i386/jffs2-modules b/packages/kernel/linux-modules-di-i386-2.6/modules/i386/jffs2-modules new file mode 100644 index 0000000..245c7d8 --- /dev/null +++ b/packages/kernel/linux-modules-di-i386-2.6/modules/i386/jffs2-modules @@ -0,0 +1 @@ +#include <jffs2-modules> diff --git a/packages/kernel/linux-kernel-di-armel-2.6/debian/control.stub b/packages/kernel/linux-kernel-di-armel-2.6/debian/control.stub index f3973e5..2588255 100644 --- a/packages/kernel/linux-kernel-di-armel-2.6/debian/control.stub +++ b/packages/kernel/linux-kernel-di-armel-2.6/debian/control.stub @@ -3,5 +3,5 @@ Section: debian-installer Priority: optional Maintainer: Debian Install System Team <debian-boot@lists.debian.org> Uploaders: Joey Hess <joeyh@debian.org>, Martin Michlmayr <tbm@cyrius.com> -Build-Depends: kernel-wedge (>= 2.45) +Build-Depends: kernel-wedge (>= 2.46) Vcs-Svn: svn://svn.debian.org/d-i/trunk/packages/kernel/linux-kernel-di-armel-2.6 diff --git a/packages/kernel/linux-modules-di-i386-2.6/debian/control.stub b/packages/kernel/linux-modules-di-i386-2.6/debian/control.stub index 7ed9e23..5ea3bd6 100644 --- a/packages/kernel/linux-modules-di-i386-2.6/debian/control.stub +++ b/packages/kernel/linux-modules-di-i386-2.6/debian/control.stub @@ -3,5 +3,5 @@ Section: debian-installer Priority: optional Maintainer: Debian Install System Team <debian-boot@lists.debian.org> Uploaders: Max Vozeler <xam@debian.org>, Frans Pop <fjp@debian.org> -Build-Depends: kernel-wedge (>= 2.45) +Build-Depends: kernel-wedge (>= 2.46) Vcs-Svn: svn://svn.debian.org/d-i/trunk/packages/kernel/linux-modules-di-i386-2.6
diff --git a/installer/build/boot/arm/kuroboxpro-flash-debian b/installer/build/boot/arm/kuroboxpro-flash-debian
new file mode 100644
index 0000000..3e766b8
--- /dev/null
+++ b/installer/build/boot/arm/kuroboxpro-flash-debian
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# This code is covered by the GNU General Public License (GPLv2 or higher)
+
+NVRAM=$(which nvram)
+SETENV="$NVRAM -c set"
+
+path=$(mount | grep ext2 | sed -n '/sda1/ {s/\/dev\/sda1 on \(.*\) type.*/\1/; p}')
+if [ -z "$path" ]; then
+ echo "You have to create an ext2 filesystem on /dev/sda1"
+ exit 1
+fi
+
+if [ ! -e $path/uImage.buffalo ]; then
+ echo "You have to download the uImage.buffalo file from the debian-installer for Kurobox Pro, and put it in $path"
+ exit 1
+fi
+
+if [ ! -e $path/initrd.buffalo ]; then
+ echo "You have to download the initrd.buffalo file from the debian-installer for Kurobox Pro, and put it in $path"
+ exit 1
+fi
+
+if [ -z "$NVRAM" ]; then
+ echo "There is no nvram utility to alter Das U-Boot environment"
+ exit 1
+fi
+
+printf "Saving Das U-Boot environment to ubootenv.bak... "
+$NVRAM -c printenv > ubootenv.bak
+echo "done."
+
+echo "Changing Das U-Boot environment... "
+$SETENV bootcmd 'ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); ext2load ide 0:1 $(default_initrd_addr) /$(initrd); bootm $(default_kernel_addr) $(default_initrd_addr)'
+echo "done."
+
+echo "Please reboot your Kurobox Pro."
diff --git a/installer/build/config/armel/orion5x/netboot.cfg b/installer/build/config/armel/orion5x/netboot.cfg
index 9b00ed8..59bdbc7 100644
--- a/installer/build/config/armel/orion5x/netboot.cfg
+++ b/installer/build/config/armel/orion5x/netboot.cfg
@@ -1,9 +1,25 @@
MEDIA_TYPE = netboot image
-TARGET = $(TEMP_INITRD) $(TEMP_KERNEL) ts209 ts409
+TARGET = $(TEMP_INITRD) $(TEMP_KERNEL) kuroboxpro ts209 ts409
EXTRANAME = $(MEDIUM)
TYPE = netboot/network-console
+# Kurobox Pro
+kuroboxpro:
+ mkdir -p $(SOME_DEST)/$(EXTRANAME)/kuroboxpro
+ mkdir -p $(TEMP)/kuroboxpro
+ # Set machine id 1509 (0x05e5)
+ devio > $(TEMP)/kuroboxpro/kernel 'wl 0xe3a01c05,4' 'wl 0xe38110e5,4'
+ cat $(TEMP_KERNEL) >> $(TEMP)/kuroboxpro/kernel
+ mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "Debian kernel" -d $(TEMP)/kuroboxpro/kernel $(TEMP)/kuroboxpro/kernel.uboot
+ cp $(TEMP)/kuroboxpro/kernel.uboot $(SOME_DEST)/$(EXTRANAME)/kuroboxpro/uImage.buffalo
+ mkimage -A arm -O linux -T ramdisk -C gzip -a 0x02000000 -e 0x02000000 -n "Debian Installer ramdisk" -d $(TEMP_INITRD) $(TEMP)/kuroboxpro/initrd.uboot
+ cp $(TEMP)/kuroboxpro/initrd.uboot $(SOME_DEST)/$(EXTRANAME)/kuroboxpro/initrd.buffalo
+ install -m 744 boot/arm/kuroboxpro-flash-debian $(SOME_DEST)/$(EXTRANAME)/kuroboxpro/flash-debian
+ update-manifest $(SOME_DEST)/$(EXTRANAME)/kuroboxpro/flash-debian "Script to flash debian-installer"
+ update-manifest $(SOME_DEST)/$(EXTRANAME)/kuroboxpro/uImage.buffalo "Linux kernel for Kurobox Pro"
+ update-manifest $(SOME_DEST)/$(EXTRANAME)/kuroboxpro/initrd.buffalo "Linux kernel for Kurobox Pro"
+
# QNAP TS-109/TS-209
ts209:
mkdir -p $(SOME_DEST)/$(EXTRANAME)/qnap/ts-209
Attachment:
kuroboxpro_dhcp.tgz
Description: GNU Zip compressed data
Attachment:
kuroboxpro_static.tgz
Description: GNU Zip compressed data