octeon: add er8 sysupgrade support
Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 44902
This commit is contained in:
parent
e9b6602a84
commit
1773aa5163
5 changed files with 119 additions and 42 deletions
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||
ARCH:=mips64
|
||||
BOARD:=octeon
|
||||
BOARDNAME:=Cavium Networks Octeon
|
||||
FEATURES:=squashfs jffs2 ext4 pci usb
|
||||
FEATURES:=squashfs jffs2 ext4 initramfs pci usb
|
||||
CPU_TYPE:=octeon
|
||||
CPU_CFLAGS_octeon:=-march=octeon -mabi=64
|
||||
MAINTAINER:=John Crispin <blogic@openwrt.org>
|
||||
|
|
|
@ -35,36 +35,50 @@ platform_copy_config() {
|
|||
esac
|
||||
}
|
||||
|
||||
platform_do_flash() {
|
||||
local tar_file=$1
|
||||
local board=$2
|
||||
local kernel=$3
|
||||
local rootfs=$4
|
||||
|
||||
mkdir -p /boot
|
||||
mount -t vfat /dev/$kernel /boot
|
||||
|
||||
[ -f /boot/vmlinux.64 -a ! -L /boot/vmlinux.64 ] && {
|
||||
mv /boot/vmlinux.64 /boot/vmlinux.64.previous
|
||||
mv /boot/vmlinux.64.md5 /boot/vmlinux.64.md5.previous
|
||||
}
|
||||
|
||||
echo "flashing kernel to /dev/$kernel"
|
||||
tar xf $tar_file sysupgrade-$board/kernel -O > /boot/vmlinux.64
|
||||
md5sum /boot/vmlinux.64 | cut -f1 -d " " > /boot/vmlinux.64.md5
|
||||
echo "flashing rootfs to ${rootfs}"
|
||||
tar xf $tar_file sysupgrade-$board/root -O | dd of="${rootfs}" bs=4096
|
||||
sync
|
||||
umount /boot
|
||||
}
|
||||
|
||||
platform_do_upgrade() {
|
||||
local tar_file="$1"
|
||||
local board=$(octeon_board_name)
|
||||
local rootfs="$(platform_get_rootfs)"
|
||||
local kernel=
|
||||
|
||||
[ -b "${rootfs}" ] || return 1
|
||||
|
||||
case "$board" in
|
||||
erlite)
|
||||
local tar_file="$1"
|
||||
local kernel_length=`(tar xf $tar_file sysupgrade-erlite/kernel -O | wc -c) 2> /dev/null`
|
||||
local rootfs_length=`(tar xf $tar_file sysupgrade-erlite/root -O | wc -c) 2> /dev/null`
|
||||
|
||||
mkdir -p /boot
|
||||
mount -t vfat /dev/sda1 /boot
|
||||
|
||||
[ -f /boot/vmlinux.64 -a ! -L /boot/vmlinux.64 ] && {
|
||||
mv /boot/vmlinux.64 /boot/vmlinux.64.previous
|
||||
mv /boot/vmlinux.64.md5 /boot/vmlinux.64.md5.previous
|
||||
}
|
||||
|
||||
tar xf $tar_file sysupgrade-erlite/kernel -O > /boot/vmlinux.64
|
||||
md5sum /boot/vmlinux.64 | cut -f1 -d " " > /boot/vmlinux.64.md5
|
||||
tar xf $tar_file sysupgrade-erlite/root -O | dd of="${rootfs}" bs=4096
|
||||
sync
|
||||
umount /boot
|
||||
return 0
|
||||
kernel=sda1
|
||||
;;
|
||||
er)
|
||||
kernel=mmcblk0p1
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
esac
|
||||
|
||||
return 1
|
||||
platform_do_flash $tar_file $board $kernel $rootfs
|
||||
|
||||
return 0
|
||||
|
||||
}
|
||||
|
||||
|
@ -72,10 +86,11 @@ platform_check_image() {
|
|||
local board=$(octeon_board_name)
|
||||
|
||||
case "$board" in
|
||||
erlite)
|
||||
erlite | \
|
||||
er)
|
||||
local tar_file="$1"
|
||||
local kernel_length=`(tar xf $tar_file sysupgrade-erlite/kernel -O | wc -c) 2> /dev/null`
|
||||
local rootfs_length=`(tar xf $tar_file sysupgrade-erlite/root -O | wc -c) 2> /dev/null`
|
||||
local kernel_length=`(tar xf $tar_file sysupgrade-$board/kernel -O | wc -c) 2> /dev/null`
|
||||
local rootfs_length=`(tar xf $tar_file sysupgrade-$board/root -O | wc -c) 2> /dev/null`
|
||||
[ "$kernel_length" = 0 -o "$rootfs_length" = 0 ] && {
|
||||
echo "The upgarde image is corrupt."
|
||||
return 1
|
||||
|
|
|
@ -16,7 +16,6 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
|||
CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y
|
||||
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
|
||||
CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y
|
||||
# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set
|
||||
CONFIG_BINFMT_ELF32=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLOCK_COMPAT=y
|
||||
|
@ -126,6 +125,7 @@ CONFIG_HZ=250
|
|||
# CONFIG_HZ_100 is not set
|
||||
CONFIG_HZ_250=y
|
||||
CONFIG_HZ_PERIODIC=y
|
||||
CONFIG_IMAGE_CMDLINE_HACK=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_IOMMU_HELPER=y
|
||||
CONFIG_IRQCHIP=y
|
||||
|
@ -146,7 +146,6 @@ CONFIG_MIPS32_O32=y
|
|||
CONFIG_MIPS_L1_CACHE_SHIFT=7
|
||||
CONFIG_MIPS_L1_CACHE_SHIFT_7=y
|
||||
# CONFIG_MIPS_MACHINE is not set
|
||||
# CONFIG_MIPS_PARAVIRT is not set
|
||||
CONFIG_MIPS_PGD_C0_CONTEXT=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_BLOCK=y
|
||||
|
@ -154,6 +153,7 @@ CONFIG_MMC_OCTEON=y
|
|||
# CONFIG_MMC_TIFM_SD is not set
|
||||
CONFIG_MODULES_USE_ELF_REL=y
|
||||
CONFIG_MODULES_USE_ELF_RELA=y
|
||||
CONFIG_MTD_BLOCK2MTD=y
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
|
@ -204,7 +204,6 @@ CONFIG_SCSI=y
|
|||
CONFIG_SECCOMP=y
|
||||
CONFIG_SECCOMP_FILTER=y
|
||||
CONFIG_SERIAL_8250_DW=y
|
||||
CONFIG_SERIAL_EARLYCON=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SPARSEMEM=y
|
||||
CONFIG_SPARSEMEM_STATIC=y
|
||||
|
|
|
@ -7,30 +7,46 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/image.mk
|
||||
|
||||
define Image/BuildKernel
|
||||
define Image/BuildKernel/Template
|
||||
# Workaround pre-SDK-1.9.0 u-boot versions not handling the .notes section
|
||||
$(TARGET_CROSS)strip -R .notes $(KDIR)/vmlinux.elf -o $(BIN_DIR)/$(IMG_PREFIX)-vmlinux.elf
|
||||
$(STAGING_DIR_HOST)/bin/lzma e $(KDIR)/vmlinux $(KDIR)/vmlinux.bin.l7
|
||||
dd if=$(KDIR)/vmlinux.bin.l7 of=$(BIN_DIR)/$(IMG_PREFIX)-vmlinux.lzma bs=65536 conv=sync
|
||||
$(CP) $(KDIR)/vmlinux.elf $(BIN_DIR)/vmlinux.64
|
||||
md5sum $(BIN_DIR)/vmlinux.64 | cut -d " " -f 1 | tee $(BIN_DIR)/vmlinux.64.md5
|
||||
$(TARGET_CROSS)strip -R .notes $(KDIR)/vmlinux.elf -o $(BIN_DIR)/$(IMG_PREFIX)-$(1)-vmlinux.64
|
||||
$(STAGING_DIR_HOST)/bin/patch-cmdline $(BIN_DIR)/$(IMG_PREFIX)-$(1)-vmlinux.64 '$(strip $(2))'
|
||||
md5sum $(BIN_DIR)/$(IMG_PREFIX)-$(1)-vmlinux.64 | cut -d " " -f 1 | tee $(BIN_DIR)/$(IMG_PREFIX)-$(1)-vmlinux.64.md5
|
||||
endef
|
||||
|
||||
define Image/Build/squashfs
|
||||
$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
|
||||
define Image/BuildKernel/Initramfs/Template
|
||||
$(TARGET_CROSS)strip -R .notes $(KDIR)/vmlinux-initramfs.elf -o $(BIN_DIR)/$(IMG_PREFIX)-$(1)-vmlinux-initramfs.elf
|
||||
$(STAGING_DIR_HOST)/bin/patch-cmdline $(BIN_DIR)/$(IMG_PREFIX)-$(1)-vmlinux-initramfs.elf '$(strip $(2))'
|
||||
endef
|
||||
|
||||
define Image/Build/ext4/erlite
|
||||
mkdir -p $(KDIR)/sysupgrade-erlite/
|
||||
echo "BOARD=erlite" > $(KDIR)/sysupgrade-erlite/CONTROL
|
||||
$(CP) $(KDIR)/vmlinux.elf $(KDIR)/sysupgrade-erlite/kernel
|
||||
$(CP) $(KDIR)/root.ext4 $(KDIR)/sysupgrade-erlite/root
|
||||
ER_CMDLINE:=-mtdparts=phys_mapped_flash:640k(boot0)ro,640k(boot1)ro,64k(eeprom)ro block2mtd.block2mtd=/dev/mmcblk0p2,65536,rootfs,5 root=/dev/mtdblock3 rootfstype=squashfs rootwait
|
||||
|
||||
define Image/BuildKernel
|
||||
$(call Image/BuildKernel/Template,generic,)
|
||||
$(call Image/BuildKernel/Template,er,$(ER_CMDLINE))
|
||||
endef
|
||||
|
||||
define Image/BuildKernel/Initramfs
|
||||
$(call Image/BuildKernel/Initramfs/Template,generic,)
|
||||
$(call Image/BuildKernel/Initramfs/Template,er,$(ER_CMDLINE))
|
||||
endef
|
||||
|
||||
define Image/Build/sysupgrade
|
||||
mkdir -p $(KDIR)/sysupgrade-$(1)/
|
||||
echo "BOARD=er" > $(KDIR)/sysupgrade-$(1)/CONTROL
|
||||
$(CP) $(BIN_DIR)/$(IMG_PREFIX)-$(2)-vmlinux.64 $(KDIR)/sysupgrade-$(1)/kernel
|
||||
$(CP) $(KDIR)/root.$(3) $(KDIR)/sysupgrade-$(1)/root
|
||||
(cd $(KDIR); $(TAR) cvf \
|
||||
$(BIN_DIR)/$(IMG_PREFIX)-erlite-sysupgrade.tar sysupgrade-erlite)
|
||||
$(BIN_DIR)/$(IMG_PREFIX)-$(1)-sysupgrade.tar sysupgrade-$(1))
|
||||
endef
|
||||
|
||||
define Image/Build/ext4
|
||||
$(call Image/Build/ext4/erlite)
|
||||
$(call Image/Build/sysupgrade,erlite,generic,ext4)
|
||||
endef
|
||||
|
||||
define Image/Build/squashfs
|
||||
$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
|
||||
$(call Image/Build/sysupgrade,er,er,squashfs)
|
||||
endef
|
||||
|
||||
define Image/Build
|
||||
|
|
47
target/linux/octeon/patches-3.18/160-cmdline-hack.patch
Normal file
47
target/linux/octeon/patches-3.18/160-cmdline-hack.patch
Normal file
|
@ -0,0 +1,47 @@
|
|||
--- a/arch/mips/cavium-octeon/setup.c
|
||||
+++ b/arch/mips/cavium-octeon/setup.c
|
||||
@@ -609,6 +609,35 @@
|
||||
write_c0_derraddr1(0);
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_IMAGE_CMDLINE_HACK
|
||||
+extern char __image_cmdline[];
|
||||
+
|
||||
+static int __init octeon_use_image_cmdline(void)
|
||||
+{
|
||||
+ char *p = __image_cmdline;
|
||||
+ int replace = 0;
|
||||
+
|
||||
+ if (*p == '-') {
|
||||
+ replace = 1;
|
||||
+ p++;
|
||||
+ }
|
||||
+
|
||||
+ if (*p == '\0')
|
||||
+ return 0;
|
||||
+
|
||||
+ if (replace) {
|
||||
+ strlcpy(arcs_cmdline, p, sizeof(arcs_cmdline));
|
||||
+ } else {
|
||||
+ strlcat(arcs_cmdline, " ", sizeof(arcs_cmdline));
|
||||
+ strlcat(arcs_cmdline, p, sizeof(arcs_cmdline));
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+#else
|
||||
+static inline int octeon_use_image_cmdline(void) { return 0; }
|
||||
+#endif
|
||||
+
|
||||
/**
|
||||
* Early entry point for arch setup
|
||||
*/
|
||||
@@ -798,6 +827,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ octeon_use_image_cmdline();
|
||||
+
|
||||
if (strstr(arcs_cmdline, "console=") == NULL) {
|
||||
#ifdef CONFIG_CAVIUM_OCTEON_2ND_KERNEL
|
||||
strcat(arcs_cmdline, " console=ttyS0,115200");
|
Loading…
Reference in a new issue