Inhaltsverzeichnis

Speicher

Quelle: http://forum.banana-pi.org/t/how-to-update-uboot-without-bpi-update/4023/2

es sieht so aus, als wenn /dev/mmcblk1, /dev/mmcblk1boot0 und /dev/mmcblk1boot1 unabhängige Geräte sind (bootx nicht Partitionen in /dev/mmcblk1)

preloader

for SD muss am 2k-offset (0x800) geschrieben werden

sudo dd if=BPI-R2-EMMC-boot0-DDR1600-20190722-2k.img of=/dev/sdc bs=1k seek=2

(SD-Card benötigt zusätzlich MMC_BOOT & BRLYT header, siehe weiter unten)

for EMMC muss am 0-offset (0x0) der boot0-Partition geschrieben werden

sudo dd if=BPI-R2-EMMC-boot0-DDR1600-20190722-0k.img of=/dev/mmcblk1boot0

Dateien von hier: https://github.com/BPI-SINOVOIP/BPI-files/tree/master/SD/100MB

SD

sdcard-bootsektor reverse-engineering http://forum.banana-pi.org/t/boot-fails-with-self-build-u-boot/5460/20

http://forum.banana-pi.org/t/how-to-build-an-ubuntu-debian-sd-image-from-scratch/6805/8

SD-Headers bpi-r2-head440-0k.img bpi-r2-head1-512b.img

gunzip -c BPI-R2-HEAD440-0k.img.gz | dd of=/dev/loop8 bs=1024 seek=0
gunzip -c BPI-R2-HEAD1-512b.img.gz | dd of=/dev/loop8 bs=512 seek=1

komplett

dd if=/dev/zero of=../bpi-r2-buster.img bs=1M count=7168
loopdev=$(losetup -f)
sudo losetup ${loopdev} ../bpi-r2-buster.img
echo $loopdev
sudo dd if=~/Downloads/BPI-R2-preloader-DDR1600-20190722-2k.img of=${loopdev} bs=1k seek=2
sudo dd if=~/Downloads/BPI-R2-HEAD440-0k.img of=${loopdev} bs=1024 seek=0
sudo dd if=~/Downloads/BPI-R2-HEAD1-512b.img  bs=512 seek=1
sudo dd if=/path/to/u-boot/u-boot.bin of=${loopdev} bs=1k seek=320
sudo sfdisk ${loopdev} < ~/Downloads/parttable.dat 
sudo partprobe ${loopdev}
ls ${loopdev}*
sudo mkfs -t vfat ${loopdev}p1
sudo mkfs -t ext4 ${loopdev}p2
sudo fatlabel ${loopdev}p1 BPI-BOOT
sudo e2label ${loopdev}p2 BPI-ROOT

install debian (from bootstrapped rootfs)

sudo mount ${loopdev}p2 /mnt/
sudo cp -r debian_buster_armhf/. /mnt/
#install kernel-modules to same partition
kernelpack=/path/to/bpi-r2_<version>_main.tar.gz
sudo tar -xzf ${kernelpack} -C /mnt/ --strip-components=1 BPI-ROOT
#install kernel to boot-partition
sudo umount /mnt
sudo mount ${loopdev}p1 /mnt/
sudo tar -xzf ${kernelpack} -C /mnt/ --strip-components=1 BPI-BOOT
#maybe create a uEnv.txt
sudo umount /mnt
sudo losetup -d ${loopdev}
#now write the image to card (make sure /dev/sdc is your sdcard-device and no partition is mounted)
sudo dd if=../bpi-r2-buster.img of=/dev/sdc
sync

MMC-Utils

über die mmc-utils kann man aus einem laufenden System testen, ob die EMMC-Partitionierung stimmt (sollte 0x48 sein siehe partition-konfiguration_des_emmc_aendern).

./mmc extcsd read /dev/mmcblk1
....
Boot configuration bytes [PARTITION_CONFIG: 0x48]
....

ich habe die mmc-utils auch in mein Kernel-Repo übernommen (mit angepasstem Makefile für Cross-Compile)

laut einem Forum-Nutzer (siehe hier) lässt sich die partition config mit den mmc-utils auch schreiben

./mmc bootpart enable 1 1 /dev/mmcblk1
[18:02] root@bpi-r2:~# ./mmc extcsd read /dev/mmcblk1 | grep PARTITION_CONFIG
Boot configuration bytes [PARTITION_CONFIG: 0x00]
[18:02] root@bpi-r2:~# ./mmc bootpart enable 1 1 /dev/mmcblk1
[18:03] root@bpi-r2:~# ./mmc extcsd read /dev/mmcblk1 | grep PARTITION_CONFIG
Boot configuration bytes [PARTITION_CONFIG: 0x48]

Betriebssystem auf EMMC installieren

http://forum.banana-pi.org/t/bpi-r2-new-image-ubuntu-16-04-v1-2-1-bt-and-wifi-ap-mode-are-working-fine-2017-11-27/4291

  1. Schreibmodus für /dev/mmcblk1boot0 aktivieren:
    echo 0 > /sys/block/mmcblk1boot0/force_ro
  2. Preloader von hier auf das boot-device schreiben:
    • gunzip -c BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz | sudo dd of=/dev/mmcblk1boot0 bs=1024 seek=0
    • mit bpi-tools:
      bpi-bootsel BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz /dev/mmcblk1boot0
  3. kopieren des OS-Abbildes auf EMMC (device=/dev/mmcblk1):
    • unzip -p <XXX.img.zip> | pv | dd of=<device> bs=10M status=noxfer
    • Alternative (mit bpi-tools):
      bpi-copy  <XXX.img.zip> <device>
  4. Ausschalten, SD entfernen und neu hochfahren

wenn sd-Karten-Abbild nicht auf emmc passt: Abbild verkleinern

manuelles kopieren des Betriebssystems