web-dev-qa-db-fra.com

Impossible de démarrer Raspberry Pi 3b à partir d'une clé USB avec UBoot + Grub

J'ai installé avec succès Ubuntu 18.04 sur une carte SD. Je l'ai fait en créant une table de partition msdos (pi ne supporte pas guid), puis en plaçant U-Boot sur la carte SD sur la partition 1 (fat32, pi ne supporte rien d'autre). Ensuite, j'ai collé le pi-bootloader sur la partition 1 /. Et puis j'ai copié les fichiers du programme d'installation net (mini-iso) sur cette partition également. L'ensemble du processus est aménagé ici .

Tout fonctionne parfaitement bien depuis la carte SD. UBoot démarre, puis il charge le grub2 fourni avec le mini installateur net. cela à son tour, j'ai changé la configuration afin qu'il charge le noyau Linux à partir de la partition 3 (p2 est swap, dans mon cas).

Donc, j'ai tiré une image de cela, le mettre sur un lecteur USB (adaptateur USB à M2 SATA), qui devrait simplement se comporter comme tout autre lecteur flash. Alors, je l'allume. U boot démarre, je ne vois rien de différent de la normale. Ensuite, il charge la bouffe. Mais au lieu d’afficher un menu sympa avec la possibilité de démarrer ubuntu ou de l’installer (car le programme d’installation réseau est toujours là), il m’a envoyé directement dans la console Grub.

en tapant, je reçois (memdisk), et rien d’autre. Il ne semble pas que le lecteur USB soit réellement chargé. sur ce memdisk se trouve un fichier unique à (memdisk) /boot/grub/grub.cfg, mais je n’ai aucun moyen de savoir ce qu’il contient réellement. Edit: (memdisk) se trouve également sur la carte SD, le même contenu, il répertorie uniquement les partitions de la carte SD, mais pas sur le lecteur flash.

Il n'y a pas de modules grub, rien. Je pense que cela me fait voir très brièvement une erreur, mais la console Grub s'ouvre et je n'ai pas le temps de lire ces messages.

Je ne sais plus quoi faire. Peut-être que si je crée ma propre image grub avec des modules usb comme décrit maintenant ici (utiliser grub-mkimage pour créer une image grub avec des modules dans le memdisk)? Bien que je n'aie aucune idée des modules dont j'ai besoin, ou si c'est même la bonne approche.

Toute aide serait grandement appréciée.

Edit: j'ai trouvé this :

En gros, vous avez besoin de modules grub (que je n'ai pas) pour que grub puisse reconnaître le lecteur USB.

la réponse courte est:

insmod usbms insmod ehci insmod uhci insmod ohci

Une seule des lignes * hci est nécessaire (généralement ehci), mais les machines plus anciennes peuvent nécessiter soit uhci soit ohci. L'insertion des 3 fonctionne correctement.

Ces lignes doivent être ajoutées à grub.cfg ou custom.cfg (je recommande ce dernier) dans le dossier/boot/grub/du lecteur non USB.

J'ai obtenu mes modules de ici , cependant usbms ne figure pas parmi eux et [e, u, o] hci non plus. J'ai trouvé ceci à propos de l'écriture de modules grub, mais cela me trouble. Et je ne trouve pas le code source. Utiliser quelque chose de bizarre comme le processeur Armhf 64 bits ne facilite pas la recherche de logiciels compatibles.

Edit2: J'ai téléchargé le code source de grub depuis http://git.savannah.gnu.org/git/grub.git/ et l'ai compilé sur mon Raspberry Pi. Cependant, les fichiers de code source usbms.c et ehci.c sont présents, il ne les a pas compilés dans des modules grub.

J'ai trouvé cette information sur la façon de construire des modules grub ici mais ça ne marche pas pour moi. J'ai essayé de changer Makefile.core.am et enlevé l'instruction if autour de usbms.module, puis d'exécuter autogen et de configurer. Pas de dé. J'ai essayé de construire manuellement grub-core avec make usbms.module, mais il est écrit gcc: erreur fatale: pas de fichier d'entrée.

Je n'ai pas besoin de bouffe. Je veux juste démarrer mon Ubuntu arm64. Si je peux en quelque sorte sauter de u boot directement à là-bas, ça va.

Mes idées actuelles:

  • Compilez usbms.mod, ehci.mod, uhci.mod et ohci.mod, créez une nouvelle image grub avec ces modules liés, et cela ne devrait fonctionner qu'avec la configuration actuelle de grub.
  • Créez une nouvelle image grub avec les modules, la config, le noyau linux et initramfs intégrés en tant que memdisk. démarrez le noyau à partir de là avec la ligne de commande indiquant que le rootfs est sur la partition 3
  • Dites en quelque sorte à Uboot de démarrer mon noyau Linux à partir de partition3 avec la ligne de commande indiquant que la partition 3 est root.
  • utilisez le chargeur de démarrage magique noir fourni avec le firmware Raspberry Pi. Je n'ai pas la moindre idée de la façon dont cela fonctionne, mais si quelqu'un peut le faire démarrer mon Ubuntu x64, je serais très heureux d'ignorer le fait que je ne sais pas comment cela fonctionne.

Je ne sais pas comment en faire.

1
FalcoGer

Vous pouvez installer ubuntu sur une carte sd, puis échanger uboot (kernel8.img) avec un nouveau noyau tel que https://github.com/sakaki-/bcmrpi3-kernel maintenant, vous configurez une cmdline. txt comme en raspbian, par exemple

dwc_otg.lpm_enabled=0 root=PARTUUID=12345678-03 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

alors vous pouvez copier le fichier config.txt de Raspbian, par exemple

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835) dtparam=audio=on

program_usb_boot_mode=1

ajouter

dtoverlay=rpi-backlight
dtoverlay=rpi-ft5406

jusqu'au bout si vous avez l'écran tactile ft5406 et chargez les modules du noyau dans /etc/modules-load.d/ft5406.conf

rpi_backlight
rpi_ft5406

et ça marche

0
FalcoGer