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

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску
м (add u-boot compile script)
 
(не показано 11 промежуточных версий этого же участника)
Строка 1: Строка 1:
=snow install nv-u-boot 3704 with serial console debug to ro&rw firmware=
==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''
''Backup original firmware as it contain unique device data otherwise chromeos is lost forever for device''
<pre>
flashrom -p linux_spi:dev=/dev/spidev1.0 -r original_image.bin
</pre>
* 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.


<pre>
<pre>
Строка 11: Строка 17:
found here  https://wiki.archlinux.org/index.php/Samsung_Chromebook_(ARM)#How_to_flash_U-Boot
found here  https://wiki.archlinux.org/index.php/Samsung_Chromebook_(ARM)#How_to_flash_U-Boot


=snow check/disable write protect status=
==snow check/disable write protect status==
<pre>
<pre>
crosh->shell->sudo -s
crosh->shell->sudo -s
Строка 19: Строка 25:
</pre>
</pre>


=snow/daisy revert firmware to factory default from chrome os=
==snow/daisy revert firmware to factory default from chrome os==
<pre>
<pre>
crosh->shell->sudo -s
crosh->shell->sudo -s
Строка 28: Строка 34:


found here https://code.google.com/p/chromium/issues/detail?id=221828
found here https://code.google.com/p/chromium/issues/detail?id=221828
==use linux-stable exynos_defconfig kernel==
<pre>
make exynos_defconfig
make menuconfig
</pre>
set mwifiex and mwifiex_sdio as modules
<pre>
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
</pre>
==linux-stable multi_v7_defconfig missing modules for screen==
<pre>
ptn3460
pwm-samsung
platform_lcd
i2c-arb-gpio-challenge
cros_ec_devs
</pre>
==openSUSE notes==
Remove armsoc driver, its very slow with current upstream kernels, use modesettings or fbdev
<pre>
sudo zypper rm xf86-video-armsoc
</pre>
==firefox soft webgl==
<pre>
gfx.xrender.enabled=false
webgl.force-enable=true
</pre>
now got 1fps in fishgl demo 8)
==Add/update chainloding u-boot on sdcard==
it requires vboot-utils which contain vbutil and cgpt <br/>
<pre>
#!/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
</pre>
==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==
<pre>
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
</pre>
==Script to create chainloading 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>
==Script to compile U-Boot from openSUSE U-Boot spec==
<pre>
%build
export SOURCE_DATE_EPOCH=$(date -d "$(head -n 2 %{_sourcedir}/%{name}.changes | tail -n 1 | cut -d- -f1 )" +%s)
make %{?_smp_mflags} CROSS_COMPILE= HOSTCFLAGS="$RPM_OPT_FLAGS" snow_defconfig
echo "Attempting to enable fdt apply command (.dtbo) support."
echo "CONFIG_OF_LIBFDT_OVERLAY=y" >> .config
make %{?_smp_mflags} CROSS_COMPILE= HOSTCFLAGS="$RPM_OPT_FLAGS" USE_PRIVATE_LIBGG=yes
%if "%{name}" == "u-boot-snow" || "%{name}" == "u-boot-spring"
# Chromebook ARM (snow) and HP Chromebook 11 (spring) need a uImage format
export TEXT_START=$(awk '$NF == "_start" { printf "0x"$1 }' System.map)
./tools/mkimage -A arm -O linux -T kernel -C none -a $TEXT_START -e $TEXT_START -n uboot -d u-boot-dtb.bin u-boot.img
%endif
</pre>

Текущая версия от 00:58, 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 chainloading 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

Script to compile U-Boot from openSUSE U-Boot spec

%build
export SOURCE_DATE_EPOCH=$(date -d "$(head -n 2 %{_sourcedir}/%{name}.changes | tail -n 1 | cut -d- -f1 )" +%s)
make %{?_smp_mflags} CROSS_COMPILE= HOSTCFLAGS="$RPM_OPT_FLAGS" snow_defconfig
echo "Attempting to enable fdt apply command (.dtbo) support."
echo "CONFIG_OF_LIBFDT_OVERLAY=y" >> .config
make %{?_smp_mflags} CROSS_COMPILE= HOSTCFLAGS="$RPM_OPT_FLAGS" USE_PRIVATE_LIBGG=yes

%if "%{name}" == "u-boot-snow" || "%{name}" == "u-boot-spring"
# Chromebook ARM (snow) and HP Chromebook 11 (spring) need a uImage format
export TEXT_START=$(awk '$NF == "_start" { printf "0x"$1 }' System.map)
./tools/mkimage -A arm -O linux -T kernel -C none -a $TEXT_START -e $TEXT_START -n uboot -d u-boot-dtb.bin u-boot.img
%endif