Hallo Forum,
Versuche gerade einen 5.1.1 Kernel auf dem BPi-R2
zu starten.
Habe den dtb und das zImage erzeugt und via U-Boot
temporär ins Env eingetragen.
Nach dem boot Kommando führt das System einen Reboot
via CPU reset aus.
Kann mir bitte jemand zu der u.g. Ausgabe einen nützlichen
Hinweis geben.
Ergänzend sei gesagt, dass ich nicht das uInitrd und das
FS neu für Kernel 5.1.1 erzeugt habe, da ich erst den
Startvorgang des Kernels mit seinen Meldungen betrachten
wollte. Der Bootvorgang läuft von der SD-Karte.
>binwalk arch/arm/boot/zImage
DECIMAL HEXADECIMAL DESCRIPTION
------------------------------------------------------------------------
--------
36 0x24 Linux kernel ARM boot executable zImage
(little-endian), load address: "0x00000000", end address: "0x00058820"
9308 0x245C xz compressed data
9529 0x2539 xz compressed data
>file arch/arm/boot/zImage
arch/arm/boot/zImage: Linux kernel ARM boot executable zImage
(little-endian)
Ich habe auch keine weiteren Kernel-Patches eingespielt, weil ich der
Meinung war, dass wen im arch/arm/boot/dts/ Verzeichnis ein
mt7623n-bananapi-bpi-r2.dtb DT-Blob steht, dies nicht nötig sei.
Eventuell irre ich mich da aber!?
U-Boot> boot
switch to partitions #0, OK
mmc1 is current device
1092 bytes read in 12 ms (88.9 KiB/s)
Running boot/boot.scr from: mmc 1:1 using boot/boot.scr
## Executing script at 85f80000
Boot script loaded from device 1
127 bytes read in 9 ms (13.7 KiB/s)
28473 bytes read in 18 ms (1.5 MiB/s)
7931375 bytes read in 412 ms (18.4 MiB/s)
362528 bytes read in 33 ms (10.5 MiB/s)
Booting boot/zImage5 boot/uInitrd
boot/dtb/mt7623n-bananapi-bpi-r2-mw.dtb from: mmc 1:1 using
bootargs=console=ttyS2,115200n1 root=UUID=3046aca4-3ffe-4500-a71
Kernel image @ 0x82000000 [ 0x000000 - 0x058820 ]
## Loading init Ramdisk from Legacy Image at 86080000 ...
Image Name: uInitrd
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 7931311 Bytes = 7.6 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 86000000
Booting using the fdt blob at 0x86000000
Loading Ramdisk to 8f86f000, end 8ffff5af ... OK
Loading Device Tree to 8f865000, end 8f86ef38 ... OK
Starting kernel ...
data abort <========== ?????????????????????????????????????
pc : [<82000030>] lr : [<fff97b81>]
reloc pc : [<03e69030>] lr : [<81e00b81>]
sp : ffb95770 ip : 00000018 fp : 00000400
r10: fffd48d8 r9 : ffb95ee0 r8 : 00000000
r7 : 00000000 r6 : 82000000 r5 : fffd62fc r4 : 00000000
r3 : 00006f39 r2 : 00000000 r1 : 00000000 r0 : 00000000
Flags: nZCv IRQs off FIQs off Mode SVC_32
Code: b80cf000 016f2818 00000000 00058820 (04030201)
Resetting CPU ...
resetting ...
Sonst sieht der Bootvorgang wie folgt aus:
Starting kernel ...
Loading, please wait...
starting version 237
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top
... done.
Begin: Running /scripts/local-premount ... Scanning for Btrfs
filesystems
done.
...
Danke für Eure Hilfe!
Markus
Du solltest wenigstens einen Kerneldebugger bei der Hand haben
um solche Experimente auch zufriedenstellend durchzufuehren.
Dann koenntest du naemlich feststellen, wo da geOOOPsed wird.
(Stackframe etc.)
So wird das nichts.
@Markus, hast du auch die Kernel-Modules generiert und auf dem Target
ins /lib/modules/ kopiert?
targetdir=/mnt/rootfs
...
make modules INSTALL_MOD_PATH=$targetdir
make modules_install INSTALL_MOD_PATH=$targetdir
Hatte noch keinen Modulsupport enabeled!
The present kernel configuration has modules disabled.
Type 'make config' and enable loadable module support.
Then build a kernel with module support enabled.
make: *** [Makefile:1324: modules] Fehler 1
Mir ging es erst einmal den reinen Kernel erfolgreich
zu kompilieren und dann zu starten.
Sobald ihm ja was fehlt, motzt er dann meist, z.B. beim
Laden von falschen Versionen von Modulen aus einer Initrd
oder beim fehlen eines Filesystems etc.
@Mutluit M.
Werde mal Deinen Vorschlag umsetzen.
Markus
Also, ich kompiliere den Kernel bis jetzt ohne initrd/initramfs.
Es erzeugt uImage und die dazugehörigen Module.
Die Module muss man manuell auf dem Target unter /lib/modules ablegen,
uImage kannst du auch auf einem TFTP-Server ablegen, wovon u-boot es
dann lädt --> in boot.cmd/.scr entsprechend angeben.
Kann mein script für TFTP-boot posten falls du brauchst.
Nachtrag: ahso, fällt mir jetzt wieder ein: man macht ja
initrd/initramfs haupts. um die Module darin zu verpacken. Um ehrlich zu
sein, das hab ich noch nicht gemacht, wollte aber demnächst auch mal
gemacht haben :-)
Markus W. schrieb:> Starting kernel ...>> data abort <========== ?????????????????????????????????????
Ein "data abort" ist ein harter Absturz, der hat mit Modulen & Co wohl
nicht viel zu tun - nicht gefundene Module würden eher irgendeine
Kernel-Eigene Fehlermeldung produzieren.
Markus W. schrieb:> pc : [<82000030>]
Schau doch mal via gdb und der vmlinux Datei oder System.map was für
eine Funktion das ist:
1
arm-linux-gnueabihf-gdb vmlinux
2
> info symbol 0x82000030
Wobei diese Adresse etwas verdächtig ist - das scheint ganz am Anfang
des Image zu sein, d.h. es crasht praktisch sofort (lange bevor
irgendwas mit Initrd und Modulen gemacht wird)?
Kommt die Meldung vielleicht sogar von U-Boot, weil der Kernel da noch
gar keine eigenen Exception Handler gesetzt hat?
load address: "0x00000000" - verdächtig. Wie kommt das?
@Markus, hier kannst du evtl. einige Anregungen bekommen:
https://www.piprojects.net/debian-image-bauen/
Hat mir selbst sehr geholfen, in die Materie der Image-Erstellung
einzusteigen.
Uh oh:
> Kernel image @ 0x82000000> [...]> data abort> PC: [<82000030>]
Das ist verdammt weit vorne im Kernel. Da frage ich mich ob die Compiler
Flags stimmen oder der korrekte Starup Code verlinkt wurde.
Übrigens:
> load address: "0x00000000", end address: "0x00058820"
könnte schon das Problem sein: Der Kernel wurde IMHO an die flasche
Adresse gelinkt.
@Markus, dumme Frage: benutzt du auch eine ARM-Toolchain, d.h. ein
Crosscompiler, zum kompilieren, oder kompilierst du vlt. mit dem
x86-Compiler auf dem PC? :-)
@All
Danke für die Anregungen und Einwände.
Ich kompiliere mit
make clean
make -j4 ARCH=arm CROSS_COMPILE=arm-suse-linux-gnueabi- zImage dtbs
LOADADDR=0x82000000
(das ist eine minimal Konfiguration)
Dann boote ich den BPi-R2 mit seinem OS
root@bananapir2:/boot# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
Kopiere die u.g. Files aufs Target
cp arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dtb <TARGET>/boot/dtb/
cp arch/arm/boot/zImage <TARGET>/boot/zImageX mit [X:1...9]
Mache einen reboot und drücke die Tastatur um ins Uboot zu kommen.
Dort setze ich mit env edit die beiden ENV-Vars:
auf
mmcfdtfile=boot/dtb/mt7623n-bananapi-bpi-r2.dtb
und
mmckernfile=boot/zImageX
Mit diesen temporären Settings boote ich dann.
Markus
Nachtrag zum GCC:
>arm-suse-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-suse-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib64/gcc/arm-suse-linux-gnueabi/7/lto-wrapper
Target: arm-suse-linux-gnueabi
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info
--mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64
--enable-languages=c,c++ --enable-checking=release --disable-werror
--with-gxx-include-dir=/usr/include/c++/7 --enable-ssp --disable-libssp
--disable-libvtv --disable-libmpx --disable-libcc1 --disable-plugin
--with-bugurl=https://bugs.opensuse.org/ --with-pkgversion='SUSE Linux'
--with-slibdir=/lib64 --with-system-zlib
--enable-libstdcxx-allocator=new --disable-libstdcxx-pch
--enable-version-specific-runtime-libs --with-gcc-major-version-only
--enable-linker-build-id --enable-linux-futex
--enable-gnu-indirect-function --program-suffix=-7
--program-prefix=arm-suse-linux-gnueabi- --target=arm-suse-linux-gnueabi
--disable-nls --with-sysroot=/usr/arm-suse-linux-gnueabi
--with-build-sysroot=/usr/arm-suse-linux-gnueabi
--with-build-time-tools=/usr/arm-suse-linux-gnueabi/bin
--with-arch=armv6zk --with-tune=arm1176jzf-s --with-float=hard
--with-abi=aapcs-linux --with-fpu=vfp --disable-sjlj-exceptions
--build=x86_64-suse-linux --host=x86_64-suse-linux
Thread model: posix
gcc version 7.4.1 20190424 [gcc-7-branch revision 270538] (SUSE Linux)
Laut /proc/cpuinfo hat der R2 einen armv7 SoC:
root@bananapir2:~# cat /etc/cpuinfo
cat: /etc/cpuinfo: No such file or directory
root@bananapir2:~# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 2.45
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls
vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 3
processor : 1
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 2.45
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls
vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 3
processor : 2
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 2.45
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls
vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 3
processor : 3
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 2.45
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls
vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 3
Hardware : Mediatek Cortex-A7 (Device Tree)
Revision : 0000
Serial : 0000000000000000
Ich habe mal im Anhang mein .config angehängt, die ich gerade
mit menuconfig erstellt habe.
Vielleicht kann ja jemand mal drüber lesen.
Jetzt ist der Abbruch ähnlich aber nicht gleich!
Starting kernel ...
data abort
pc : [<81e00064>] lr : [<fff97b81>]
reloc pc : [<03c69064>] lr : [<81e00b81>]
sp : ffb95770 ip : 00000018 fp : 00000400
r10: fffd48d8 r9 : ffb95ee0 r8 : ffb99bf8
r7 : 00000000 r6 : 82000000 r5 : fffd62fc r4 : 00000000
r3 : fffffdff r2 : 00000000 r1 : 00000000 r0 : 00000000
Flags: nZcv IRQs off FIQs off Mode UND_32
Code: e320f000 e320f000 e320f000 e51fd028 (e58de000)
Resetting CPU ...
resetting ...
Diesmal ist der PC: vor der Load-Adr. ???
Markus
Kompilier doch mal mit dem Crosscompiler ein test-program wit
hello-world und lass es dann auf dem Board laufen um zu sehen ob der
Compiler auch richtigen Code für den R2 generiert.
Hier zur Info bzw. zum Vergleich noch die cpuinfo des R1:
# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 45.47
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4
idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 4
processor : 1
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 45.47
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4
idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 4
Hardware : Allwinner sun7i (A20) Family
Revision : 0000
Serial : 16516608070121f8
Nachtrag:
Ahso, jetz sehe ich es: die CPU des R2 stammt von Mediatek, nicht von
Allwinner. Aber ob das wirklich ein Unterscheid macht für das
beobachtete Problem, muss man noch weiter analysieren.
Bzgl. des config-bpir2 :
Nimm am besten die config einer funktionierenden Image als Grundlage für
deine Kernelcompilierung. D.h. schau ob du die config von dem
alten/funktionierenden Kernel auftreiben kannst: s. /boot und es gibt
auch eine Möglichkeit die config aus der Image herauszuextrahieren (den
Befehl dazu müsste ich suchen).
Und: beim Armbian liegt der config unter /boot abgelegt wenn ich mich
nicht irre.
Nachtrag: nicht aus Image herauslesen, sondern aus /proc:
Kernel config (falls im kernel eingebettet):
# zcat -Sn /proc/config.gz
(oder zless ...)
@ Mutluit
Das mit der .config stimmt soweit wie Du es schreibst.
Allerdings wird die 5.1.1 .config bestimmt diverse
Veränderungen erfahren haben, die nicht zum 4.14 Ubuntu
Kernel passen.
Werde trotzdem mal die .configs vergleichen, vielleicht
kann man einem Merge daraus basteln.
Danke für die Mühe.
Markus
Markus W. schrieb:> @ Mutluit>> Das mit der .config stimmt soweit wie Du es schreibst.> Allerdings wird die 5.1.1 .config bestimmt diverse> Veränderungen erfahren haben, die nicht zum 4.14 Ubuntu> Kernel passen.
Klar, aber make menuconfig wird dich dann auf diese neuen Settings
aufmerksam machen, bzw. diese neuen Settings abfragen.
> Werde trotzdem mal die .configs vergleichen, vielleicht> kann man einem Merge daraus basteln.
Oh, sowas ist sehr mühsam. Mach es lieber nach dem KISS-Prinzip :-)
Also erstmal eine überhaupt funktionierende Version anstreben.
Optimieren kann man später allemal.
> Danke für die Mühe.
Gerne geschehen. Wünsche viel Erfolg und Gutes Gelingen.
@Mutluit M.
Du meinst also, wenn ich make menuconfig
aufrufe und dann die alte .config einer anderen
Kernelversion lade (z.B. Ubuntu 18.04.2 LTS, der
gerade bei mir läuft, uname -r ==> 4.19.20-mt7623)
werden mir die fehlenden Konfigurationen des neuen
Kernels eingebaut, weil in den Skripten enthalten.
Wäre schön, wen dem so wäre - Probiere ich mal gleich
aus.
Markus
Markus W. schrieb:> @Mutluit M.>> Du meinst also, wenn ich make menuconfig> aufrufe und dann die alte .config einer anderen> Kernelversion lade (z.B. Ubuntu 18.04.2 LTS, der> gerade bei mir läuft, uname -r ==> 4.19.20-mt7623)> werden mir die fehlenden Konfigurationen des neuen> Kernels eingebaut, weil in den Skripten enthalten.>> Wäre schön, wen dem so wäre - Probiere ich mal gleich> aus.
Ja, müsste so sein.
Aber: wenn du make menuconfig überhaupt nicht aufrufst, sondern
stattdessen die andere config nach .config kopierst, und dann den
make-lauf startest, dann fragt er dich im terminal nach den neuen Sachen
einzeln ab (ob du sie aktivieren willst usw.).
Im Falle von menuconfig bekommt man die neuen Sachen nicht mit, sie
werden mit Defaults belegt.
Btw, ich kompiliere gerade auch den neuesten git-Stand (5.1.1 wie bei
dir).
Nachtrag: auf kernel.org ist schon 5.1.2 raus... :-)
Keine Ahnung wieso der git-Stand mir 5.1.1 anzeigt, obwohl ich eben ein
git pull gemacht habe, da hat er auch vieles aktualisert...
Ich komme mit den branch-Befehlen beim git noch nicht ganz klar. Im
Vergleich dazu war svn so einfach :-)
Wie es aussieht bleibt make bei allen neunen Optionen,
die mit (NEW) im .config File gekenzeichnet sind, stehen
und fragt die Auswahl ab. (Wie Du es bereits verhergesagt hat!)
Einzig und allein der Punkt
Choose kernel unwinder
1. Frame pointer unwinder (UNWINDER_FRAME_POINTER) (NEW)
> 2. ARM EABI stack unwinder (UNWINDER_ARM) (NEW)
Erforderte eine Entscheidung zwische 1. oder 2.
...
Ich habe mal meine Files angehängt, die mit der Konfig via
make und dem GCC Aufruf zusammenhängen, sowie die diff der
alten und neuen .config.
Hoffe das bringt etwas, falls jemand damit spielen will.
Da ich nicht weiß, wer dass alles lesen wird habe ich mal
die Files mit CRLF (Wagenrücklauf+Zeilenvorschub)-Terminator
versehen.
Markus
@für die Besserwisser weiter Oben aus der Initrd - doof-Fraktion ;-)
U-Boot> boot
switch to partitions #0, OK
mmc1 is current device
1092 bytes read in 11 ms (96.7 KiB/s)
Running boot/boot.scr from: mmc 1:1 using boot/boot.scr
## Executing script at 85f80000
Boot script loaded from device 1
127 bytes read in 9 ms (13.7 KiB/s)
27786 bytes read in 16 ms (1.7 MiB/s)
7931375 bytes read in 411 ms (18.4 MiB/s)
8290816 bytes read in 430 ms (18.4 MiB/s)
Booting boot/zImage8 boot/uInitrd boot/dtb/mt7623n-bananapi-bpi-r2.dtb
from: mmc 1:1 using bootargs=console=ttyS2,115200n1
root=UUID=3046aca4-3ff
e-4500-a70b-b8a9ca34d4ae rw rootfstype=ext4 rootwait audit=0 loglevel=1
Kernel image @ 0x82000000 [ 0x000000 - 0x7e8200 ]
## Loading init Ramdisk from Legacy Image at 86080000 ...
Image Name: uInitrd
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 7931311 Bytes = 7.6 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 86000000
Booting using the fdt blob at 0x86000000
Loading Ramdisk to 8f86f000, end 8ffff5af ... OK
Loading Device Tree to 8f865000, end 8f86ec89 ... OK
Starting kernel ...
Loading, please wait...
starting version 237
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top
... done.
Begin: Running /scripts/local-premount ... done.
Begin: Will now check root file system ... fsck from util-linux 2.31.1
[/sbin/fsck.ext4 (1) -- /dev/mmcblk1p1] fsck.ext4 -a -C0 /dev/mmcblk1p1
/dev/mmcblk1p1: clean, 37353/936448 files, 283041/3849616 blocks
done.
done.
Begin: Running /scripts/local-bottom ... done.
Begin: Running /scripts/init-bottom ... done.
Welcome to Ubuntu 18.04.2 LTS!
Welcome to ARMBIAN 5.75 stable Ubuntu 18.04.2 LTS 5.1.1
System load: 0.15 0.16 0.07 Up time: 2 min
Memory usage: 4 % of 2010MB IP:
Usage of /: 6% of 15G
[ General system configuration (beta): armbian-config ]
root@bananapir2:~# uname -r
5.1.1
@Mutluit M.
Danke! - das mit der .config-Adaption war der entscheidende
Hinweis ;-) Wieder was dazu gelernt!
Markus
Bei mir hat's geklappt, aber es zeigt 5.1.0 statt 5.1.1 an:
# uname -a
Linux r1-3 5.1.0-my15 #2 SMP Thu May 16 15:23:59 CEST 2019 armv7l
GNU/Linux
Jetzt muss ich noch klären wieso in meiner git-kopie die Version 5.1.2
eigentlich nicht erscheint.
Markus W. schrieb:> root@bananapir2:~# uname -r> 5.1.1
Cool! Bei dir hat's geklappt. Gratuliere!
Bei mir stimmt was mit den Versionen irgendwas noch nicht, weil der bei
mir nur 5.1.0 anzeigt :-(
> Danke! - das mit der .config-Adaption war der entscheidende> Hinweis ;-) Wieder was dazu gelernt!
:-)
Jetzt fängt die Arbeit erst an!
Ohne diverser Patches habe ich nur 1 LAN dev
verfügbar eth0 und daraus abgeleitete br0.
eth1-eth4 fehlen, sind aber beim Original
Ubuntu 18.04.2 LTS vorhanden.
SATA liegt mir auch am Herzen. WLAN und BT
kann ich verschmerzen, wenn es icht gehen
sollte. Der R2 soll hinter die FB als FW und
als NAS für die private Cloud im Einsatz sein.
Na ja wird wohl noch etwas Zeit in Anspruch nehmen,
bis alles funktioniert.
Immerhin tut sich was in der Community zum BPi-R2.
@Mutluit M.
Viel Erfolg bei Deinen Versuchen mit Deinem BPi.
Markus
Markus W. schrieb:> Jetzt fängt die Arbeit erst an!>> Ohne diverser Patches habe ich nur 1 LAN dev> verfügbar eth0 und daraus abgeleitete br0.> eth1-eth4 fehlen, sind aber beim Original> Ubuntu 18.04.2 LTS vorhanden.> SATA liegt mir auch am Herzen. WLAN und BT> kann ich verschmerzen, wenn es icht gehen> sollte. Der R2 soll hinter die FB als FW und> als NAS für die private Cloud im Einsatz sein.>> Na ja wird wohl noch etwas Zeit in Anspruch nehmen,> bis alles funktioniert.>> Immerhin tut sich was in der Community zum BPi-R2.>> @Mutluit M.> Viel Erfolg bei Deinen Versuchen mit Deinem BPi.
Danke. Der Einsatzgebiet bei mir ist ähnlich wie bei dir.
Nach SATA und SATA-Portmultiplier wollte ich mir die integrierte Switch
des R1 vornehmen, und dann WLAN und BT.
Der R1 wurde in den vergangenen Jahren mMn zu Unrecht als schlecht
beurteilt. Ich finde den eigentlich sehr gut gemacht.
Jedoch hätte ich eine Quadcore CPU besser befunden, aber das ist ja
historisch so gekommen; Quadcore gab es zu der Zeit noch nicht (bzw.
DualCore war damals ausreichend).
Zum Lernen und Experimentieren IMO gut geeignet, auch für
Netzwerk-Sachen.
Naja, egal, ich werde versuchen das Maximum aus dem Gerät rauszuholen;
hab hier mehrere von denen, gebraucht günstig erworben über ebay.
Hi Markus,
ich glaube in unseren beiden Fällen wäre es wohl besser, wenn man
für den eigenen kernel-build den sunxi-fork (mainline) der kernel-repo
benutzt.
Denn die sunxi-Leute bringen die für die Banana-Pi-Boards spezifischen
Sachen eher/früher in den kernel rein als der main kernel (torvalds bzw.
stable):
git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git
Mehr Info:
https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git/
@Mutluit M.,
danke für den Hinweis mit dem sunxi-fork.
War jetzt anderweitig beschäftigt - hoffe am So. weiter
spielen zu können.
Werde Deinen Vorschlag bei mir Testen. Hängt davon ab ob
ich in der Lage sein werde den Kernel zu bauen.
Verschiedene Quellen bringen manchmal unterschiedliche
Anforderungen an die Build-Tools mit.
Markus
Markus W. schrieb:> @Mutluit M.,>> danke für den Hinweis mit dem sunxi-fork.
Der Vollständigkeit halber hier noch dieser Link:
https://git.kernel.org/pub/scm/linux/kernel/git/
Es listet alle kernel-forks auf, die direkt bei kernel.org gehostet
werden.
Es sind haupts. High-Kaliber-Developer am Linux-Projekt und einige
Firmen.
> Werde Deinen Vorschlag bei mir Testen. Hängt davon ab ob> ich in der Lage sein werde den Kernel zu bauen.> Verschiedene Quellen bringen manchmal unterschiedliche> Anforderungen an die Build-Tools mit.
Ja, das kann durchaus zutreffen. Ich habe aus der o.g. Liste bis jetzt
nur die 3 forks "torvalds", "stable" und "sunxi" getestet. Bei denen hat
meine normale Std-Toolchain ausgereicht.
Hier noch einige allgemeine Infos für Leute die sich erstmalig dafür
interessieren:
Die o.g. fork-trees sind je ca. 2.5GB gross, brauch man also eine
einigermassen schnelle Internet-Leitung um es mit "git clone" zu klonen.
Man kann das aber mit einigen Switches (--depth 1) verkleinern wenn man
nur eine bestimmte Version haben will, s. dazu Beispiel hier:
https://unix.stackexchange.com/questions/46077/where-to-download-linux-kernel-source-code-of-a-specific-version/46079
Dann nach dem klonen:
- Mit "git tag" kann man dann alle Versionen zurück bis v2.6.11
auflisten (die noch älteren Versionen scheinen auf archiv-server
ausgelagert worden zu sein, u.a. auf
https://mirrors.edge.kernel.org/pub/linux/kernel/ )
- Mit "git checkout vXXX" dann eine bestimmte Version auschecken, bzw.
"git checkout -b eigenebranch vXXX".
- Und "git branch" bzw. "git branch --all" zeigt die branches an, inkl.
eigene branch(es).
@Mutluit M.
Ausgehend von Deinem Link
https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git/
habe ich mir zwei tar.gz Kernels aus der Download Spalte im
"summary" Reiter heruntergeladen. s.u.
Diese konnte ich problemlos compilieren, wobei ich die letzte
von mir verwendete .config aus dem vorhergehendem Durchlauf
genommen habe.
Die beiden u.g. tar.gz Files linux-sunxi-h3-h5-for-5.2 und
linux-sunxi-dt-for-5.2 liefern den selben Kernel LTS 5.1.0-rc1.
Diese Files sind wohl die aktuellsten Snapshots aus dem Repository
und sind lediglich knapp 170MB groß.
https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git/snapshot/linux-sunxi-h3-h5-for-5.2.tar.gz
Welcome to ARMBIAN 5.75 stable Ubuntu 18.04.2 LTS 5.1.0-rc1
System load: 0.36 0.17 0.06 Up time: 2 min
Memory usage: 4 % of 2010MB IP:
Usage of /: 6% of 15G
https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git/snapshot/linux-sunxi-dt-for-5.2.tar.gz
Welcome to ARMBIAN 5.75 stable Ubuntu 18.04.2 LTS 5.1.0-rc1
System load: 0.00 0.03 0.03 Up time: 9 min
Memory usage: 4 % of 2011MB IP:
Usage of /: 6% of 15G
Mein make-Aufruf lautet:
make -j4 ARCH=arm CROSS_COMPILE=arm-suse-linux-gnueabi-
INSTALL_MOD_PATH=./modules4bpir2 LOADADDR=0x82000000 bzImage modules
dtbs,
wobei mir leider noch keine .ko Files im
INSTALL_MOD_PATH=./modules4bpir2
auftauchen, obwohl das Dir existiert.
Alle .ko Kernel-Module werden aber fehlerfrei erzeugt nur nicht in
meinem
Wunsch-Dir.
Aber der Sonntag ist ja noch lang.
Markus
Markus W. schrieb:> Alle .ko Kernel-Module werden aber fehlerfrei erzeugt nur nicht in> meinem Wunsch-Dir.
Gib dort mal absoluten Pfad an, also FullPath
Nachtrag:
Ich glaube du musst das auf 2 oder 3 Befehlszeilen machen, wie bei mir
(ich mache alles in einem script):
make -j3 LOADADDR=0x40008000 uImage modules dtbs
make modules INSTALL_MOD_PATH=$targetdir
make modules_install INSTALL_MOD_PATH=$targetdir
Ich habe ARCH, PATH und CROSS_COMPILE etc. zuvor exportiert, so dass sie
beim make nicht explizit angeg. werden brauchen.
Und return-code-checks habe ich auch drin, so dass die module nur dann
generiert werden wenn compile-lauf zuvor erfolgreich war (also $?
auswerten etc..)
Nachtrag2: hmm. müsste auch alles in nur 1 Befehlszeile, wie du gemacht
hast, eigentlich auch klappen.
> Aber der Sonntag ist ja noch lang.
:-) Jo, viel Spass am Sonntag!
zu:
make modules_install INSTALL_MOD_PATH=$targetdir
$targetdir ist doch ein beliebiges Verzeichnis, das
Du dann zum BPi od. BPiR2 kopierts oder via Mount
direkt drauf schreibst.
Wozu brauchst Du dann die root Rechte?
Du veränderst ja nicht das aktuelle OS auf dem Du
kompilierst.
Markus
Markus W. schrieb:> zu:>> make modules_install INSTALL_MOD_PATH=$targetdir>> $targetdir ist doch ein beliebiges Verzeichnis, das> Du dann zum BPi od. BPiR2 kopierts oder via Mount> direkt drauf schreibst.> Wozu brauchst Du dann die root Rechte?> Du veränderst ja nicht das aktuelle OS auf dem Du> kompilierst.
Also, das kann eine Besonderheit bei mir sein:
Ich habe eine Image-Datei, die eine SD-Karte darstellt.
Darin sind 2 Partition: erste ist bootfs, die 2. ist rootfs.
rootfs ist praktisch das Betriebssystem (hier Debian).
Und wenn man sich anschaut welche Access-Rechte /lib und /lib/modules
haben, dann ist root notwendig, wenn man die Module gerade dorthin
erstellt haben will.
targetdir ist zwar /mnt/rootfs, aber der entspr. make-Befehl kopiert es
relativ dazu ins lib/modules, also effektiv ins /mnt/rootfs/lib/modules.
Das kannst du bei dir natürlich auch anders machen.
Ich habe mich an dem weiter oben geposteten howto-link orientiert:
https://www.piprojects.net/debian-image-bauen/
Diese Zeile hab ich wieder abgeändert:
1
make -j3 LOADADDR=0x40008000 uImage dtbs modules INSTALL_MOD_PATH=$targetdir
@Mutluit M.
ich kämpfe gerade noch mit dem 5.1.3 Kernel bei meiner
Toolchain auf dem Notebook.
Bekomme aber gerade Fehler trotz der Angabe von ARCH=arm.
Irgendwie versucht der Compiler den x86 linker LD zu benutzen.
S.u.
Zu dem Target-Modul-Dir kann ich nur sagen, sofern ich das
richtig sehe, dass die Rechte eines gemounteten FS von den
default Einstellungen des aktuell laufenden Kernels und den
Mountoptionen abhängen die auf das FS angewendet werden -
Stichwort (umask und -o Option / Attribute beim mount Befehl)
Markus
root@zbook:/home/markus/Elektrotechnik/ARM/Banana-Pi/Banana-Pi-R2/BPi-R2
-MW/linux-5.1.3
>make ARCH=arm CROSS_COMPILE='arm-suse-linux-gnueabi-' menuconfig
HOSTCC scripts/basic/fixdep
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
/tmp/cczqrtJ8.o: in function `read_file':
fixdep.c:(.text+0x83): undefined reference to `_impure_ptr'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
fixdep.c:(.text+0xdc): undefined reference to `_impure_ptr'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
/tmp/cczqrtJ8.o: in function `main':
fixdep.c:(.text.startup+0x16b): undefined reference to `_ctype_'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
fixdep.c:(.text.startup+0x193): undefined reference to `_ctype_'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
fixdep.c:(.text.startup+0x1c1): undefined reference to `_ctype_'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
fixdep.c:(.text.startup+0x37b): undefined reference to `_ctype_'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
fixdep.c:(.text.startup+0x53a): undefined reference to `_impure_ptr'
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld:
fixdep.c:(.text.startup+0x563): undefined reference to `_impure_ptr'
collect2: error: ld returned 1 exit status
make[1]: *** [scripts/Makefile.host:92: scripts/basic/fixdep] Error 1
make: *** [Makefile:490: scripts_basic] Error 2
Markus W. schrieb:> @Mutluit M.>> ich kämpfe gerade noch mit dem 5.1.3 Kernel bei meiner> Toolchain auf dem Notebook.>> Bekomme aber gerade Fehler trotz der Angabe von ARCH=arm.>> Irgendwie versucht der Compiler den x86 linker LD zu benutzen.> S.u.
Es sieht danach aus dass dein PATH nicht richtig gesetzt ist: als erstes
sollte die Toolchain vorkommen. Bei mir ist es so:
Zur Info für alle Interessierten.
Mir ist es gelungen nach vielen Versuchen den
neusten Linux Kernel 5.2.0-rc2 für den BPi-R2
zu kompilieren und diesen zum Laufen zu bringen.
Ich hatte Probleme eine SSD am SATA Port zu
betreiben und wäre fast verzweifelt, bis sich
gerade herausstellte, daß beim SATA-Kabel die
+5V Versorgungs-Drähte (rt/sz) vertauscht waren.
Nachdem ich den Stecker umgebaut habe, wurde
die SSD sofort erkannt.
Welcome to ARMBIAN 5.75 stable Ubuntu 18.04.2 LTS 5.2.0-rc2
System load: 0.19 0.12 0.05 Up time: 2 min
Memory usage: 5 % of 2010MB IP:
CPU temp: 29�°C
Usage of /: 8% of 15G
[ General system configuration (beta): armbian-config ]
root@bananapir2:~# lsscsi
[0:0:0:0] disk ATA INTEL SSDSC2KW24 G200 /dev/sda
Bei dem neuen Kernel läuft die SSD auch ohne Patch
mit 100-150 MB/Sek. (eine Intel 540s 240GB / SSDSC2KW240H6)
Mangels Speicher "/dev/shm" (nur 1GB) habe ich nur ein 512MB
File in einer Loop zehn mal auf die SSD geschrieben.
Dabei sind die Messwerte (min/max) entstanden.
root@bananapir2:/mnt/sda7# ls -l /dev/shm
total 524288
-rw-r--r-- 1 root root 536870912 May 30 12:04 BIG_FILE_512MB.bin
root@bananapir2:/mnt/sda7# for i in `seq 1 10`
> do> time $(cp /dev/shm/BIG_FILE_512MB.bin /mnt/sda7/BIG_FILE_${i}_512M.bin; sync)> done
real 0m3.971s
user 0m0.032s
sys 0m3.670s
real 0m4.059s
user 0m0.029s
sys 0m3.842s
real 0m4.093s
user 0m0.029s
sys 0m3.854s
real 0m4.608s
user 0m0.033s
sys 0m3.872s
real 0m5.218s
user 0m0.017s
sys 0m3.849s
real 0m5.086s
user 0m0.027s
sys 0m3.826s
real 0m5.248s
user 0m0.009s
sys 0m3.845s
real 0m5.292s
user 0m0.017s
sys 0m3.819s
real 0m5.246s
user 0m0.049s
sys 0m3.838s
real 0m5.288s
user 0m0.009s
sys 0m3.872s
135.197.912 Byte/sek. max
101.526.269 Byte/Sek. min
real 0m3.865s
user 0m0.052s
sys 0m3.553s
real 0m3.777s
user 0m0.024s
sys 0m3.511s
real 0m3.747s
user 0m0.030s
sys 0m3.479s
real 0m3.765s
user 0m0.021s
sys 0m3.485s
real 0m4.323s
user 0m0.033s
sys 0m3.480s
real 0m5.166s
user 0m0.015s
sys 0m3.527s
real 0m5.132s
user 0m0.021s
sys 0m3.502s
real 0m5.099s
user 0m0.023s
sys 0m3.499s
real 0m5.268s
user 0m0.029s
sys 0m3.517s
real 0m5.092s
user 0m0.013s
sys 0m3.511s
143.280.200 Byte/Sek. max
101.911.714 Byte/Sek. min
root@bananapir2:/mnt/sda7# ls -l
total 5242916
-rw-r--r-- 1 root root 536870912 May 30 12:12 BIG_FILE_10_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_1_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_2_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_3_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_4_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_5_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_6_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_7_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_8_512M.bin
-rw-r--r-- 1 root root 536870912 May 30 12:11 BIG_FILE_9_512M.bin
Markus
Markus W. schrieb:> Zur Info für alle Interessierten.>> Mir ist es gelungen nach vielen Versuchen den> neusten Linux Kernel 5.2.0-rc2 für den BPi-R2> zu kompilieren und diesen zum Laufen zu bringen.>> Ich hatte Probleme eine SSD am SATA Port zu> betreiben und wäre fast verzweifelt, bis sich> gerade herausstellte, daß beim SATA-Kabel die> +5V Versorgungs-Drähte (rt/sz) vertauscht waren.>> Nachdem ich den Stecker umgebaut habe, wurde> die SSD sofort erkannt.
Ich frag mich wie das denn passieren kann, dass das SATA-Stromkabel
falsch verdrahtet ist? Die sind doch genormt und auch Massenware.
Aber gut zu wissen dass man bei Problemen auch an so eine Möglichkeit
denken sollte.
Aber wenn ältere Kernel doch liefen, kann es dann nicht sein dass es
vlt. ein Problem in diesem neuen Kernel sein könnte?
@Mutluit M.
Die beiden einzelnen Drähte der 5V Versorgung wurden
nur falsch in den Stecker montiert, d.h. die beiden
Pins verkehrt hineingesteckt.
Hatte auch nicht gedacht, dass so was bei einem gekauften
SATA Kabel pasieren kann.
Markus
@Mutluit M.
and All,
Was mir noch eingefallen ist, ist die
Möglichkeit, dass der SATA-Versorgungs-
Spannungs-Stecker (zweipolig/weiß neben
dem typischm SATA-Daten Stecker)auf dem
BPi-R2 falsch eingesetzt und verlötet
sein könnte. Dies ist aber eher unwahr-
scheinlich da so ein Bestückungsautomat
wohl keine Fehler macht und wenn doch,
weil falsch programmiert, wäre es auch
anderen Benützern des BPi-R2 aufgefallen.
Kann jemand das betätigen oder widerlegen,
der auch einen BPi-R2 besitzt?
Markus
@All,
hätte jemand noch eine Idee, wie/wo ich
den xhci-mt in der make menuconfig oder
in dem .config File für die Kompilierung
aktivieren kann.
Danke!
Markus
Danke Mutluit M.!
Werde mal nach dem CONFIG_USB_XHCI_HCD in der .config suchen.
Habe aber bereits nach xhci erfolglos gescannt, wobei manche
deaktivierten Optionen garnicht in der .config auftauchen.
In den 5.1.1, 5.1.5 und 5.2-RC2 Kernel sourcen, die ich
bis jetzt getestet habe sind die xhci-mtk Sourcen enthalten.
xxx:~/Programming/ARM/BPiR2/linux-5.2-rc2 #
>find . -name \*xhci-mt\*
./drivers/usb/host/xhci-mtk-sch.c
./drivers/usb/host/.xhci-mtk.o.cmd
./drivers/usb/host/.xhci-mtk-sch.o.cmd
./drivers/usb/host/xhci-mtk.c
./drivers/usb/host/xhci-mtk.h
Beim make mudules und make moduls_install werden sie aber
bei mir nicht kompiliert.
Hintergrund ist bei mir der Wunsch eine weitere SSD via
USB3 anzuschließen.
Schließe ich einen USB3-Stick an, sehe ich via journalctl -f
May 30 bananapir2 kernel: usb 4-1: new SuperSpeed Gen 1 USB device
number 2 using xhci-mtk
May 30 bananapir2 kernel: usb-storage 4-1:1.0: USB Mass Storage device
detected
May 30 bananapir2 kernel: scsi host2: usb-storage 4-1:1.0
May 30 bananapir2 kernel: usbcore: registered new interface driver uas
May 30 bananapir2 kernel: scsi 2:0:0:0: Direct-Access MUSHKIN
MKNUFDIM64GB PMAP PQ: 0 ANSI: 6
May 30 bananapir2 kernel: sd 2:0:0:0: [sdb] 123600896 512-byte logical
blocks: (63.3 GB/58.9 GiB)
May 30 bananapir2 kernel: sd 2:0:0:0: [sdb] Write Protect is off
May 30 bananapir2 kernel: sd 2:0:0:0: [sdb] Mode Sense: 2b 00 00 08
May 30 bananapir2 kernel: sd 2:0:0:0: [sdb] Write cache: disabled, read
cache: enabled, doesn't support DPO or FUA
May 30 bananapir2 kernel: sdb: sdb1
May 30 bananapir2 kernel: sd 2:0:0:0: [sdb] Attached SCSI removable disk
Schließe ich meine M2-SSD via USB3-Adapter an, sehe ich
May 30 bananapir2 kernel: usb 4-1: new SuperSpeed Gen 1 USB device
number 3 using xhci-mtk
May 30 bananapir2 kernel: scsi host2: uas
May 30 bananapir2 kernel: xhci-mtk 1a240000.usb: ERROR Transfer event
for unknown stream ring slot 1 ep 4
May 30 bananapir2 kernel: xhci-mtk 1a240000.usb: @00000000ac048a30
ac09c000 00000000 05000000 01058000
May 30 bananapir2 kernel: xhci-mtk 1a240000.usb: ERROR Transfer event
for unknown stream ring slot 1 ep 6
May 30 bananapir2 kernel: xhci-mtk 1a240000.usb: @00000000ac048a40
ac09c100 00000000 05000000 01078000
...
May 30 bananapir2 kernel: scsi 2:0:0:0: tag#0 uas_eh_abort_handler 0
uas-tag 1 inflight: CMD IN
May 30 bananapir2 kernel: scsi 2:0:0:0: tag#0 CDB: opcode=0x12 12 00 00
00 24 00
May 30 bananapir2 kernel: xhci-mtk 1a240000.usb: Mismatch between
completed Set TR Deq Ptr command & xHCI internal state.
May 30 bananapir2 kernel: xhci-mtk 1a240000.usb: ep deq seg = dc1951de,
deq ptr = ad764e23
May 30 bananapir2 kernel: scsi host2: uas_eh_device_reset_handler FAILED
to get lock err -16
May 30 bananapir2 kernel: scsi 2:0:0:0: Device offlined - not ready
after error recovery
Also passt noch was nicht.
Da ich den xhci-mtk.ko nicht in /lib/modules/5.2-RC2/... finde
und er auch nicht via lsmod angezeigt wird hoffe ich dass es
nur an dem Fehlen des Treibers liegt, dass ich die SSD nicht sehe.
Übrigens habe ich zum MT7623 das u.g. DS per Zufall gefunden.
https://drive.google.com/file/d/0B_YnvHgh2rwjR3pwSzNrS1Nqdjg/view
Vielleicht kann es sonst jemand noch brauchen.
Was ich noch suche und auch gerade versuche, ist das
armbianEnv.txt bzw. boot.cmd File so anzupassen, dass
mein Kernel von /dev/sda1 und mein Root-FS von /dev/sda6
geladen wird.
Falls jemand das schon raus bekommen hat, wie die UBoot-Env
diesbezüglich gesetzt werden muss, wäre ich für einen Tipp
dankbar.
Mir ist Klar, dass der Bootvorgang über die SD oder das NAND-
EMMC gestartet wird, aber sobald U-Boot geladen ist, würde ich
gerne von dem sda Device starten.
Danke für nützliche Hinweise an die Linux-Fraktion.
Markus
Markus W. schrieb:>> Also passt noch was nicht.> Da ich den xhci-mtk.ko nicht in /lib/modules/5.2-RC2/... finde> und er auch nicht via lsmod angezeigt wird
Wenn der Treiber aktiviert, aber nicht als Modul (M) konfiguriert wurde,
dann wird es ja in den Kernel eingebunden, d.h. dann liegt es nicht als
externes Modul vor sondern ist fest im Kernel drin.
> hoffe ich dass es> nur an dem Fehlen des Treibers liegt, dass ich die SSD nicht sehe.
Das ist dann echt merkwürdig.
Markus W. schrieb:>> Übrigens habe ich zum MT7623 das u.g. DS per Zufall gefunden.>> https://drive.google.com/file/d/0B_YnvHgh2rwjR3pwSzNrS1Nqdjg/view>> Vielleicht kann es sonst jemand noch brauchen.
Hab z.Zt. zwar kein R2, aber solche Handbücher sind willkommen.
Was mir aufgefallen ist: in diesem Handbuch wird SATA/AHCI ja überhaupt
gar nicht erwähnt :-( Schon etwas merkwürdig, finde ich.
> Was ich noch suche und auch gerade versuche, ist das> armbianEnv.txt bzw. boot.cmd File so anzupassen, dass> mein Kernel von /dev/sda1 und mein Root-FS von /dev/sda6> geladen wird.
Also, root auf sdX sollte eigentlich kein Problem sein, aber ob boot auf
sdX sein kann ist fraglich. Wie gesagt ich spekuliere nur weil ich den
R2 noch nicht kenne.
Ich hatte vor einigen Tagen eine Armbian-Image auf dem M1-Berry
ausprobiert. Hier der Inhalt:
1
# cat armbianEnv.txt
2
verbosity=1
3
logo=disabled
4
console=both
5
disp_mode=1920x1080p60
6
overlay_prefix=sun8i-h3
7
rootdev=UUID=bfbeddf1-eeb9-4314-b555-e14a7b5223ca
8
rootfstype=ext4
9
# MY
10
fdtfile=sun8i-v40-bananapi-m2-berry.dtb
D.h. mittels rootdev und rootfstype kann man die root-partition
definieren.
Statt UUID müsste eigentlich /dev/sdX auch gehen, aber sicher bin ich
mir nicht.
> Falls jemand das schon raus bekommen hat, wie die UBoot-Env> diesbezüglich gesetzt werden muss, wäre ich für einen Tipp> dankbar.>> Mir ist Klar, dass der Bootvorgang über die SD oder das NAND-> EMMC gestartet wird, aber sobald U-Boot geladen ist, würde ich> gerne von dem sda Device starten.
Ja, das geht im Allgemeinen und sollte auch beim R2 gehen; s.o.
@ Mutluit M.
Ich habe nun einen neuen Kompiliervorgang angestoßen.
Dabei habe ich die Info im Web gefunden, daß bei
make menuconfig in der GUI, die dabei angezeigt wird,
ein "/" als Eingabe eine Suchmaske öffnet.
Mit der Suche habe ich alle CONFIG Switches lockalisiert,
die ein MTK im Namen haben.
Ist eine ganze Menge.
Dabei werden einem z.B. solche einträge angezeigt:
Symbol: MTD_NAND_MTK [=n]
│ Type : tristate
│ Prompt: MTK NAND controller
│ Location:
│ -> Device Drivers
│ -> Memory Technology Device (MTD) support (MTD [=y])
│ (1) -> Raw/Parallel NAND Device Support (MTD_RAW_NAND [=n])
│ Defined at drivers/mtd/nand/raw/Kconfig:402
│ Depends on: MTD [=y] && MTD_RAW_NAND [=n] && (ARCH_MEDIATEK [=y]
|| COMPILE_TEST [=n]) && HAS_IOMEM [=y]
Mit dieser Hilfe kann man dann zu den entsprechenden Einträgen
navigieren.
Habe dabei noch einige [n]'s gefunden.
z.B.
Symbol: BT_MTKUART [=n]
Symbol: MTD_NAND_MTK [=n]
Symbol: MTK_CMDQ [=n]
Symbol: MTK_CQDMA [=n]
...
Diese habe ich versuchsweise auf "y" gesetzt und werde mal das
Resultat auf dem BPi-R2 ausprobieren.
Markus
Korrektur: natürlich meinte ich M2-Berry; M1-Berry gibt's gar nicht :-)
Und: es handelte sich um eine neuere Armbian-Img:
Armbian_5.83_Bananapim2ultra_Debian_stretch_dev_5.0.10.img
Mein Kompilerdurchlauf ist nun fertig.
make modules_install erzeugt alle Module.
Leider ist nirgends ein xhci...ko zu finden.
Wie checke ich ob er im Kernel fest einkompiliert ist?
Mit objdump -x ?
Im Anhang meine *.ko Fileliste, die erzeugt wurde.
Markus
Markus W. schrieb:> Mein Kompilerdurchlauf ist nun fertig.> make modules_install erzeugt alle Module.> Leider ist nirgends ein xhci...ko zu finden.>> Wie checke ich ob er im Kernel fest einkompiliert ist?
Hm, ja, gute Frage :-) Vlt. folgendes :-)
$ grep XXX .config
Nachtrag:
Die richtige Antwort scheint hier zu sein:
https://superuser.com/questions/577307/how-to-get-a-list-of-active-drivers-that-are-statically-built-into-the-linux-ker
Also, der folgende Befehl zeigt sie an:
cat /lib/modules/$(uname -r)/modules.builtin
Statt des $(uname -r) kannst du den Dir-Namen auch direkt angeben...
Bei meinem R1 taucht da folgendes auf:
kernel/drivers/usb/host/xhci-hcd.ko
Man kann diese Info auch aus dem Build-Verzeichniss
heraus holen, wie ich gerade sehe.
./lib/modules/5.2.0-rc2/modules.builtin
cat ./lib/modules/5.2.0-rc2/modules.builtin | grep -i xhci
liefert jetzt:
kernel/drivers/usb/host/xhci-hcd.ko
kernel/drivers/usb/host/xhci-pci.ko
kernel/drivers/usb/host/xhci-plat-hcd.ko
kernel/drivers/usb/host/xhci-mtk.ko
Leider bekomme ich noch immer nach dem Anstecken der
M2-SSD via USB3 Adapter eine Fehlermeldung mittels
journalctl -f.
May 31 bananapir2 kernel: scsi host2: uas
May 31 bananapir2 kernel: xhci-mtk 1a1c0000.usb: ERROR Transfer event
for unknown stream ring slot 1 ep 4
May 31 bananapir2 kernel: xhci-mtk 1a1c0000.usb: @00000000ac0432c0
ac09b000 00000000 05000000 01058001
May 31 bananapir2 kernel: xhci-mtk 1a1c0000.usb: ERROR Transfer event
for unknown stream ring slot 1 ep 6
May 31 bananapir2 kernel: xhci-mtk 1a1c0000.usb: @00000000ac0432d0
ac09b100 00000000 05000000 01078001
May 31 bananapir2 kernel: scsi 2:0:0:0: tag#0 uas_eh_abort_handler 0
uas-tag 1 inflight: CMD IN
May 31 bananapir2 kernel: scsi 2:0:0:0: tag#0 CDB: opcode=0x12 12 00 00
00 24 00
May 31 bananapir2 kernel: xhci-mtk 1a1c0000.usb: Mismatch between
completed Set TR Deq Ptr command & xHCI internal state.
May 31 bananapir2 kernel: xhci-mtk 1a1c0000.usb: ep deq seg = 303bc2e9,
deq ptr = b0939dbb
May 31 bananapir2 kernel: scsi host2: uas_eh_device_reset_handler FAILED
to get lock err -16
May 31 bananapir2 kernel: scsi 2:0:0:0: Device offlined - not ready
after error recovery
Details siehe Anhang!
lsmod vor und nach dem Anstecken der SSD Disk.
Danach depmod -a und erneutes lsmod.
Dann noch eine Suche nach xhci und XHCI im
/lib/modules/5.2-RC2 .ko-Modul-Verzeichnis.
Markus
Nachtrag:
Wie ist diese Zeile von lsmod zu verstehen?
Module Size Used by
uas 20480 0
uas hat keine Module, die von ihm abhängen.
Laut journalctl -f hat aber das uas etwas mit dem
Anstecken der SSD zu tun, da es in diesem Zusammenhang
gelistet wird.
Wo liegt der Hund begraben?
@All
Problem scheinbar oder auch gänzlich gelöst!?
Nach der Erweiterung der ..../drivers/usb/storage/unusual_uas.h
Header Datei um die u.g. Struktur
/* M.W. JMicron Technology Corp. Liangteng USB3.1 TO NVME SSD */
UNUSUAL_DEV(0x152d, 0x0562, 0x0000, 0x9999,
"JMicron",
"USB3.1 TO NVME SSD",
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
US_FL_IGNORE_UAS),
Und dem Neukompilieren des Kernels,
liefert journalctl -f nach dem Einstecken der M2.SSD folgenden
Output:
May 31 bananapir2 kernel: usb 2-1: new SuperSpeed Gen 1 USB device
number 2 using xhci-mtk
May 31 bananapir2 kernel: usb 2-1: UAS is blacklisted for this device,
using usb-storage instead
May 31 bananapir2 kernel: usb-storage 2-1:1.0: USB Mass Storage device
detected
May 31 bananapir2 kernel: usb-storage 2-1:1.0: Quirks match for vid 152d
pid 0562: 800000
May 31 bananapir2 kernel: scsi host2: usb-storage 2-1:1.0
May 31 bananapir2 kernel: usbcore: registered new interface driver uas
May 31 bananapir2 dnscrypt-proxy[1830]: Fri May 31 11:19:47 2019 [INFO]
Refetching server certificates
May 31 bananapir2 dnscrypt-proxy[1830]: Fri May 31 11:19:47 2019 [INFO]
Server certificate with serial #1559296801 received
May 31 bananapir2 dnscrypt-proxy[1830]: Fri May 31 11:19:47 2019 [INFO]
This certificate has expired
May 31 bananapir2 dnscrypt-proxy[1830]: Fri May 31 11:19:47 2019 [ERROR]
No useable certificates found
May 31 bananapir2 kernel: scsi 2:0:0:0: Direct-Access ITHOO Tech
0204 PQ: 0 ANSI: 6
May 31 bananapir2 kernel: sd 2:0:0:0: [sda] 1000215216 512-byte logical
blocks: (512 GB/477 GiB)
May 31 bananapir2 kernel: sd 2:0:0:0: [sda] Write Protect is off
May 31 bananapir2 kernel: sd 2:0:0:0: [sda] Mode Sense: 53 00 00 08
May 31 bananapir2 kernel: sd 2:0:0:0: [sda] Write cache: enabled, read
cache: enabled, doesn't support DPO or FUA
May 31 bananapir2 kernel: sda: sda1
May 31 bananapir2 kernel: sd 2:0:0:0: [sda] Attached SCSI disk
Weitere Tests zeigen:
root@bananapir2:~# lsscsi
[2:0:0:0] disk ITHOO Tech 0204 /dev/sda
root@bananapir2:~# fdisk -l /dev/sda
Disk /dev/sda: 477 GiB, 512110190592 bytes, 1000215216 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: 9A50C8D9-7B8E-4584-8431-E6A745B2A686
Device Start End Sectors Size Type
/dev/sda1 2048 1000215182 1000213135 477G Linux filesystem
root@bananapir2:~# mount /dev/sda1 /mnt/sda1
root@bananapir2:~# df -h
/dev/sda1 470G 149G 298G 34% /mnt/sda1
Was ich noch nicht ganz verstehe, sind die Flags, die in der
o.g. Struktur gesetzt werden können.
U.u wäre auch die Kombination sinnvoll
US_FL_IGNORE_UAS | US_FL_NO_REPORT_OPCODE
für die
** UNRECOGNIZED: 14 10 0a 00 01 00 00 00 00 11 00 00 30 40 0a 00 b0 40
0a 00
Fehlermeldung!
Leider bin ich aber da nicht so firm, was Linux Kernel-Driver
angeht.
Kann Sich jemand dazu äußern, oder muss ich mich aufgrund
der speziellen Thematik an kernel.org wenden?
Markus
Bin gerade dabei es zu Testen.
Der Erste Eindruck liegt bei 110MB/Sek+-10MB,
wobei ich nicht sicher bin, wie weit ich den
Transfer durch meinen Patch negativ beeinflusst
habe.
Siehe Werte weiter unten.
Markus
root@bananapir2:~# lsscsi
[0:0:0:0] disk ITHOO Tech 0204 /dev/sdb
[1:0:0:0] disk ATA INTEL SSDSC2KW24 G200 /dev/sda
root@bananapir2:~# fdisk -l /dev/sda
Disk /dev/sda: 223.6 GiB, 240057409536 bytes, 468862128 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: dos
Disk identifier: 0x0003bb90
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 1044479 1042432 509M 83 Linux
/dev/sda2 1044480 9431039 8386560 4G 82 Linux swap /
Solaris
/dev/sda3 9431040 42989567 33558528 16G 83 Linux
/dev/sda4 42989568 468860927 425871360 203.1G f W95 Ext'd (LBA)
/dev/sda5 42991616 76550143 33558528 16G 83 Linux
/dev/sda6 76552192 143652863 67100672 32G 83 Linux
/dev/sda7 143654912 468860927 325206016 155.1G 83 Linux
root@bananapir2:~# fdisk -l /dev/sdb
Disk /dev/sdb: 477 GiB, 512110190592 bytes, 1000215216 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: 9A50C8D9-7B8E-4584-8431-E6A745B2A686
Device Start End Sectors Size Type
/dev/sdb1 2048 1000215182 1000213135 477G Linux filesystem
Testfile via urandom erzeugen:
==============================
count=4096; sync)mnt/sdb1# time $(dd if=/dev/urandom
of=./BIG_FILE_4G.bin bs=1M
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 126.982 s, 33.8 MB/s
real 2m7.030s
user 0m0.037s
sys 2m6.872s
root@bananapir2:/mnt/sdb1# ls -l BIG_FILE_4G.bin
-rw-r--r-- 1 root root 4294967296 May 31 11:44 BIG_FILE_4G.bin
Datentransfer starten:
======================
M2.SSD via USB3 ===> INTEL SSD am SATA Port#1
==============================================
root@bananapir2:/mnt/sdb1# for i in `seq 1 5`
> do> echo ${i}> time $(dd if=./BIG_FILE_4G.bin of=/mnt/sda7/BIG_FILE_${i}_4G.bin bs=1M; sync)> done
1
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 38.4996 s, 112 MB/s
real 0m39.142s
user 0m0.070s
sys 0m32.509s
2
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 40.3148 s, 107 MB/s
real 0m40.880s
user 0m0.067s
sys 0m33.893s
3
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 40.3395 s, 106 MB/s
real 0m40.918s
user 0m0.060s
sys 0m33.702s
4
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 40.1736 s, 107 MB/s
real 0m40.744s
user 0m0.084s
sys 0m33.725s
5
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 40.5157 s, 106 MB/s
real 0m41.038s
user 0m0.053s
sys 0m33.805s
INTEL SSD am SATA Port#1 ===> M2.SSD via USB3
==============================================
root@bananapir2:/mnt/sdb1# for i in `seq 1 5`
one> do
> echo ${i}> time $(dd if=/mnt/sda7/BIG_FILE_4G.bin of=./BIG_FILE_${i}_4G.bin bs=1M; sync)> done
1
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 35.9385 s, 120 MB/s
real 0m36.149s
user 0m0.042s
sys 0m30.631s
2
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 35.9064 s, 120 MB/s
real 0m36.103s
user 0m0.048s
sys 0m30.693s
3
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 36.4359 s, 118 MB/s
real 0m36.729s
user 0m0.045s
sys 0m31.256s
4
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 36.2919 s, 118 MB/s
real 0m36.570s
user 0m0.025s
sys 0m31.105s
5
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 36.2086 s, 119 MB/s
real 0m36.459s
user 0m0.044s
sys 0m31.011s
Von der Intel-SSD zur M2.SSD am USB3.1 Adapter habe ich
zwischen 106-112 MB/Sek. in der umgekehrten Richtung sind
es 118-120MB/Sek.
Gestern habe ich ja aus dem RAM (/dev/shm) nur 512MB große
Files auf die Intel SSD, siehe weiter oben in Thred, geschrieben.
Musst aufpassen: du misst ja Read+Write zusammen.
Ich würde empfehlen if=/dev/zero of=dein_file für nur write-speed
Und if=dein_file of=/dev/null für nur read-speed
@Mutluit M.
Dass ist soweit korrekt, was Du schreibst!
Da man Daten aber aus dem Nichts herzaubern kann,
mit Ausnahme von /dev/zero, zu dem ich aber meine
Meinung schon früher kund getan habe, in Punkto
Performance-Messung, ist man daran interessiert, zu
sehen wiegroß der Durchsatz durch das System ist.
Man schreibt ja vom LAN auf Disk oder umgekehrt oder
zwischen zwei Speichermedien.
In dem von mir getesteten Fall sind ja verschiedene
Teile des SoC's eingebunden und die Beobachtung, dass
mindestens 100MB/Sek. an Durchsatz möglich sind ist
schon mal eine Hausnummer für so einen SBC wie den
BPi-R2.
Einzelne Messungen aus dem Speicher sind ja wegen der
begrenzten RAM-Größe schwierig und erfordern Kompromisse.
Für mich ist von Bedeutung zu sehen in wie weit sich der
R2 als Router und Private-NAS für OwnCloud Geschichten
einsetzen lässt.
Mit zwei SSD's dem SBC (BPi-R2) und NT liegt man unter
300€ und hat eine interessant HW als Bollwerk zwischen
der DSL FBox von AVM und seinem Home-LAN.
Das ist hauptsächlich mein Einsatzgebiet und aus der
Vielzahl von SBC's, die ich mittlerweile besitze ist der
R2 als HW unter 100€ echt unschlagbar. Da der neue Kernel
auch alle vier NIC's erkennt und einbindet ist es eine
wahre Freude dieses Teil zu konfigurieren und hoffentlich
auch einzusetzen.
Hoffe es finden sich noch einige interessierte User, die
den R2 erkunden und aus ihm herauskitzeln was möglich ist.
Darin bist Du ja auch involviert und ich hoffe Du hast noch
weitere Ideen und Einfälle.
Markus
Hi Markus,
Kennst du mein github-repo für den bpi-r2?
dort habe ich auch schon den 5.2 laufen und ein Großteil der
nicht-Mainline-Features (poweroff,hdmi,wifi).
macht aus meiner Sicht keinen Sinn,dass jeder bei 0 anfängt. Vielleicht
kannst du mir ja helfen :)
Gruß Frank
Hallo Frank,
direkt kenne ich Dein R2 Repo nicht, mag aber sein,
dass ich bei diversen Webrecherchen darüber gestolpert bin.
Es ist zwar immer aufwendig und mühselig alles neu zu recherchieren
und das OS zu kompilieren und zu konfigurieren, dass stimmt schon,
aber man bleibt auf dem Laufenden, was sich in der SBC Szene so tut
und man lernt dabei auch viel.
Für mich ist das wie ein Hobby, wobei ich durchaus breit bin meine
Ergebnisse zum R2 zu teilen, weshalb ich auch sie hier poste.
Für mich steht noch an die Boot-Skripte und Konfig-Files so zu
modifizieren, dass einerseits der Kernel im NAND Steht und das
/boot, /home, /var und /tmp Verzeichnis auf den sdaX-Partitionen
liegt.
In U-Boot kann man das mit env print und env set händich durchprobieren
ohne es permanent machen zu müssen.
Wenn alles dann so läuft wie gewünscht kann man die letzte Konfiguration
permanent sicher.
U-Boot> env help
env - environment handling commands
Usage:
env default [-f] -a - [forcibly] reset default environment
env default [-f] var [...] - [forcibly] reset variable(s) to their
default values
env delete [-f] var [...] - [forcibly] delete variable(s)
env edit name - edit environment variable
env exists name - tests for existence of variable
env export [-t | -b | -c] [-s size] addr [var ...] - export environment
env import [-d] [-t [-r] | -b | -c] addr [size] [var ...] - import
environment
env print [-a | name ...] - print environment
env run var [...] - run commands in an environment variable
env set [-f] name [arg ...]
Die Procedure mit
# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr
um das boot.scr aus dem boot.cmd zu erzeugen ist mir bekannt.
War mir noch nicht klar ist, die die Zeile
bootcmd=mmc dev 1;run scriptload;run scriptboot;setenv devnum 0;mmc dev
0;run scriptload;run scriptboot
modifiziert werden muss um nicht von mmc Subsystem sonder von SATA
Controller zu booten.
Muss das mmc durch sd oder was anderes ersetzt werden?
Meine U-Boot Settings, d.h. die permanenten Vars sehen wie folgt aus.
U-Boot> printenv
baudrate=115200
bootcmd=mmc dev 1;run scriptload;run scriptboot;setenv devnum 0;mmc dev
0;run scriptload;run scriptboot
bootdelay=3
bootm_size=0x10000000
devnum=1
fdt_addr_r=0x86000000
fdtaddr=0x86000000
fdtcontroladdr=fffd0580
fdtload=setenv loadaddr ${fdtaddr};setenv mmcfile ${mmcfdtfile};run
fileload
fileload=${mmctype}load mmc ${devnum}:${mmcpart} ${loadaddr} ${mmcfile}
initrdload=setenv loadaddr ${rdaddr};setenv mmcfile ${mmcinitrdfile};run
fileload
kernel_addr_r=0x82000000
kernload=setenv loadaddr ${kernel_addr_r};setenv mmcfile
${mmckernfile};run fileload
loadaddr=0x82000000
mmcfdtfile=boot/dtb/mt7623n-bananapi-bpi-r2.dtb
mmcinitrdfile= boot/uInitrd
mmckernfile=boot/zImage
mmcpart=1
mmcscriptfile=boot/boot.scr
mmctype=ext4
ramdisk_addr_r=0x86080000
rdaddr=0x86080000
scriptaddr=0x85F80000
scriptboot=echo Running ${mmcscriptfile} from: mmc ${devnum}:${mmcpart}
using ${mmcscriptfile};source ${scriptaddr};
scriptload=setenv loadaddr ${scriptaddr};setenv mmcfile
${mmcscriptfile};run fileload
Falls Du was in Peto bezüglich der Start-Einstellungen von U-Boothast,
wäre ich dafür dankbar.
Ansonsten muss ich mich noch mit U-Boot geschäftigen - will ja was
lernen ;-)
Markus
Richtig, mit den vordefinierten umgebungsvariablen kann man relativ
leicht mehrere Kernel parallel probieren (auswahl aus dateilisting oder
selbst einen mebüeintrag definieren). Auch tftp-boot und dto (device
tree overlays) funktionieren :)
wegen kernel...klar kann man sich selbst durchwühlen,aber ich bräuchte
halt einige Leute zum testen und ggf. zum Portieren. Besonders der
wifi-Treiber ist ziemlich schlecht programmiert (u.a. wmt-tools
benötigt). Besonders die netzwerktests sind sehr aufwendig,wenn man
dafür extra mehrere clients konfigurieren muss. Aktuell geht nur 1gbit/s
durch,selbst wenn die 2.gmac aktiv ist (die erste auf port 6 des
switch-chips unterstützt angeblich trgmii=2,5gbit)
@All ich habe immerhin herausgefunden, dass ich mit dem
bestehenden uboot von armbien kein boot von SATA Devices
machen kann, weil das SATA Subsystem darin fehlt.
Ich bin gerade mit dem Bau eines neuen Uboot zugange,
kämpfe aber noch mit Python2 Abhängigkeiten auf meinem
Python3 System.
Es gibt bei mir nur eine
find /usr -name \*ython.h
/usr/include/python3.7m/Python.h
in dem o.g Verzeichnis.
In der u.g. setup.py
>cat scripts/dtc/pylibfdt/setup.py
#!/usr/bin/env python2
Wird der Python2 Interpreter aufgerufen.
Und SWIG erzeugt ein libfdt_wrap.c mit dem
# include <Python.h>
das immer wieder neu generiert wird.
Beim ./build.sh Aufruf bzw. bei make erscheinet dann
der u.g. Fehler.
>make ARCH=arm CROSS_COMPILE=arm-suse-linux-gnueabi-
CHK include/config/uboot.release
CHK include/generated/version_autogenerated.h
UPD include/generated/version_autogenerated.h
CHK include/generated/timestamp_autogenerated.h
UPD include/generated/timestamp_autogenerated.h
CC lib/asm-offsets.s
CHK include/generated/generic-asm-offsets.h
CHK include/generated/asm-offsets.h
PYMOD scripts/dtc/pylibfdt/_libfdt.so
scripts/dtc/pylibfdt/libfdt_wrap.c:149:11: fatal error: Python.h: Datei
oder Verzeichnis nicht gefunden
149 | # include <Python.h>
| ^~~~~~~~~~
compilation terminated.
Hat jemend eine Idee woran das liegt und wie ich meine
Python-Umgebung anpassen kann.
Ein gezieltes setzen des Includpfades von
# include <Python.h>
auf
# include <python3.7m/Python.h>
im libfdt_wrap.c scheitert leider wegen der auto-gen Erzeugung
der Wrapper-C_Files vai SWIG.
Danke für hilfreiche Hinweise.
Markus
Betreffend uboot:
weder das offizielle (2014er) noch mainline/mein Uboot verfügt über den
sata-treiber. Somit muss uboot und der kernel auf sd/emmc liegen. Das
rootfs kann dann auf der ssd liegen,wenn der sata-treiber builtin sind
(für Module muss bereits FS-Zugriff bestehen.
Der R2 verfügt übrigens über einen pcie-Anschluss,es ist kein m2sata.
Hast du es mal mit meinem Repo probiert? Dort existiert eine
build.sh,worüber du das menuconfig aufrufen kannst. Musst nur ggf den
crosscompiler ändern
Hallo Frank,
genau bei diesem Build häge ich.
Habe dort den SATA Treiber via menuconfig inkludiert.
Hast Du möglicherweise eine .config, auf der ich aufbauen
kann, ohne alle Optionen der GUI durchforsten zu müssen.
Markus
Frank,
damit willst Du mir schonend beibringen, dass ich
erst den Kernel von der SD oder eMMC laden muss um
dann erst auf ein SATA Device wie /dev/sdx zugreifen
zu können - richtig?
Markus
Korrekt,ich hane im bpi-forum bereits vor einiger zeit nach einem
sata-treiber angefragt,aber das ist sehr zäh,deswegen habe ich ja mein
eigenes repo angefangen
Zumindest das hdmi wird wohl endlich un mainline gefixt
Die "Neue Welle" bei SBCs wird mit sich bringen dass M.2 (NVMe) den SATA
ablösen wird. Denn, macht ja viel Sinn: so ein Kleincomputer ist von
Hause aus langsamer als ein Desktop oder Laptop; da braucht es
wenigestens schnelle SSD-Anbindung über die neuen schnellen Interfaces
wie M.2/PCIe/USB-C etc. SATA kann da nicht mehr mithalten.
Doch,seit 2018-11 ist der bpi-r2 grundsätzlich im upstream
uboot...vorher gab es nur die 2014er Version die sich mit aktuellen
compilern nicht mehr kompilieren lässt bzw nicht startet. Außerdem geht
mit dem neuen uboot u.a. dt-overlay.
Noch eine Frage zu uboot!
Wenn der aktuelle Linux Kernel den SATA Kontroller vom
BPi-R2 ansprechen kann, warum ist es dann so schwierig
dies aus uboot zu bewerkstelligen?
Ist uboot wegen seiner Kompaktheit als Loader auf andere
Treiber Architekturen angewiesen und kann deshalb bestehende
Module oder ihren Code aus Linux nicht verwenden?
Markus
Frank,
Bekomme auf meinem NB den im Anhang gezeigten uboot build error bei
./build config
aus Deinem Repo.
Hast Du auf die Schnelle eine Idee was mir noch fehlt um
Dein uboot aus dem Repo zu bauen.
Habe jetzt nur Zugriff auf mein NB und nicht meinen Desktop PC.
Markus
Nachtrag,
habe dies hierzu gefunden:
"To answer a more generic case, this error is noticed when you pick a
function name which is already used in some built in library. For e.g.,
select.
A simple method to know about it is while compiling the file, the
compiler will indicate the previous declaration."
Ich müsste das Repo für arm-linux-gnueabihf-
finden, das sich unter Suse Tumbleweed installieren
lässt.
Werde mal schauen.
Wobei ich erst mal einen Vergleich mit meinem Desktop
machen werde.
Markus
Es sind soweit ich sehe alles "conflicting types"...es gibt also 2
unterschiedliche Deklarationen (vermutlich uboot-header und includes des
compilers).
/usr/local/include/sys/types.h
Sieht stark danach aus,dass die x64-headers statt des crosscompilers
verwendet werden...evtl.musst du einen anderen include path setzen
(/usr/share/...)
arm-linux-gnueabihf- ist gcc von linaro (standard auf debian-systemen)
Mit frameworks meine ich die generischen Funktionen in linux/uboot,die
teils unterschiedlich sind
Der arm-suse-linux-gnueabi-gcc liefert als Such-Pfade
>arm-suse-linux-gnueabi-gcc -print-search-dirs | grep libraries | sed 's/:/\n/g'
die folgenden Verzeichnisse:
libraries
=/usr/lib64/gcc/arm-suse-linux-gnueabi/9/
/usr/lib64/gcc/arm-suse-linux-gnueabi/9/../../../../arm-suse-linux-gnuea
bi/lib/arm-suse-linux-gnueabi/9/
/usr/lib64/gcc/arm-suse-linux-gnueabi/9/../../../../arm-suse-linux-gnuea
bi/lib/
/usr/arm-suse-linux-gnueabi/lib/arm-suse-linux-gnueabi/9/
/usr/arm-suse-linux-gnueabi/lib/
/usr/arm-suse-linux-gnueabi/usr/lib/arm-suse-linux-gnueabi/9/
/usr/arm-suse-linux-gnueabi/usr/lib/
Markus
Ich hänge mal meine u-boot.cfg an.
Vielleicht könnt Ihr mal drüber sehen.
Für das Schreiben von u-boot auf die SD Karte
via dd habe ich folgenden Beitrag gefunden.
uboot
dd iflag=dsync oflag=dsync if=u-boot.bin of=/dev/sde bs=512 seek=63
Please notes:
1) The partition table is at SDcard offset 0 (seek 0), then you have to
run:
fdisk /dev/sde
and create paratiions that does not overlapped with blocks ocppuied by
kernel
or trust software.
2) add the "dsync" option in dd command to gaurantee every written data
is
immediately flushed into SD card
So whatever you are doing for u-boot is correct, you need to use dd
command for that.
sudo dd if=u-boot.bin of=/dev/sdb bs=512 seek=2
While partitioning the sd card,
Make sure that you are keeping enough room for
u-boot image. So start your 1st bootable partition at let's say 1 MB
offset.
Markus
was mich wundert ist, dass python3 meiner Meinung nach nichts mit dem
include-Pfad des Crosscompilers zu tun haben dürfte...imho darf bei
crosscompile /usr/src/linux nicht verwendet werden, bzw. nur als letzte
option
die build.sh enthält eine install option ;)
damit wird die uboot.bin an die Position geschrieben, wie sie für die
debian/ubuntu-images passt.
Gruß Frank
Bei Meinem OS (SUSE) existiert ein
/usr/include Verzeichnis für alle
Dev-Packete und /usr/src/include
sind die Includes für den Linux-Kernel
Build. Hat mit CROSS_COMPILE meiner
Ansicht nach nichts zu tun.
Markus
Ich bin übrigns gerade mit QEMU-ARM zugange
um den u-boot in der Emulation zu starten und
damit zu spielen.
Leider habe ich noch keine BPi-R2 Machine gefunden.
Aber vexpress-a9 soll auch funktionieren.
qemu-system-arm -machine vexpress-a9 -cpu cortex-a9 -m 128M -dtb
./linux-5.1.5/arch/arm/boot/dts/mt7623n-bananapi-bpi-r2.dtb -kernel
u-boot
In Anhang sind die möglichen machine und cpu Optionen gelistet.
Markus
mit qemu habe ich diesbezüglich keine Ahnung. die Position von uboot
wird mit dem preloader und den nachfolgenden headern (BRLYT)
festgelegt... ich nehme an, in qemu übergibst du den uboot direkt, oder
ein komplettes Datenträger-Image? letztendlich muss qemu ein armv7 mit
hardfloat emulieren, aber inwieweit das in der frühen Bootphase möglich
ist weis ich nicht
ansonsten, wenn Änderungen an meinen Scripten gewünscht sind: einfach
Bescheid sagen, dann schauen wir zusammen, wie wir das sauber
reinbekommen ohne die bisherige Funktionalität zu stören
@All,
nach langem Rumprobieren ist mir die Anbindung der SSD
und das Konfigurieren von U-Boot gelungen, so daß ich
mit der SSD arbeiten kann.
root@bananapir2:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 969M 0 969M 0% /dev
tmpfs 202M 6.5M 195M 4% /run
/dev/sda6 32G 859M 29G 3% /
tmpfs 1006M 0 1006M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1006M 0 1006M 0% /sys/fs/cgroup
/dev/sda1 485M 147M 309M 33% /boot
/dev/sda5 16G 45M 15G 1% /tmp
/dev/sda3 16G 177M 15G 2% /var
tmpfs 202M 0 202M 0% /run/user/0
root@bananapir2:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs
(rw,nosuid,relatime,size=992212k,nr_inodes=168684,mode=755)
devpts on /dev/pts type devpts
(rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs
(rw,nosuid,noexec,relatime,size=205876k,mode=755)
/dev/sda6 on / type ext4 (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs
(rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/unified type cgroup2
(rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup
(rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup
(rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup
(rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/freezer type cgroup
(rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup
(rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/cpuset type cgroup
(rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/perf_event type cgroup
(rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup
(rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/rdma type cgroup
(rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/pids type cgroup
(rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/memory type cgroup
(rw,nosuid,nodev,noexec,relatime,memory)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/sda1 on /boot type ext4 (rw,noatime,nodiratime,commit=600)
/dev/sda5 on /tmp type ext4 (rw,noatime,nodiratime,commit=600)
/dev/sda3 on /var type ext4 (rw,noatime,nodiratime,commit=600)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)
tmpfs on /run/user/0 type tmpfs
(rw,nosuid,nodev,relatime,size=205872k,mode=700)
Netzwerk funktioniert soweit auch.
root@bananapir2:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state
UP group default qlen 1000
link/ether 6e:8f:b9:10:ab:d7 brd ff:ff:ff:ff:ff:ff
inet6 XXXX::XXXX:XXXX:XXXX:XXXX/64 scope link
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UP group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet XX.XX.XX.XX/24 brd XX.XX.XX.XX scope global dynamic br0
valid_lft 3069144644sec preferred_lft 3069144644sec
inet6 XXXX::XXXX:XXXX:XXXX:XXXX/64 scope link
valid_lft forever preferred_lft forever
4: wan@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
master br0 state UP group default qlen 1000
link/ether 6e:8f:b9:10:ab:d7 brd ff:ff:ff:ff:ff:ff
5: lan0@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
master br0 state LOWERLAYERDOWN group default qlen 1000
link/ether 6e:8f:b9:10:ab:d7 brd ff:ff:ff:ff:ff:ff
6: lan1@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
master br0 state LOWERLAYERDOWN group default qlen 1000
link/ether 6e:8f:b9:10:ab:d7 brd ff:ff:ff:ff:ff:ff
7: lan2@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
master br0 state LOWERLAYERDOWN group default qlen 1000
link/ether 6e:8f:b9:10:ab:d7 brd ff:ff:ff:ff:ff:ff
8: lan3@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
master br0 state LOWERLAYERDOWN group default qlen 1000
link/ether 6e:8f:b9:10:ab:d7 brd ff:ff:ff:ff:ff:ff
Jetzt muss ich noch die Transferraten und die WAN/-Local-LAN
konfiguration meistern, um den R2 an die FB anzubinden.
Markus
Willst du den r2 als router oder als reinen lan-client nutzen?
bei ersterem musst nur wan aus der bridge nehmen und entsprechend als
wan nutzen (anderes subnet nutzen bzw wie ich ppp drüber laufen lassen).
Was mich wundert ist dass du dich gefreut hast,dass die lan-ports
einzeln greifbar sind,sie dann aber mit der br0 wieder zusammen
bridgest.
Ssd läuft übrigends unter meinem kernel bereits schon unter 4.14 (habe
auch eine dran hängen,wo alles außer das grundsystem drauf liegt...inkl.
var und home /tmp ist eine ramdisk)
wie sieht es bei dir aus, wenn du den Bandwith-Parameter weglässt? imho
verfälscht er die Werte (erzeugt entweder zu wenig Pakete oder zuviele
=> pauseframes)
der Test oben mit den 2.5GBit ist afaik nur der IP-Stack (SW-limitiert
auf TRGMII=2.5Gbit/s), da geht es nicht über die Hardware. Wenn ich
Pakete über die Hardware schicke, habe ich maximal 1Gbit/s (mehrere
1G-fähige Clients direkt an den LAN-Ports).
auch mit der 2.gmac und der Nutzung des WAN-POrts weiterhin nur 1GBit/s
so wie es aussieht, existiert nur ein 1G-Wiring zwischen SOC und Switch
(technische Doku zum SOC)....ist aber unbestätigt....offizielle Aussagen
sind da schwer zu bekommen.
@wie kann es der reine SW-Stack sein, wenn ich am
NIC0 und NIC 2 ein Cat.6 Kabel habe.
Wenn dem so wäre, müsste ich selbe Ergebnisse bekommen,
wenn ich das Kabel entferen, nur dann geht der NIC
in den Zustand NO-CARRIER.
Ohne Kabel:
root@bananapir2:/dev/shm# iperf3 -c 192.200.0.1 -B 192.200.0.2 --port
5001
iperf3: error - unable to connect to server: Cannot assign requested
address
Mit Kabel:
root@bananapir2:/dev/shm# iperf3 -c 192.200.0.1 -B 192.200.0.2 --port
5001
Accepted connection from 192.200.0.2, port 60791
Connecting to host 192.200.0.1, port 5001
[ 5] local 192.200.0.1 port 5001 connected to 192.200.0.2 port 34565
[ 4] local 192.200.0.2 port 34565 connected to 192.200.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 320 MBytes 2.69 Gbits/sec
...
hast du die Adressen statisch festgelegt oder via dhcp? es kann durchaus
sein, dass die IP nur pingbar ist, wenn der port up ist.
Wie gesagt, ich habe (über die gmac0=trgmii) nicht mehr als 1Gbit/s
bekommen, wenn der traffic von den clients kommt bzw. zu diesen hin
(von/zu SOC), eine reine client-client-verbindung habe ich nicht
getestet, diese wäre bei 2 Clients aber maximal 1Gbit/s und afaik wird
der traffic immer zum SOC geschickt (deswegen geht wohl tcpdump nicht
richtig auf den DSA-Ports)
@Frank,
IP's wurden händisch mittels ifconfig lan0 IP-A up
und ifconfig lan0 IP-B up eingerichtet.
Wird die Messung von iperf3 nicht bidirektional,
also gleichzeitig vom und zum Server/Client betrieben.
Markus
Dann wird die Adresse scheinbar deaktiviert,wenn das interface down
ist.Macht auch Sinn....
Iperf ist normalerweise nur eine Richtung (client zum server
afaik),lässt sich mit -R umdrehen,damit werden dann in 2 Durchgängen
beide Richtungen getestet
@Frank,
dann bleibt nur noch die Frage offen, wie der
2.48 Gbits/sec Wert zu deuten ist.
Und noch was anderes, wie kann ich ins eMMC den
U-Boot übertragen.
Reicht ein dd if=SD-Card of=eMMC bs=512 seek=2
mit eMMC = /dev/mmcblk0.
Für die SSD wird
dd if=u-boot.bin of=/dev/sdX bs=512 seek=2
empfohlen, wobei mir nicht klar ist, ob ich
u-boot mit (2731364)
u-boot.bin mit (296196)
u-boot-mtk.bin mit (296708)
nehmen muss.
Das sind die Files, die ich beim Kompilieren Deines
U-Boot Reposytories bekommen habe.
users 2731364 3. Jun 09:24 u-boot
users 296196 3. Jun 09:24 u-boot-dtb.bin
users 296196 3. Jun 09:24 u-boot.bin
users 130229 3. Jun 09:24 u-boot.sym
users 64377 3. Jun 09:24 System.map
users 7904 3. Jun 09:24 u-boot.dtb
users 296708 3. Jun 09:24 u-boot-mtk.bin
Abhängig wie man den eMMC partitioniert
fängt die Partition bei 64'sten oder 2048'sten
512-Block an. Aber u-boot mit der grösten
Filegröße ist größer als 1MB (2731364)
Oder ist u-boot.bin eine komprimierte Version?
Aber Faktor 7 wäre doch zemlich viel an Kompression,
weshalb ich es nicht annehme.
Markus
Wie ich gerad sehe ist das u-boot Fiel eine ELF Binary.
HAtte nicht gedacht, das zum Bootloader-Zeitpunkt schon
ELF Binary ladbar sind. Aber da bin ich nicht so firm drin.
>readelf -S u-boot
There are 29 section headers, starting at offset 0x29a8dc:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg
Lk Inf Al
[ 0] NULL 00000000 000000 000000 00
0 0 0
[ 1] .text PROGBITS 81e00000 010000 0003a8 00 AX
0 0 32
[ 2] .text_rest PROGBITS 81e003c0 0103c0 0275f4 00 AX
0 0 32
[ 3] .rodata PROGBITS 81e279b8 0379b8 011e0b 00 A
0 0 8
[ 4] .hash HASH 81e397c4 0497c4 000018 04 A
12 0 4
[ 5] .data PROGBITS 81e397dc 0497dc 0026e8 00 WA
0 0 4
[ 6] .got.plt PROGBITS 81e3bec4 04bec4 00000c 04 WA
0 0 4
[ 7] .u_boot_list PROGBITS 81e3bed0 04bed0 00123c 00 WA
0 0 4
[ 8] .rel.dyn REL 81e3d10c 04d10c 009518 08 A
12 0 4
[ 9] .bss_start PROGBITS 81e3d10c 056708 000000 00 W
0 0 1
[10] .bss NOBITS 81e3d10c 000000 0196a4 00 WA
0 0 64
[11] .bss_end PROGBITS 81e567b0 056708 000000 00 W
0 0 1
[12] .dynsym DYNSYM 81e46624 056624 000030 10 A
13 3 4
[13] .dynstr STRTAB 81e46654 056654 000001 00 A
0 0 1
[14] .dynamic DYNAMIC 81e46658 056658 000098 08 WA
13 0 4
[15] .gnu.hash GNU_HASH 81e466f0 0566f0 000018 04 A
12 0 4
[16] .ARM.attributes ARM_ATTRIBUTES 00000000 056708 00002b 00
0 0 1
[17] .comment PROGBITS 00000000 056733 000040 01 MS
0 0 1
[18] .debug_line PROGBITS 00000000 056773 02b416 00
0 0 1
[19] .debug_info PROGBITS 00000000 081b89 131e12 00
0 0 1
[20] .debug_abbrev PROGBITS 00000000 1b399b 02902f 00
0 0 1
[21] .debug_aranges PROGBITS 00000000 1dc9d0 0048e8 00
0 0 8
[22] .debug_str PROGBITS 00000000 1e12b8 01758c 01 MS
0 0 1
[23] .debug_frame PROGBITS 00000000 1f8844 00cfec 00
0 0 4
[24] .debug_loc PROGBITS 00000000 205830 06ad44 00
0 0 1
[25] .debug_ranges PROGBITS 00000000 270578 0094b0 00
0 0 8
[26] .symtab SYMTAB 00000000 279a28 017010 10
27 4825 4
[27] .strtab STRTAB 00000000 290a38 009d8f 00
0 0 1
[28] .shstrtab STRTAB 00000000 29a7c7 000114 00
0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
y (purecode), p (processor specific)
Ich bin mir sicher dass bei den 2,5g nicht die gmac/switch involviert
ist...
Du musst die uboot.bin nehmen beim r2. als device /dev/mmcblkx ohne
partition/bootx. Offset ist der gleiche wie bei sdcard
https://www.fw-web.de/dokuwiki/doku.php?id=bpi-r2:storage
Habe nur grade gesehen,dass das Beispiel noch den alten uboot nimmt.
So machts die build.sh für die SD-Karte:
https://github.com/frank-w/u-boot/blob/2019-01-bpi-r2/build.sh#L38
Musst im laufenden system also nur dev setzen auf /dev/mmcblkx (wenn 0
die sdkarte ist dann 1,sonst 0) und kannst die zeile genauso nutzen. Bei
emmc muss der preloader mindestens in boot0 (evtl.auch in mmcblkx
direkt)
Zur Info, falls es jemanden interessiert
und er auch mit einem R2 liebäugelt.
Kämpfe noch immer damit U-Boot auf die EMMC zu installieren.
Irgendwie klappt es noch nicht
@Frank
Habe die u.g. Files
BPI-R2-HEAD1-512b.img
BPI-R2-HEAD440-0k.img
BPI-R2-EMMC-boot0-DDR1600-0k-0905.img
mit dd in das EMMC geschrieben nach mmcblk0
mit entsprechendem seek/skip offset wie in Deiner
R2 Wiki beschrieben. SD/EMMC Schalter am R2
in beiden Stellungen ausprobiert, leider ohne
Erfolg. Werde weitere Versuche starten und mich mit
U-Boot mehr auseinander setzen, um den Mechanismus
besser zu verstehen.
Dank Deiner Wiki konnte ich schon Einiges lernen.
Danke dafür.
Habe zwischenzeitlich eine weitere Disk am SATA
Anschluß angeschlossen und zwischen beiden Disks
10GB hin und her transferiert.
Hat soweit alles geklappt und der Transfer lag
immer über 90GB/Sek. - siehe Anhang.
Als Disks ist eine SSD (SSDSC2KW24 von Intel)
und eine herkömmliche 2,5" Disk von HST (HTS541010B7)
in Betrieb.
Man sieht auch, dass der SoC meinen urandom Datenstrom
mit 33MB/Sek erzeugt, um das Versuchsfile zu befüllen.
Markus
@Frank,
echo 0 > /sys/block/mmcblk1boot0/force_ro
muss beim R2
echo 0 > /sys/block/mmcblk0boot0/force_ro
heisen, wenn EMMC benützt werden soll.
gunzip -c BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz | sudo dd
of=/dev/mmcblk1boot0 bs=1024 seek=0
entsprechend auch
gunzip -c BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz | sudo dd
of=/dev/mmcblk0boot0 bs=1024 seek=0
Habe ich beides gemacht, allerdings verwende ich Deinen
u-boot.bin, die ich aus dem Reposirory gebaut habe.
Was mir gerade aufgefallen ist, ist dass in
./configs/mt7623n_bpir2_defconfig
an der Stelle CONFIG_DEFAULT_ENV_FILE="uEnv.txt" auf
uEnv.txt und nicht wie bei mir auf armbienEnv.txt verwiesen
wird. Möglicherweise liegt es daran, werde es anpassen.
Dachte aber, dass u-boot würde trotzdem was rausgeben, was
aber leider nicht der Falls ist. Es tut sich einfach nichts.
Danke trotzdem für den Hinweis.
Markus
@Frank,
irgendwass muss ich noch falsch gemacht haben,
denn als ich jetzt erneut
echo 0 > /sys/block/mmcblk0boot0/force_ro
gunzip -c BPI-R2-EMMC-boot0-DDR1600-0k-0905.img.gz | sudo dd
of=/dev/mmcblk0boot0 bs=1024 seek=0
echo 1 > /sys/block/mmcblk0boot0/force_ro
durchgeführt habe, kamm sofort die u.g. Ausgabe.
*** U-Boot Boot Menu ***
1. Enter kernel-name to boot from SD/EMMC.
2. Boot kernel from TFTP.
3. Boot from SD/EMMC.
4. Boot from SD/EMMC 4.14.
5. Boot from SD/EMMC 4.19 (fdt/dto).
U-Boot console
Press UP/DOWN to move or Press 1~9,a~f to choose, ENTER to select
Bin wieder einen Schritt weiter.
Danke und bis zum Nächsten Mal.
Markus
Es muss an dem uEnv.txt gelegen haben, denn jetzt steht dort
bootenv=uEnv.txt.
Loading Environment from MMC... Boot From Emmc(id:0)
*** Warning - bad CRC, using default environment
Wie wird die CRC ermittelt und wie behebe ich diesen Fehler.
Ich möchte von uEnv.txt im EMMC das Env setzen und nicht die
default Werte aus dem u-boot.bin verwenden.
Wurde irgendwas überschrieben, da gab es so einen Hinweis,
wegen größerer Config-Strukturen bei den neueren uboot's.
Markus
@Frank,
sehe gerade, dass bei Deinen default Einstellungen für
u-boot die u.g. Module fehlen.
Wie bekomme ich sie hinein kompiliert?
ext4load- load binary file from a Ext4 filesystem
ext4ls - list files in a directory (default /)
ext4size- determine a file's size
ext4write- create a file in the root directory
Diese sind Bestandteil meines u-boots, der auf der
SD Karte enthalten ist und zum Armbien-Linux gehört.
Oder wie kann ich den ursprünglichen u-boot von der
SD Karte extrahieren.
Markus
./build.sh config
Ruft die konfiguration (menuconfig) auf.
die biry runterkratzen kannst mit dd...musst selbe offsets nehmen wie
beim schreiben und zusätzlich count (z.b. 1M),da er sonst die ganze
sd/emmc ins image schreibt ab dem Startpunkt.
Ob mmcblk0 oder 1 hngt vom kernel des laufenden systems ab. Die
offiziellen images haben die sd-karte als 0 und das habe ich in meinen
kernels auch so gemacht (mmc-swap ggü. Mainline...siehe einer der ersten
commits jedes branches in meinem repo).
Crc war noch...wenn du noch kein environment gespeichert (saveenv) hast
oder von einer anderen uboot-version,ist der fehler normal und kann
ignoriert werden. Es sind die ersten 4 bytes am offset des environments
(ist in der boardconfig definiert...bei meinem uboot 1m bzw. 0x10000)
bootenv=uEnv.txt
Steht so in meiner uenv.txt (buildtin-environment) und ist der name der
datei auf der bootpartition (p1) aus der das dynamische environment
geladen wird (damit uboot nicht für jede Env-änderung neu geflasht
werden muss)
@All,
@Frank,
kann mir jemand den folgenden Zusammenhang erklären.
Unter Armbien-Linux alias Ubuntu 18.04.2 LTS.
wird ein Textfile "boot.cmd" mit u-boot Instruktionen
in der Art, siehe Anhang, benötigt.
Dieses File wird dann mit dem mkimage Kommande
mkimage -C none -A arm -T script -d boot.cmd boot.scr
in ein boot.scr, anscheinend ein Pseudocode-Skript,
übersetzt.
Zudem gibt es da ein "armbianEnv.txt" File, s.u.
root@bananapir2:/boot# cat armbianEnv.txt
verbosity=1
rootdev=UUID=f3e8ab87-1e59-4e51-a6cb-ae742539564e
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
Dass auf das Root-Device verweist. Dieses File wird
in den Anweisungen aus dem "boot.cmd" in u-boot beim
Bootvorgang geladen, mit
load ${devtype} ${devnum} ${kernel_addr_r} ${prefix}armbianEnv.txt
Der Name "armbianEnv.txt" ist willkürlich und könnte auch "uEnv.txt"
heisen wie bei anderen Linux-Konfigurationen.
Auf der anderen Seite gibt es Systeme, wie z.B. in Deinem Repo
Frank, bei denen u-boot die schon erwähnte "uEnv.txt" Datei
läd, siehe Anhang und sonst nichts.
Dieser Name ist bereits bei der Konfiguration von u-boot vor
dem Kompilieren in der .config hart festgelegt.
Was mir nun nicht klar ist, wie der Bootvorgang verläuft und wie
u-boot unterscheidet ob es die boot.scr oder die uEnv.txt
zu laden hat. Wo ist da der Schalter?
Habe ich zwei so unterschiedliche u-boot Binaries, die einen
so unterschiedlichen Lade-Mechanismus haben oder gibt es da
eine Reihenfolge in der verschiedene Files gesucht werden und
je nach Treffer der eine oder der andere Weg beschritten wird.
Ich hoffe ich konnte mich verständlich ausdrücken
und danke schon mal für eine Erklärung.
Markus
PS.: was bedeutet diese Zeile:
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
@All,
@Frank,
noch eine Verständnisfrage ;-)
mein u-boot Ladevorgang bleibt stehen, siehe Anhang.
Bedeutet dieser Output,
[BLDR] jump to 0x81E00000
[BLDR] <0x81E00000>=0xEA0000B8
[BLDR] <0x81E00004>=0xE59FF014
dass entsprechend der Zeilen
[PART] blksz: 512B
[PART] [0x0000000000000000-0x000000000003FFFF] "PRELOADER" (512 blocks)
[PART] [0x0000000000000000-0x000000000003FFFF] "MBR" (512 blocks)
[PART] [0x0000000000040000-0x00000000000BFFFF] "UBOOT" (1024 blocks)
und
[PART] load "UBOOT" from 0x0000000000050000 (dev) to 0x81E00000 (mem)
[SUCCESS]
mein u-boot Binary nicht richtig geladen/gelesen werden kann, weil
es ja von 0x50000 nach 0x81E00000 geladen wird und das "UBOOT"
Binary in EMMC von 0x40000 bis 0xBFFFF steht.
Auf der anderes Seite wird jedoch [SUCCESS] ausgegeben.
Bezieht sich das nur auf den Ladevorgang aber nicht
darauf, dass ein sinnvolles Programm jetzt im Speicher
ab Adresse 0x81E00000 steht.
Danke für die Erleuchtung!
Markus
Bin immer noch am Straucheln!
Den Unterschied zwischen dem uboot Ladevorgang von
EMMC und SD habe ich mal angehängt, leider sehe
ich noch nicht, warum es bei der EMMC nicht klappt.
Eine Idee?
In beiden Fällen wird bis
bei EMMC
[BLDR] jump to 0x81E00000
[BLDR] <0x81E00000>=0xEA0000B8
[BLDR] <0x81E00004>=0xE59FF014
bei SD
[BLDR] jump to 0x81E00000
[BLDR] <0x81E00000>=0xEA0000B8
[BLDR] <0x81E00004>=0xE59FF014
ein identischer Output gezeigt,
aber nur bei dem Boot von der SD-Karte
Kommt die Zeile:
U-Boot 2019.01-armbian (Feb 11 2019 - 08:04:39 +0100)
CPU: MediaTek MT7623 E3
DRAM: 2 GiB
MMC: mmc@11230000: 0, mmc@11240000: 1
...
Kann es sein, dass die weitere Ausgabe aufs HDMI Interface
geht und ich einen Monitor anschließen muss?
Markus
@Markus, die Antwort könnte auf der folgenden Seite stehen:
http://forum.banana-pi.org/t/cant-boot-from-emmc/3826/3
D.h. "Partition config" ändern mit
emmc pconf 0x48
von der u-boot console aus.
Zuvor anzeigen mit
emmc ecsd
@Mutluit M.
Danke für den Hinweis. Habe auch diesen Thread gefunden.
Kann aber z.Z. diese Vorgehensweise nicht testen, da der
alte Armbien u-boot auf der SD-Karte keine emmc Option
einkompiliert hat, nur mmc.
Aber ich hatte den neuen u-boot beteits mal beim BiP-R2>
u-boot prompt, dann habe ich aber an der uEnv.txt gedreht
und seit dem komme ich zu diesem Punkt nicht mehr.
LG
Markus
Markus W. schrieb:> @Mutluit M.>> Danke für den Hinweis. Habe auch diesen Thread gefunden.> Kann aber z.Z. diese Vorgehensweise nicht testen, da der> alte Armbien u-boot auf der SD-Karte keine emmc Option> einkompiliert hat, nur mmc.>> Aber ich hatte den neuen u-boot beteits mal beim BiP-R2>> u-boot prompt, dann habe ich aber an der uEnv.txt gedreht> und seit dem komme ich zu diesem Punkt nicht mehr.
Schau auch hier rein, ist neueren Datums:
http://forum.banana-pi.org/t/bananapi-bpi-r2-openwrt18-06-demo-image-and-source-code-release-2019-03-06/8562/
Am besten eine fertige Img für MMC mal ausprobieren.
Die meisten benutzen ja u-boot. Kannst dann den inspieren/testen, dessen
configs kopieren und die cfgs dann für die eigene Img modifizieren...
Btw, du schreibst oft Armbien, der heisst aber Armbian :-)
Ahja, da schreibst dass der u-boot von Armbian "emmc" nicht aktiviert
hat:
Vlt. ist notwendig dass du deine eigene u-boot draufkopieren musst.
Ich meine, vlt. benötigen aktuelle Kernel-Versionen auch ein aktuelles
u-boot.
Könnte sein.
@Mutluit M.,
ich habe es jetzt wieder damit zu Laufen gebracht.
Habe erst ab Bkock 320 512kB 0-Daten auf den EMMC
geschrieben und dann erneut u-boot.bin (gleiches
Binary wie schon verwendet und selber kompiliert)
via dd ins EMMC geschrieben.
dd if=/dev/zero of=/dev/mmcblk0 bs=1k seek=320 count=512; sync
dd if=./u-boot.bin of=/dev/mmcblk0 bs=1k seek=320; sync
MMC: no card present
Boot from eMMC
** Unrecognized filesystem type **
fatload (uEnv.txt) failed
## Warning: Input data exceeds 1048576 bytes - truncated
## Info: input data size = 1048578 = 0x100002
bootargs=board=bpi-r2 console=earlyprintk console=tty1 fbcon=map:0
console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwai7
** Unrecognized filesystem type **
Wrong Image Format for bootm command
ERROR: can't get kernel image!
BPI-R2>
Jetzt muss ich das U-Boot Environment entsprechend einrichten.
Markus
Übrigens zeigt er auch bei der neuen U-Boot Version:
BPI-R2> emmc ecsd
Unknown command 'emmc' - try 'help'
BPI-R2> version
U-Boot 2019.01- (Jun 03 2019 - 09:23:51 +0200)
arm-suse-linux-gnueabi-gcc (SUSE Linux) 7.4.1 20190424 [gcc-7-branch
revision 270538]
GNU ld (GNU Binutils; openSUSE Tumbleweed) 2.32
Das Problem war und ist immer noch, dass
das Laden von uEnv.txt fehlschlägt,
fatload (uEnv.txt) failed
weil die eMMC eine ext4 Partition beinhaltet.
Eventuell muss ich zwei Partitionen vorsehen.
Eine kleine fat für dtb und kernel und rd
und eine große mit ext4 für das FS und den Rest.
Markus
Markus W. schrieb:> Das Problem war und ist immer noch, dass> das Laden von uEnv.txt fehlschlägt,>> fatload (uEnv.txt) failed>> weil die eMMC eine ext4 Partition beinhaltet.> Eventuell muss ich zwei Partitionen vorsehen.> Eine kleine fat für dtb und kernel und rd> und eine große mit ext4 für das FS und den Rest.
Ich glaube du mussst da noch ein Paar Params angeben.
Ich habe bei meinem R1 z.B.:
fatload mmc 0 0x49000000 ...
D.h. "mmc" und die "0" dahinter musst du evtl. richtig setzen.
Vlt. "emmc" und/oder anderen Wert statt 0
Btw, uEnv.txt sollst du eigentlich nicht selber laden, sondern u-boot
selbst tut das doch, IMHO.
Korrektur: doch, geht, kannst du auch selber laden. Musst aber mit
"source 0x..." dann entsprechend ausführen. D.h. du kannst dafür auch
anderen Dateinamen benutzen. Da sind idR nur setenv-Sachen drin...
Mein uboot läd die uenv.txt im ordner bananapi/bpi-r2/linux auf der
fat-partition #1 (p1).
Wenn deine Partitionen anders sind musst du das im environment
anpassen...
Ich habe mich da am uboot der offiziellen images gehalten
Hallo Frank, Mutluit M.,
danke für den Input.
Ich möchte die uEnv.txt bzw. uenv.txt kleiner machen.
Frank Du hast ja da mehrere Optionen für mehrere Bootwege
und Kernelversionen vorgesehen.
Die Fülle ist am Anfang etwas unübersichtlich, wenn man
damit noch nicht so vertraut ist.
Die genannte Fehlermeldung tritt sofort ein, weil der
uboot mit seinem fatload bei meiner ext4 Partition kein
Erfolg hat ein uenv.txt zu finden.
Ich werde weiter kämpfen - Schritt für Schritt.
So ist es halb bei solchen SBC's.
Da muss man einen Langen Atem aufbringen.
Markus
Wenn du den bootcmd rausnimmst hast das reine builtin-env. Aktuell läd
es die uenv.txr aus dem ordner und zeigt das menü an.
ist ja auch einiges drin für dto (kernel+dtb separat + dtolist)
Je nachdem was du brauchst wirfst den rest raus...kannst ja damit
hochbooten und nacheinander die variablen leer machen bis es nicht mehr
funktioniert...oder startest mit einer leeren uenv.txt und nimmst Stück
für stück die vars rein. Da ich mehrere kernel kurz nacheinander starte
um diese z.b. vergleichen zu können habe ich das env halt für diese
zwecke angepasst
Ich habe versucht es in möglichst generische "funktionen" zu
packen...meine vorlage war da wesentlich schwerer zu lesen zumal es im
code verankert war als const
@Frank und Mutluit
danke für die Infos. Habe meinen eigenen Thread ganz vergessen.
Ist wie mit den verbuddelten Haselnüssen bei den Eichkatzerl.
War jetzt eine Weile mit anderen Spielsachen abgelenkt.
Bin jetzt aber wieder etwas weiter gekommen und am Testen und Spielen
mit dem BPi-R2.
Markus