Ich glaube ja.
Images für ARM Einplatinenrechner erstellen for dummys
-
-
Irgendwas scheint am Kernel nicht zu passen. Die Pinguine scheinen schon ein Teil des Kernelimages zu sein. So wie es ausschaut startet U-Boot den Kernel denn wenn ich etwas an den Speicheradressen ändere kommt gar nichts.
-
Vielleicht musst du einfach mal einen Kernel ohne Patches und nur mit der defconfig testen und das Board erstmal zum Booten kriegen.
Evtl. stimmt auch am Rootfs was nicht? Hast du ein Kabel um den UART anzuzapfen? https://linux-sunxi.org/PineH64#Locating_the_UART
-
OK Kernel läuft mit allen Patches und wenn man bei Platform Selection nur den Allwinner auswählt baut er auch nicht lange zum Glück hab ich von den FTDI Adaptern ein paar rum liegen, ohne den wäre es wohl noch länger gegangen. Jetzt mach ich erst mal Pause und morgen werde ich das ganze mal noch dokumentieren bevor es weiter geht.
-
Schön. Das Schlimmste hast du hinter dir und vielleicht sogar noch was über Allwinner gelernt
Jetzt ist's “nur“ noch VDR
-
Erstellen der Dateien für die SD Karte
Um rootfs zu erstellen habe ich debootstrap benutzt, dazu müssen noch folgende Pakete installiert werden:
sudo apt-get install debootstrap qemu-user-static
Ich habe mir Ubuntu Focal als Unterbau ausgesucht, dazu wird das rootfs unter /mnt eingebunden
debootstrap --arch=arm64 --foreign focal /mnt/
jetzt muss qemu ins Zielsystem kopiert werden
cp /usr/bin/qemu-aarch64-static /mnt/usr/bin/
anschließend wechselt man chroot ins root-Verzeichnis des Zielsystems
chroot /mnt /usr/bin/qemu-aarch64-static /bin/sh -i
und stellt dieses fertig mit
/debootstrap/debootstrap --second-stage
im Zielsystem ändert man noch das root Passwort
passwd
und aktiviert noch die Serielekonsole auf ttyS0
systemctl enable serial-getty@ttyS0.service
mit exit verlässt man die chroot Umgebung wieder.
In das rootfs kopiert man noch die Module und die Header Dateien, dazu wechsel ich in's Source-Verzeichnis
cd /home/"Dein HomeDir"/PineH64/sunxi/linux
cp -R newmodules/. /mnt/usr
cp -R newheader/. /mnt/usr
Mit einem Editor ändert man noch den Hostnamen, fstab,Netzwerkkonfiguration und die apt sourcen.
sudo nano /mnt/etc/hostname
sudo nano /mnt/etc/fstab
Codenone /tmp tmpfs defaults,noatime,mode=1777 0 0 /dev/mmcblk0p2 / ext4 defaults 0 1 /dev/mmcblk0p1 /boot vfat defaults 0 2
sudo nano /mnt/etc/netplan/01-network-manager-all.yaml
Code: 01-network-manager-all.yamlnetwork: version: 2 renderer: networkd ethernets: eth0: dhcp4: true
sudo nano /mnt/etc/apt/sources.list
Die schon vorhandenen Zeile ändert man dann in
Das ganze kann man dann mit
mkdir /home/"Dein HomeDir"/files_for_sdcard/
cd /mnt
sudo tar -cjpf /home/"Dein HomeDir"/files_for_sdcard/rootfs.tar.bz2 .
zu einem Archiv verpacken, welches man später auf der sd-Karte wieder enpacken kann. In diese Verzeichnis packe ich jetzt alles was ich für den Systemstart benötige. Das rootfs unter /mnt kann jetzt wieder gelöscht werden
Das Kernel Image befindet sich im Sourceverzeichnis unter arch/arm64/boot/ nach einem Wechsel in dieses Verzeichnis cd /home/"Dein HomeDir"/PineH64/sunxi/linux/arch/arm64/boot/wird das Image mit
cp Image /home/"Dein HomeDir"/PineH64/files_for_sdcard/ kopiert.
Ebenfalls werden für den PineH64 die Dateien sun50i-h6-pine-h64-model-b.dtb sun50i-h6-pine-h64-model-b.dts benötigt, diese kopiert man mit
cp dts/allwinner/sun50i-h6-pine-h64-model-b.dtb dts/allwinner/sun50i-h6-pine-h64-model-b.dts /home/"Dein HomeDir"/PineH64/files_for_sdcard/
Aus dem Buildverzeichnis von U-Boot wird die Datei u-boot-sunxi-with-spl.bin benötigt, dazu wechselt man in dieses Verzeichnis cd /home/"Dein HomeDir"/PineH64/sunxi/u-boot-2021.01/und kopiert die Datei mit
cp u-boot-sunxi-with-spl.bin /home/"Dein HomeDir"/PineH64/files_for_sdcard/
Um das ganze später booten zu können benötigt u-boot noch die datei boot.scr, diese wird mit den u-boot tools mit dem Programm mkimage generiert.
Diese lege ich gleich im Verzeichnis files_for_sdcard an.
nano /home/"Dein HomeDir"/PineH64/files_for_sdcard/boot.cmd
Codefatload mmc 0:1 0x40080000 Image fatload mmc 0:1 0x4FA00000 sun50i-h6-pine-h64-model-b.dtb setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk2p2 rootwait panic=10 booti 0x40080000 - 0x4FA00000
Die Speicheradressen sind für den PineH64 gültig ob diese für alle H6 SOCs gelten kann mir gerne mitgeteilt werden, dann vermerke ich es hier.
Aus dem Arbeitsverzeichnis (sunxi) wandelt man die die boot.cmd in boot.scr mit dem Befehl
u-boot-2021.01/tools/mkimage -C none -A arm -T script -d ../files_for_sdcard/boot.cmd ../files_for_sdcard/boot.scr
Damit hat man alle Dateien für die SD Karte zusammen und kann sich daran machen diese zu erzeugen.
-
Erzeugen der SD Karte
Ich habe meine SD Karte mit einem USB SD Karten Adapter im Raspberry erstellt, Verwendet habe ich eine 16 GB Sundisk.
Um die Karte zu identifizieren einfach tail -f /var/log/syslog ausführen den Reader einstecken und sich das Device merken, bei mir /dev/sda.
Als erster Schritt wird das erste MB der Karte mitels dd überschrieben
sudo dd if=/dev/zero of=/dev/sda bs=1M count=1
danach kann partitioniert werden.
Ich habe per sudo fdisk /dev/sda zwei primäre Partitionen angelegt. Die erste mit 500MB als FAT und mit bootflag. Die zweite vom Typ ext4 mit dem restlichen Speicherplatz der Karte.
Den Bootloader u-boot-sunxi-with-spl.bin habe ich per scp mit den restlichen Dateien aus dem Orner files_for_sdcard von buildsystem auf den pi übertragen.
(Vom buildsystem aus als Beispiel)
scp -r files_for_sdcard/ pi@"IP des Raspberry":/home/pi/PineH64
Dann auf dem pi in das Verzeiniscd /home/pi/PineH64/files_for_sdcard wechseln
Geschrieben wird er durch
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8
Um auf die Partitionen schreiben zu können werden diese mit einem Dateisystem versehen.
sudo mkfs.fat /dev/sda1
sudo mkfs.ext4 /dev/sda2
sda1 wird jetzt nach /mnt per mount ins Dateisystem eingehängt
sudo mount /dev/sda1 /mnt
und die nötigen Dateien dort hin kopiert
sudo cp Image boot.scr sun50i-h6-pine-h64-model-b.dtb /mnt
danach kann sda1 wieder ausgehängt werden und sda2 wird eingehängt
sudo umount /dev/sda1
sudo mount /dev/sda2 /mnt
das vorher komprimierte rootfs wird jetzt auf sda2 entpackt werden
sudo tar xvjf rootfs.tar.bz2 -C /mnt
anschließend wieder unmounten
sudo umount /dev/sda2
und die SD Karte in den PineH64 stecken und starten.
Nicht wundern der H6 kann bisher keine Ausgabe von U-Boot oder Kernelmessages und zeigt direkt den Login.
Alle, die beim ersten Starten sehen wollen was vor sich geht, sollten ein FTDI USB Adapter an den UART klemmen, beim PineH64 sind das die Pinheader neben dem HDMI Anschluss (TX und RX kreuzen). Die Belegung findet man hier.
Verbinden kann man sich mit einem Terminalprogramm, in meinem Fall habe ich Putty benutzt. Einfach auf Seriel schalten den Com Port eingeben und die Geschwindigkeit auf 115200 Baud einstellen.
-
rell ich versuche gerade ffmpeg zu compilieren leider bekomme ich einen Fehler
libavcodec/v4l2_request.c: In function 'v4l2_request_queue_decode':
libavcodec/v4l2_request.c:284:90: error: 'V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF' undeclared (first use in this function)
284 | ret = v4l2_request_queue_buffer(ctx, req->request_fd, &req->output, last_slice ? 0 : V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
libavcodec/v4l2_request.c:284:90: note: each undeclared identifier is reported only once for each function it appears in
libavcodec/v4l2_request.c: In function 'ff_v4l2_request_decode_slice':
libavcodec/v4l2_request.c:368:37: error: 'V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF' undeclared (first use in this function)
368 | if ((req->output.capabilities & V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF) != V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF deutet evtl auf einen fehlenden kernel Patch hin. Ich habe aber alle eingespielt! Weist Du wie man das zum Laufen bringt?
-
Wie baust du ffmpeg und mit welcher Version und Patches?
-
Ich habe die Version von LE genommen, also das tar.gz Archiv 4.3.1-Matrix-Beta1 heruntergeladen. Die Patches von LE für ffmpeg sowie auch die allwinner Patches.
In der Headerdatei videodev2.h unter /usr/include/linux ist die Variable V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF auch definiert.
ffmpeg habe ich folgendermaßen konfiguriert evtl. fehlt da noch was.
./configure \
--disable-static \
--enable-shared \
--enable-gpl \
--disable-version3 \
--enable-logging \
--disable-doc \
--disable-debug \
--enable-stripping \
--enable-pic \
--enable-optimizations \
--disable-extra-warnings \
--disable-programs \
--enable-avdevice \
--enable-avcodec \
--enable-avformat \
--enable-swscale \
--enable-postproc \
--enable-avfilter \
--disable-devices \
--enable-pthreads \
--enable-network \
--enable-gnutls --disable-openssl \
--disable-gray \
--enable-swscale-alpha \
--disable-small \
--enable-dct \
--enable-fft \
--enable-mdct \
--enable-rdft \
--disable-crystalhd \
--enable-v4l2_m2m \
--enable-libdrm \
--enable-libudev \
--enable-libv4l2 \
--enable-v4l2-request \
--enable-runtime-cpudetect \
--disable-hardcoded-tables \
--disable-encoders \
--enable-encoder=ac3 \
--enable-encoder=aac \
--enable-encoder=wmav2 \
--enable-encoder=mjpeg \
--enable-encoder=png \
--enable-hwaccels \
--disable-muxers \
--enable-muxer=spdif \
--enable-muxer=adts \
--enable-muxer=asf \
--enable-muxer=ipod \
--enable-muxer=mpegts \
--enable-demuxers \
--enable-parsers \
--enable-bsfs \
--enable-protocol=http \
--disable-indevs \
--disable-outdevs \
--enable-filters \
--disable-avisynth \
--enable-bzlib \
--disable-lzma \
--disable-alsa \
--disable-frei0r \
--disable-libopencore-amrnb \
--disable-libopencore-amrwb \
--disable-libopencv \
--disable-libdc1394 \
--disable-libfreetype \
--disable-libgsm \
--disable-libmp3lame \
--disable-libopenjpeg \
--disable-librtmp \
--disable-libdav1d \
--enable-libspeex \
--disable-libtheora \
--disable-libvo-amrwbenc \
--disable-libvorbis \
--disable-libvpx \
--disable-libx264 \
--disable-libxavs \
--disable-libxvid \
--enable-zlib \
--enable-asm \
--disable-altivec \
--disable-neon \
--disable-symver
Muss man den Speicherort der Headerdateien im rootfs noch irgendwo eintragen? Ist doch eigentlich der Standartpfad.
-
OK ich habe ein Spur... Irgendwas muss beim Header installieren schief gelaufen sein. War wohl eine Version in der ich noch nicht alle Kernelkonfigs aktiviert hatte.
ffmpeg baut gerade neu, wir werden sehen
-
Ja, header können einen manchmal ärgern..
Bei der FFmpeg config hab ich bedeutend weniger. Ich glaube nur das, was in https://github.com/LibreELEC/L…timedia/ffmpeg/package.mk als Variable gesetzt wird.
Vaapi und vdpau habe ich deaktiviert.
-
Jetzt ist es durchgelaufen
-
Bild hab ich jetzt auch schon, jetzt muss ich mal schauen was man da so alles am vdr-plugin-softhddevice-drm einstellen kann, das Bild ist ziemlich streifig.
Sound hab ich noch keine und auf die Tastatur reagiert der VDR auch noch nicht.
-
So Sound ist da und war auch da, ich musste nur den Eingang am Versträrker wechseln *g*
Wenn mir jetzt noch jemand sagen kann wie man die Tastatur in so einem Minimalsystem zum laufen bringt bin ich erstmal happy
-
OK Ich hab es gefunden, muss in vdr.service eingetragen werden. Jetzt geht es ans testen der HD+ Kanäle
-
OK HD+ Läuft auf dem Pine H64
So jetzt mach ich erst mal Pause
-
Kannst du was dazu erzählen wie sich das anfühlt, normale Umschaltzeiten?
-
Komischerweise streikt RTL gerade noch etwas... schicken da die Sendere andere Streams? Bei den Sendern bei denen es funktioniert ca. 2 Sekunden. Ich musste dvbapi Version 2.2.5 gegen libdvbcsa bauen damit es auf arm64 funktioniert der aktuelle master streikt mit Fehlermeldungen. Ansonsten werde ich das heute Abend noch ein bischen testen.
-
Bei den Sendern bei den Kein Bild kommt bekomme ich die Fehlermeldung [softhddev] invalid PES audio packet kann mir da jemand nen Tip geben?
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!