Zombah chromebook sandbox: различия между версиями

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску
м (add backup firmware)
м (add script from openSUSE JeOS)
Строка 115: Строка 115:
ext2load mmc 1:2 0x42000000 /dtb/exynos5250-snow.dtb
ext2load mmc 1:2 0x42000000 /dtb/exynos5250-snow.dtb
bootz 0x40007000 0x44000000 0x42000000
bootz 0x40007000 0x44000000 0x42000000
</pre>
==Script to create chainloding kernel partition from openSUSE JeOS==
<pre>
#==========================================
# install Arndale SPL & U-Boot as raw
#------------------------------------------
if [[ -f "boot/smdk5250-spl.bin" || -f "boot/arndale-spl.bin" ]];then
    echo "Installing BL1..."
    if ! dd if=boot/arndale-bl1.img of=$diskname seek=1 conv=notrunc; then
        echo "Couldn't install BL1 on $diskname"
        exit 1
    fi
    echo "Installing SPL..."
    # Get SPL name (depends on U-Boot version)
    SPL_FILE=$(ls boot/*-spl.bin);
    if ! dd if=$SPL_FILE of=$diskname seek=17 conv=notrunc; then
        echo "Couldn't install SPL ($SPL_FILE) on $diskname"
        exit 1
    fi
    echo "Installing U-Boot..."
    if ! dd if=boot/u-boot.bin of=$diskname seek=49 conv=notrunc; then
        echo "Couldn't install u-boot on $diskname"
        exit 1
    fi
fi
#==========================================
# install Chromebook u-boot as boot kernel
# And do the required magic!
#------------------------------------------
if [ "$flavor" = "chromebook" ]; then
    if [ ! "$is_firstboot" ]; then
        pushd /usr/src/packages/KIWIROOT-oem/
        echo "console=tty1 debug verbose" > /tmp/config
        ./usr/bin/vbutil_kernel --pack /tmp/newkern \
            --keyblock ./usr/share/vboot/devkeys/kernel.keyblock \
            --version 1 \
            --signprivate ./usr/share/vboot/devkeys/kernel_data_key.vbprivk \
            --config=/tmp/config --vmlinuz boot/u-boot.img --arch arm
        LINE=$(kpartx -asv $diskname | head -n1)
        PART=$(echo "$LINE" | awk '{print $3}')
        dd if=/tmp/newkern of=/dev/mapper/$PART
        # "kpartx -dv $diskname" does not work if $diskname is longer than 64 characters
        LOOPDEV=$(echo "/dev/$PART" | sed 's/p[0-9][0-9]*$//')
        kpartx -dv $LOOPDEV
        losetup -d $LOOPDEV
    fi
    # For build and after reaprtition occured on 1st boot:
    # Enable bootflag on partition 2 (u-boot now looks for bootscripts on bootable partitions only)
    parted $diskname set 2 boot on
    # CGPT magic
    ./usr/bin/cgpt add -t kernel -i 1 -S 1 -T 5 -P 10 -l U-BOOT $diskname
    popd
fi
</pre>
</pre>

Версия от 00:35, 21 августа 2017

snow install nv-u-boot 3704 with serial console debug to ro&rw firmware

Backup original firmware as it contain unique device data otherwise chromeos is lost forever for device

flashrom -p linux_spi:dev=/dev/spidev1.0 -r original_image.bin
  • Device hwid will be DAISY TEST A-A 9382 after firmware update, which is treated as dev board by google. Factory hwid something like SNOW KULA A-E 4640
    • Chromeos cant be installed or updated on device with this test hwid.
    • Crucial data lives in VPD (Virtual Private Data) and GBB (Google Binary Block) partitions.
wget https://www.dropbox.com/s/6pzvraf3ko14sz9/nv_image-snow.bin.gz
gunzip nv_image-snow.bin.gz
flashrom -p linux_spi:dev=/dev/spidev1.0 -w nv_image-snow.bin

found here https://wiki.archlinux.org/index.php/Samsung_Chromebook_(ARM)#How_to_flash_U-Boot

snow check/disable write protect status

crosh->shell->sudo -s

flashrom --wp-status
flashrom --wp-disable

snow/daisy revert firmware to factory default from chrome os

crosh->shell->sudo -s

crossystem |fgrep fwid
chromeos-firmwareupdate --factory

found here https://code.google.com/p/chromium/issues/detail?id=221828

use linux-stable exynos_defconfig kernel

make exynos_defconfig
make menuconfig

set mwifiex and mwifiex_sdio as modules

make modules_prepare
make -j4 2>1& | tee ../current.log
make kernelrelease

sudo make modules_install
sudo cp arch/arm/boot/zImage /boot/zImage-kernelrelease
sudo cp System.map /boot/System.map-kernelrelease
sudo cp .config /boot/config-kernelrelease
cd /boot
sudo mkinitrd -k zImage-kernelrelease -i initrd-kernelrelease

linux-stable multi_v7_defconfig missing modules for screen

ptn3460
pwm-samsung
platform_lcd
i2c-arb-gpio-challenge
cros_ec_devs

openSUSE notes

Remove armsoc driver, its very slow with current upstream kernels, use modesettings or fbdev

sudo zypper rm xf86-video-armsoc

firefox soft webgl

gfx.xrender.enabled=false
webgl.force-enable=true

now got 1fps in fishgl demo 8)


Add/update chainloding u-boot on sdcard

it requires vboot-utils which contain vbutil and cgpt

#!/bin/bash

diskname=/dev/sde
uboot=u-boot.img

mkimage -A arm -O linux -T kernel -C none -a 0x43e00000 -e 0x43e00000 -n uboot -d u-boot-dtb.bin u-boot.img

echo "console=tty1 debug verbose" > /tmp/config
vbutil_kernel --pack /tmp/newkern \
        --keyblock /usr/share/vboot/devkeys/kernel.keyblock \
        --version 1 \
        --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
        --config=/tmp/config --vmlinuz $uboot --arch arm
kpartx -av $diskname
dd if=/tmp/newkern of=$diskname\1
kpartx -d $diskname
cgpt add -t kernel -i 1 -S 1 -T 5 -P 10 -l U-BOOT $diskname

Snow motherboard info

Motherboard design probably own from Samsung as there is BA41-02110A ident on board, revision 1.1 and Model:Lucas

Manualy load kernel from u-boot

setenv bootargs 'loglevel=8 plymouth.enable=0 rootflags=size=100% console=ttySAC3,115200n8 console=tty earlyprintk showopts ${append}'
setenv initrd_high ''
setenv fdt_high ''
ext2load mmc 1:2 0x40007000 /boot/linux.vmx
ext2load mmc 1:2 0x44000000 /boot/initrd.uboot
ext2load mmc 1:2 0x42000000 /dtb/exynos5250-snow.dtb
bootz 0x40007000 0x44000000 0x42000000

Script to create chainloding kernel partition from openSUSE JeOS

#==========================================
# install Arndale SPL & U-Boot as raw
#------------------------------------------
if [[ -f "boot/smdk5250-spl.bin" || -f "boot/arndale-spl.bin" ]];then
    echo "Installing BL1..."
    if ! dd if=boot/arndale-bl1.img of=$diskname seek=1 conv=notrunc; then
        echo "Couldn't install BL1 on $diskname"
        exit 1
    fi
    echo "Installing SPL..."
    # Get SPL name (depends on U-Boot version)
    SPL_FILE=$(ls boot/*-spl.bin);
    if ! dd if=$SPL_FILE of=$diskname seek=17 conv=notrunc; then
        echo "Couldn't install SPL ($SPL_FILE) on $diskname"
        exit 1
    fi
    echo "Installing U-Boot..."
    if ! dd if=boot/u-boot.bin of=$diskname seek=49 conv=notrunc; then
        echo "Couldn't install u-boot on $diskname"
        exit 1
    fi
fi

#==========================================
# install Chromebook u-boot as boot kernel
# And do the required magic!
#------------------------------------------
if [ "$flavor" = "chromebook" ]; then
    if [ ! "$is_firstboot" ]; then
        pushd /usr/src/packages/KIWIROOT-oem/
        echo "console=tty1 debug verbose" > /tmp/config
        ./usr/bin/vbutil_kernel --pack /tmp/newkern \
            --keyblock ./usr/share/vboot/devkeys/kernel.keyblock \
            --version 1 \
            --signprivate ./usr/share/vboot/devkeys/kernel_data_key.vbprivk \
            --config=/tmp/config --vmlinuz boot/u-boot.img --arch arm
        LINE=$(kpartx -asv $diskname | head -n1)
        PART=$(echo "$LINE" | awk '{print $3}')
        dd if=/tmp/newkern of=/dev/mapper/$PART
        # "kpartx -dv $diskname" does not work if $diskname is longer than 64 characters
        LOOPDEV=$(echo "/dev/$PART" | sed 's/p[0-9][0-9]*$//')
        kpartx -dv $LOOPDEV
        losetup -d $LOOPDEV
    fi
    # For build and after reaprtition occured on 1st boot:
    # Enable bootflag on partition 2 (u-boot now looks for bootscripts on bootable partitions only)
    parted $diskname set 2 boot on
    # CGPT magic
    ./usr/bin/cgpt add -t kernel -i 1 -S 1 -T 5 -P 10 -l U-BOOT $diskname
    popd
fi