NVMe - Booten jetzt möglich



  • Macht das Bitte nur, wenn ihr wisst was der SPI ist und wenn ihr wisst, was ihr im Fehlerfall machen müsst. Danke!

    Da sich ja schon seit längerer Zeit so nicht mehr richtig viel tut, schau ich nur noch gelegentlich ins Pine64-Forum. Das war gestern Abend mal wieder der Fall und da schreibt jemand, das er den neuen u-boot für den ROCKPro64 fertig hat. Das weckt natürlich meine Neugierde 🙂 Es handelt sich um diesen u-boot

    U-Boot TPL 2020.01-rc5-01969-g0bfd4738c6 (Jan 03 2020 - 15:46:36)
    

    Der liebe Kamil hatte das ja schon vor Monaten angekündigt, aber leider nicht umgesetzt. Gut, das wir uns im Open Source Umfeld bewegen, da haben mehrere Menschen Zugriff auf die Daten. Ok, weiter

    Hier der Link zum Forum.

    Ich oute mich mal, die Binaries die er dort vorstellt, sagen mir zwar was, ich weiß aber nicht so richtig was ich damit anfangen soll. Ein paar Versuche hier waren leider erfolglos. Also habe ich den ganzen Beitrag nochmal aufmerksam gelesen und bin dann über das Script

    flash_spi.img.gz
    

    gestolpert. Dazu hat der Autor sigmaris eine Github Seite mit Anleitung erstellt.

    https://github.com/sigmaris/u-boot/wiki/Flashing-U-Boot-to-SPI

    Ok, das bekommen wir hin 🙂

    Also, das Script entpackt und auf eine SD-Karte geschrieben. Den ROCKPro64 damit gestartet und wir sehen einen u-boot Yeah!

    U-Boot TPL 2020.01-rc5-01969-g0bfd4738c6 (Jan 03 2020 - 15:46:36)               
    Channel 0: LPDDR4, 50MHz                                                        
    BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB                         
    Channel 1: LPDDR4, 50MHz                                                        
    BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB                         
    256B stride                                                                     
    256B stride                                                                     
    lpddr4_set_rate: change freq to 400000000 mhz 0, 1                              
    lpddr4_set_rate: change freq to 800000000 mhz 1, 0                              
    Trying to boot from BOOTROM                                                     
    Returning to boot ROM...              
    

    Ein paar schnelle Versuche mit verschiedenen Datenträgern war nicht so erfolgreich. Da es spät war, habe ich abgebrochen. Heute Morgen dann beim ersten Kaffee noch mal richtig drüber nachdenken....

    Ok, wenn ich von der PCIe NVMe SSD starten möchte, brauche ich dort das komplette Image drauf. Doch wie stelle ich das dann jetzt an? Man könnte den Adapter in einen PC einbauen, man könnte die Karte in einen freien Slot einbauen, wäre beides möglich bei mir. Aber, ich bin faul. Morgens unterm Schreibtisch rum rutschen? Nö.

    Wir schreiben uns das aktuelle Image vom Kamil auf eine SD-Karte. In den Homeordner kopieren wir das entpackte Image vom Kamil.

    buster-minimal-rockpro64-0.9.16-1163-arm64.img
    

    Damit starten wir jetzt den ROCKPro64. Nach Passwortwechsel, das kennt ihr ja sicherlich bereits alles, befinden wir uns im Homeordner. Dort liegt nun unser Image. Das soll nun auf die PCI NVMe SSD.

    Schauen wir mal, ob alles da ist.

    sudo fdisk -l
    [sudo] password for rock64: 
    Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    
    
    Disk /dev/mtdblock0: 384 KiB, 393216 bytes, 768 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/mtdblock1: 3.6 MiB, 3768320 bytes, 7360 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/mtdblock2: 32 KiB, 32768 bytes, 64 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/mtdblock3: 12 MiB, 12582912 bytes, 24576 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/nvme0n1: 232.9 GiB, 250059350016 bytes, 488397168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/mmcblk0: 59.5 GiB, 63864569856 bytes, 124735488 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 4252573B-53A6-4918-89A6-7802D8D8031F
    
    Device          Start       End   Sectors  Size Type
    /dev/mmcblk0p1     64      8063      8000  3.9M Linux filesystem
    /dev/mmcblk0p2   8064      8191       128   64K Linux filesystem
    /dev/mmcblk0p3   8192     16383      8192    4M Linux filesystem
    /dev/mmcblk0p4  16384     24575      8192    4M Linux filesystem
    /dev/mmcblk0p5  24576     32767      8192    4M Linux filesystem
    /dev/mmcblk0p6  32768    262143    229376  112M Microsoft basic data
    /dev/mmcblk0p7 262144 124735454 124473311 59.4G Linux filesystem
    

    Image ?

    rock64@rockpro64:~$ ls
    buster-minimal-rockpro64-0.9.16-1163-arm64.img
    

    Gut, alles vorhanden. Dann mal los.

    rock64@rockpro64:~$ sudo dd of=/dev/nvme0n1 if=/home/rock64/buster-minimal-rockpro64-0.9.16-1163-arm64.img bs=1M
    2045+0 records in
    2045+0 records out
    2144337920 bytes (2.1 GB, 2.0 GiB) copied, 36.9288 s, 58.1 MB/s
    

    Hier, der dd Befehl incl. Erfolgsmeldung. Damit wäre das Image jetzt auf der PCIe NVMe SSD. Wir können nun die SD-Karte entfernen und mit der NVMe Karte booten.

    U-Boot TPL 2020.01-rc5-01969-g0bfd4738c6 (Jan 03 2020 - 15:46:36)              
    Channel 0: LPDDR4, 50MHz                                                        
    BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB                        
    Channel 1: LPDDR4, 50MHz                                                        
    BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB                        
    256B stride                                                                    
    256B stride                                                                    
    lpddr4_set_rate: change freq to 400000000 mhz 0, 1                              
    lpddr4_set_rate: change freq to 800000000 mhz 1, 0                              
    Trying to boot from BOOTROM                                                    
    Returning to boot ROM...                                                        
                                                                                   
    U-Boot SPL 2020.01-rc5-01969-g0bfd4738c6 (Jan 03 2020 - 15:46:36 +0000)        
    Trying to boot from SPI                                                        
    NOTICE:  BL31: v2.2(release):v2.2-277-gb1af2a51                                
    NOTICE:  BL31: Built : 15:44:18, Jan  3 2020                                    
                                                                                   
                                                                                   
    U-Boot 2020.01-rc5-01969-g0bfd4738c6 (Jan 03 2020 - 15:46:36 +0000)            
                                                                                   
    Model: Pine64 RockPro64                                                        
    DRAM:  2 GiB                                                                    
    PMIC:  RK808                                                                    
    MMC:   dwmmc@fe320000: 1, sdhci@fe330000: 0                                    
    Loading Environment from SPI Flash... SF: Detected gd25q128 with page size 256 B
    *** Warning - bad CRC, using default environment                                
                                                                                   
    In:    serial@ff1a0000                                                          
    Out:   serial@ff1a0000                                                          
    Err:   serial@ff1a0000                                                          
    Model: Pine64 RockPro64                                                        
    rockchip_dnl_key_pressed: adc_channel_single_shot fail!                        
    Net:   eth0: ethernet@fe300000                                                  
    Hit any key to stop autoboot:  0                                                
    Card did not respond to voltage select!                                        
    Card did not respond to voltage select!                                        
                                                                                   
    Device 0: Vendor: 0x144d Rev: 1B2QEXE7 Prod: S466NX0K606125A                    
               Type: Hard Disk                                                    
               Capacity: 476940.0 MB = 465.7 GB (976773168 x 512)                  
    ... is now current device                                                      
    Scanning nvme 0:7...                                                            
    Found /boot/extlinux/extlinux.conf                                              
    Retrieving file: /boot/extlinux/extlinux.conf                                  
    2073 bytes read in 4 ms (505.9 KiB/s)                                          
    select kernel                                                                  
    1:      kernel-4.4.202-1237-rockchip-ayufan-gfd4492386213                      
    2:      kernel-4.4.202-1237-rockchip-ayufan-gfd4492386213-memtest              
    3:      kernel-4.4.197-1236-rockchip-ayufan-g30faab37e339                      
    4:      kernel-4.4.197-1236-rockchip-ayufan-g30faab37e339-memtest  
    [...gekürzt...]
    

    YEAH! Der ROCKPro64 bootet direkt von der PCIe NVMe SSD. Dazu bedarf es jetzt nur noch, das der u-boot im SPI Speicher drin ist.

    Noch kurz das Filesystem anzeigen lassen

    rock64@rockpro64:~$ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            960M     0  960M   0% /dev
    tmpfs           193M  7.7M  185M   4% /run
    /dev/nvme0n1p7  1.9G  1.1G  669M  62% /
    tmpfs           963M     0  963M   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           963M     0  963M   0% /sys/fs/cgroup
    /dev/nvme0n1p6  112M  4.0K  112M   1% /boot/efi
    tmpfs           193M     0  193M   0% /run/user/1000
    

    Somit sollte sich auch der Kernel Problem los aktualisieren lassen, was ja vorher immer recht mühsam war.

    Aktuell nutzt der ROCKPro64 dieses Image

    Linux rockpro64 4.4.197-1236-rockchip-ayufan-g30faab37e339 #1 SMP Tue Oct 22 11:35:10 UTC 2019 aarch64
    

    Dann installieren wir mal 4.4.202-1237-rockchip-ayufan
    https://github.com/ayufan-rock64/linux-kernel/releases/

    Nach dem Reboot

                    _                     __   _  _   
      _ __ ___   ___| | ___ __  _ __ ___  / /_ | || |  
     | '__/ _ \ / __| |/ / '_ \| '__/ _ \| '_ \| || |_ 
     | | | (_) | (__|   <| |_) | | | (_) | (_) |__   _|
     |_|  \___/ \___|_|\_\ .__/|_|  \___/ \___/   |_|  
                         |_|                           
     Linux rockpro64 4.4.202-1237-rockchip-ayufan-gfd4492386213 #1 SMP Sat Nov 23 13:55:47 UTC 2019 aarch64
    

    So muss das funktionieren. Sehr lange drauf gewartet!

    Vielen Dank an sigmaris für die tolle Arbeit!

    Und jetzt mal Schauen, ob das auch von USB3 geht, das ging gestern Abend auch nicht.....

    Wie ich gerade sehe, muss das Root Filesystem noch vergrößert werden.

    Ok, Problem gelöst. Bitte hier nachlesen.



  • Jetzt müssen wir mal schauen, ob das Ganze auch stabil läuft...



  • Nachdem ich jetzt ein wenig rumgespielt habe, folgende Empfehlung.

    Der u-boot ist ja zum Testen da, mit einer PCIe NVMe SSD oder einer SD-Karte bootet er einwandfrei. Mit meiner eMMC-Karte nicht, so wie auch nicht an USB2 und USB3. Sollte ihr also so ein Gerät zum Booten benutzen, müsst ihr den gewohnten Weg gehen.



  • Sigmaris hat eine neue Version seines u-boot released.
    https://forum.frank-mankel.org/topic/746/u-boot

    Diese neue Version soll einen Boot von einer PCIe SATA Platte ermöglichen. Yeah!

    I have updated the OP with info about a new release, based on mainline U-Boot v2020.01, and now with PCIe SATA drive boot support as well as NVMe.

    Das muss ich dann mal testen 😉



  • Ich habe dann heute mal den uboot getestet um zu sehen, ob von einer SATA HDD gebootet wird.

    Start

    U-Boot TPL 2020.01-01987-g335875f1f5 (Feb 01 2020 - 15:02:32)                   
    Channel 0: LPDDR4, 50MHz                                                        
    BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB                         
    Channel 1: LPDDR4, 50MHz                                                        
    BW=32 Col=10 Bk=8 CS0 Row=15 CS=1 Die BW=16 Size=1024MB                         
    256B stride                                                                     
    256B stride                                                                     
    lpddr4_set_rate: change freq to 400000000 mhz 0, 1                              
    lpddr4_set_rate: change freq to 800000000 mhz 1, 0                              
    Trying to boot from BOOTROM                                                     
    Returning to boot ROM...                                                        
                                                                                    
    U-Boot SPL 2020.01-01987-g335875f1f5 (Feb 01 2020 - 15:02:32 +0000)             
    Trying to boot from SPI                                                         
    NOTICE:  BL31: v2.2(release):v2.2-271-g9a943ba43                                
    NOTICE:  BL31: Built : 15:00:49, Feb  1 2020                                    
                                                                                    
                                                                                    
    U-Boot 2020.01-01987-g335875f1f5 (Feb 01 2020 - 15:02:32 +0000)                 
                                                                                    
    Model: Pine64 RockPro64                                                         
    DRAM:  2 GiB                                                                    
    PMIC:  RK808                                                                    
    MMC:   dwmmc@fe320000: 1, sdhci@fe330000: 0                                     
    Loading Environment from SPI Flash... SF: Detected gd25q128 with page size 256 B
    *** Warning - bad CRC, using default environment                                
                                                                                    
    In:    serial@ff1a0000                                                          
    Out:   serial@ff1a0000                                                          
    Err:   serial@ff1a0000                                                          
    Model: Pine64 RockPro64                                                         
    Net:   eth0: ethernet@fe300000                                                  
    Hit any key to stop autoboot:  0                                                
    Card did not respond to voltage select!                                         
    Card did not respond to voltage select!                                         
    PCIE-0: Link up (Bus0)                                                          
                                                                                    
    Device 0: unknown device                                                        
    scanning bus for devices...                                                     
    Target spinup took 0 ms.                                                        
    SATA link 1 timeout.                                                            
    AHCI 0001.0200 32 slots 2 ports 6 Gbps 0x3 impl SATA mode                       
    flags: 64bit ncq stag led clo pmp pio slum part ccc sxs                         
      Device 0: (0:0) Vendor: ATA Prod.: ST2000LM015-2E81 Rev: SDM1                 
                Type: Hard Disk                                                     
                Capacity: 1907729.0 MB = 1863.0 GB (3907029168 x 512)               
                                                                                    
    Device 0: (0:0) Vendor: ATA Prod.: ST2000LM015-2E81 Rev: SDM1                   
                Type: Hard Disk                                                     
                Capacity: 1907729.0 MB = 1863.0 GB (3907029168 x 512)               
    ... is now current device                                                       
    Scanning scsi 0:7...                                                            
    Found /boot/extlinux/extlinux.conf                                              
    Retrieving file: /boot/extlinux/extlinux.conf                                   
    1055 bytes read in 49 ms (20.5 KiB/s)                                           
    select kernel                                                                   
    1:      kernel-4.4.197-1236-rockchip-ayufan-g30faab37e339                       
    2:      kernel-4.4.197-1236-rockchip-ayufan-g30faab37e339-memtest               
    Enter choice: 1:        kernel-4.4.197-1236-rockchip-ayufan-g30faab37e339       
    Retrieving file: /boot/initrd.img-4.4.197-1236-rockchip-ayufan-g30faab37e339    
    5143934 bytes read in 110 ms (44.6 MiB/s)                                       
    Retrieving file: /boot/vmlinuz-4.4.197-1236-rockchip-ayufan-g30faab37e339       
    20545544 bytes read in 346 ms (56.6 MiB/s)                                      
    append: rw panic=10 init=/sbin/init coherent_pool=1M ethaddr=62:03:b0:d6:dc:b3 4
    Retrieving file: /boot/dtbs/4.4.197-1236-rockchip-ayufan-g30faab37e339/rockchipb
    96273 bytes read in 32 ms (2.9 MiB/s)                                           
    ## Flattened Device Tree blob at 01f00000                                       
       Booting using the fdt blob at 0x1f00000                                      
       Loading Ramdisk to 7da14000, end 7defbd7e ... OK                             
    

    Disks

    rock64@rockpro64:~$ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            960M     0  960M   0% /dev
    tmpfs           193M  7.7M  185M   4% /run
    /dev/sda7       1.8T  1.1G  1.8T   1% /
    tmpfs           963M     0  963M   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           963M     0  963M   0% /sys/fs/cgroup
    /dev/sda6       112M  4.0K  112M   1% /boot/efi
    tmpfs           193M     0  193M   0% /run/user/1000
    

    Wieder ein Stück weiter 😉



  • Hallo Frank,

    verstehe ich das richtig das du dann auf dem weder eine SDcard noch einen eMMC Chip dazu brauchst?

    Wird das System dann performanter, ist das meßbar?

    M



  • Hallo @mabs,

    ja. Der uboot wird in den SPI Speicher geladen. Der sucht dann beim Starten nach einem bootfähigem Device. So wie auf einem ganz normalen PC. Eine richtig coole Sache, wo ich mich freue, das das langsam mal funktioniert.

    Die Performance wird ja dann sicherlich von dem Device bestimmt. Dazu gibt es ja genug Messungen. Ich würde eine NVMe SSD immer einer SATA Platte vorziehen. Es kommt aber auf den Anwendungsfall an.

    Für ein NAS dann eher zwei oder mehr SATA Platten, und von USB3 HDD booten 🙂 So wie ich das schon lange betreibe.

    Aber, da hat auch jeder andere Vorstellungen und Vorlieben für.


Log in to reply
 

Diese Artikel könnten Dich auch interessieren.

  • 11
  • 2
  • 1
  • 1
  • 1
  • 5
  • 1
  • 13