Benutzer-Werkzeuge

Webseiten-Werkzeuge



bpi-r2:storage

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
bpi-r2:storage [2019/07/23 15:38] – [Speicher] frankbpi-r2:storage [2023/06/08 17:06] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Speicher ======
 +{{:bpi-r2:boot-structure.png|}}
  
 +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 =====
 +
 +{{ :bpi-r2:bpi-r2-preloader-ddr1600-20190722-2k.img.gz |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)
 +
 +{{ :bpi-r2:bpi-r2-emmc-boot0-ddr1600-20190722-0k.img.gz |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]]
 +
 +[[https://github.com/BPI-SINOVOIP/BPI-R2-bsp/tree/master/mt-pack/mtk/bpi-r2/bin|SD-Headers]] {{ :bpi-r2:bpi-r2-head440-0k.img |}} {{ :bpi-r2:bpi-r2-head1-512b.img |}}
 +
 +  * SDMMC_BOOT-Signatur + Adresse des 2. Headers (0x00000200) - erste 440 byte (vor Partitionstabelle):
 +
 +  gunzip -c BPI-R2-HEAD440-0k.img.gz | dd of=/dev/loop8 bs=1024 seek=0
 +
 +  * BRLYT-Signatur + Preloader-Adresse (0x00000800):
 +
 +  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 [[debian#debootstrap|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 [[https://www.kernel.org/doc/Documentation/mmc/mmc-tools.txt|mmc-utils]] kann man aus einem laufenden System testen, ob die EMMC-Partitionierung stimmt (sollte 0x48 sein siehe [[uboot#partition-konfiguration_des_emmc_aendern]]).
 +
 +<code>./mmc extcsd read /dev/mmcblk1
 +....
 +Boot configuration bytes [PARTITION_CONFIG: 0x48]
 +....</code>
 +
 +ich habe die mmc-utils auch in [[https://github.com/frank-w/BPI-R2-4.14/commit/b01360c4e063693c8df750561761edebe9bf5db8|mein Kernel-Repo übernommen]] (mit angepasstem Makefile für Cross-Compile)
 +
 +laut einem Forum-Nutzer (siehe [[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/60|hier]]) lässt sich die partition config mit den mmc-utils auch schreiben 
 +
 +  ./mmc bootpart enable 1 1 /dev/mmcblk1
 +
 +<code>
 +[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]
 +</code>
 +===== 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
 +
 +  - [[uboot#partition-konfiguration_des_emmc_aendern]]
 +  - Schreibmodus für /dev/mmcblk1boot0 aktivieren:<code>echo 0 > /sys/block/mmcblk1boot0/force_ro</code>
 +  - Preloader von [[https://github.com/BPI-SINOVOIP/BPI-files/blob/master/SD/100MB/BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz|hier]] auf das boot-device schreiben:
 +    * <code>gunzip -c BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz | sudo dd of=/dev/mmcblk1boot0 bs=1024 seek=0</code>
 +    * mit [[https://github.com/BPI-SINOVOIP/bpi-tools/|bpi-tools]]: <code>bpi-bootsel BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz /dev/mmcblk1boot0</code>
 +  - kopieren des OS-Abbildes auf EMMC (device=/dev/mmcblk1):
 +    * <code>unzip -p <XXX.img.zip> | pv | dd of=<device> bs=10M status=noxfer</code>
 +    * Alternative (mit [[https://github.com/BPI-SINOVOIP/bpi-tools/|bpi-tools]]): <code>bpi-copy  <XXX.img.zip> <device></code>
 +  - Ausschalten, SD entfernen und neu hochfahren
 +
 +wenn sd-Karten-Abbild nicht auf emmc passt: [[https://softwarebakery.com/shrinking-images-on-linux|Abbild verkleinern]]
 +
 +===== manuelles kopieren des Betriebssystems =====
 +  * für ein neues SD-Card-Image wird der Bootblock eines vorhandenen Images benötigt
 +    * {{ :bpi-r2:bpi-r2-sd-boot2k.img.gz |erste 2k ohne preloader/uboot}} {{ :bpi-r2:bpi-r2-sd-boot1m.img.gz |erstes MB mit preloader/uboot}} <code>gunzip bpi-r2-sd-boot*.img.gz
 +dd if=bpi-r2-sd-boot1m.img of=/dev/sdx
 +#ggf. partitonstabelle neu einlesen:
 +sfdisk -R /dev/sdx
 +#alternativ aus Paket parted
 +partprobe /dev/sdx
 +</code>
 +  * uboot installieren:<code>dd if=BPI-R2-720P-2k.img of=/dev/mmcblk1 bs=1k seek=2 count=1022</code>
 +  * Partitionstabelle auf der SD exportieren {{ :bpi-r2:parttable.dat |}} und auf emmc einspielen:<code>root@bpi-r2:~# sfdisk -d /dev/mmcblk0 > parttable.dat
 +root@bpi-r2:~# sfdisk /dev/mmcblk1 < parttable.dat
 +</code>
 +  * ggf. checken/vergrößern
 +  * Dateisysteme anlegen (mkfs) für p1=vfat (apt-get install dosfstools) und p2=ext4<code>mkfs -t vfat /dev/mmcblk1p1
 +mkfs -t ext4 /dev/mmcblk1p2</code>
 +  * im bestehenden System mount-Punkte anlegen/konfigurieren<code>mkdir -p /mnt/emmc/boot
 +mkdir -p /mnt/emmc/root
 +nano /etc/fstab
 +# <file system>         <dir>           <type>  <options>               <dump>  <pass>
 +/dev/mmcblk0p2          /               ext4    errors=remount-ro             1
 +/dev/mmcblk0p1          /boot           vfat    defaults                0       0
 +/dev/mmcblk1p2          /mnt/emmc/root  ext4    errors=remount-ro,noauto         1
 +/dev/mmcblk1p1          /mnt/emmc/boot  vfat    defaults,noauto               0
 +</code>
 +  * mounten:<code>
 +mount /mnt/emmc/root
 +mount /mnt/emmc/boot
 +</code>
 +  * rootfs entpacken/rüberkopieren<code>rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot/*"} / /mnt/emmc/root/
 +</code>
 +  * kernel (p1) und Module (p2) rüberkopieren<code>mkdir -p /mnt/emmc/boot/bananapi/bpi-r2/linux
 +cp /boot/bananapi/bpi-r2/linux/uImage /mnt/emmc/boot/bananapi/bpi-r2/linux
 +mkdir -p /mnt/emmc/root/lib/modules/
 +cp -r /lib/modules/$(uname -r) /mnt/emmc/root/lib/modules/</code>
 +  * uboot auf die richtige Partition konfigurieren<code>sed 's/mmcblk0/mmcblk1/' /boot/bananapi/bpi-r2/linux/uEnv.txt > /mnt/emmc/boot/bananapi/bpi-r2/linux/uEnv.txt</code>