Hi, I want to know if there is a way to build U-Boot from denx source. I was looking but there’s no support for BPI-M5 but for Odroid C4. I want to run kernel 5.X mainline.
Does Odroid C4 have the same CPU as M5? If so I believe you just have to adjust the pinmuxing. Check if odroid-c4 has a DTS file, and change the muxing accordingly. You might be limited on the types of boot though. Ethernet booting might not working if PHYs are different
In fact, the last mainline kernel provide the dts for BPI-M5, the thing is I don’t know how made the right kernel configs for BPI-M5 in the menuconfig, boot.ini settings and overlays.
This is what I want to do:
Settings and overlays are usually independent from kernel (they run before everything). So you should be okay by just copying the ones from the original image.
The menuconfig part I would try running defconfig (make ARCH=arm64 defconfig) and try to boot with this. Might boot, but miss the necessary modules for other IC on the board. For those you can go in Device Drivers menu and select the ones on your board (’/’ key brings the search menu, it helps finding most of the drivers).
Have you tried the doku tutorial you shared, where did it took you?
Thanks for your help Otavio, I tried with 5.14 mainline Kernel source and defconfig, the good thing with 5.14 mainline Kernel source is that comes with dtbs for bananna pi m5. At last I made it boot but ethernet is not working, It’s good to kwon (I’m not an expert on this matters) that the overlays are usually independent from kernel.
If it boots is a very good sign. Do you reach a bash terminal? The usual handover process is something like: Power->Pre-boot routines (overlays and U-Boot PSL)->U-Boot->Kernel + DTS->/sbin/init->bash
If you can see Kernel messages but no terminal all you have to do is double check /sbin/init and your bash (some images uses busybox for this).
The missing ethernet, most likely is just a missing driver. From the photos it seems like M5 uses a Realtek as PHY, but I couldn’t discern the part number. M5 and Odroid-C4 seems to have similar design, the latest uses a Realtek RTL8211F. Check if your board has the same one (the Phy is the closest to the Ethernet Jack, it has a crab as logo).
On menuconfig, navigate to Device Drivers->Network Device Support->Ethernet Driver Support and look if Realtek Devices is checked (with a * not a M), if it’s try checking all other Realtek options (RTL-8139, RTL-8129 and 8169), if you still can’t get a connection you might need the firmware binaries. What distro are you using, try searching for “firmware-realtek” with your distro name on google.
Hi Otavio, thanks for your help, your tip for ethernet works well but have some issues due tmp free space, I don’t understand why if I used the same root file system without that trouble. By other hand, I’ve found that there is an update for BPI-M5 support on https://source.denx.de/u-boot/custodians/u-boot-amlogic, it supposed to build an U-Boot for Amlogic but I don’t know how to burning into SD Card after build process.
You might be missing a tmp partition or not big enough, that’s usually on “/tmp/”. Can you see that folder on the root of the system? What lsblk returns? On SD based systems is a good thing to mount /var/log and /tmp on RAM filesystems (ramfs) or more durable memories, Banana Pi W2 for example has a eMMC Flash so my lsblk reads like:
mmcblk1 179:0 0 7.3G 0 disk ├─mmcblk1p1 179:1 0 1G 0 part /var └─mmcblk1p2 179:2 0 1G 0 part /tmp mmcblk1boot0 179:8 0 4M 1 disk mmcblk1boot1 179:16 0 4M 1 disk mmcblk1rpmb 179:24 0 512K 0 disk mmcblk0 179:32 0 29.7G 0 disk ├─mmcblk0p1 179:33 0 256M 0 part /boot └─mmcblk0p2 179:34 0 3.7G 0 part /
Try checking where your device is mounting /tmp, if M5 has some sort of flash change /etc/fstab to mount /tmp there. U-boot usually provides flashing documentation, boot.ini probably contains the boot binary it will run, copy the binary generated on u-boot (u-boot.bin usually) to the root of your SD card and copy the name to boot.ini.
This might also be helpful: https://www.cnx-software.com/2016/11/19/how-to-create-a-bootable-recovery-sd-card-for-amlogic-tv-boxes/
I try the https://u-boot.readthedocs.io/en/latest/board/amlogic/odroid-c4.html method without success, BPI-M5 have the same file scheme but it doesn’t work.
USB/SD and eMMC images can be created with the same u-boot and instructions as any mainline u-boot using Amlogic GXBB/GXL/GXM/G12A/G12B/SM1 board/device:
dd if="/path/to/u-boot.bin.sd.bin" of="/dev/mmcblkX" conv=fsync,notrunc bs=1 count=444 dd if="/path/to/u-boot.bin.sd.bin" of="/dev/mmcblkX" conv=fsync,notrunc bs=512 skip=1 seek=1
Source: https://github.com/chewitt/u-boot/commits/amlogic-2021.07 which includes M5 support.
I am still stuck after kernel is loaded using this uboot.
I am sure it’s not the uboot but the linux kernel.
I am using upstream kernel without any m5 specific patch.
I will have to look deeper into the things i might have missed.
NOTICE: BL31: v1.3(release):4fc40b1 NOTICE: BL31: Built : 15:57:33, May 22 2019 NOTICE: BL31: G12A normal boot! NOTICE: BL31: BL33 decompress pass ERROR: Error initializing runtime service opteed_fast U-Boot 2021.07 (Sep 30 2021 - 06:38:04 +0000) odroid-c4/hc4 Model: Hardkernel ODROID-C4 SoC: Amlogic Meson SM1 (S905X3) Revision 2b:c (10:2) DRAM: 3.8 GiB MMC: [email protected]: 0, [email protected]: 1 Loading Environment from nowhere... OK In: serial Out: serial Err: serial Board variant: c4 Net: eth0: [email protected] Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device Scanning mmc 0:1... Found /extlinux/extlinux.conf Retrieving file: /extlinux/extlinux.conf 324 bytes read in 2 ms (158.2 KiB/s) 1: Manjaro ARM Retrieving file: /initramfs-linux.img 13223803 bytes read in 566 ms (22.3 MiB/s) Retrieving file: /Image 30624256 bytes read in 1308 ms (22.3 MiB/s) append: root=PARTUUID=76d8f071-02 rootflags=data=writeback rw console=ttyAML0,11s Retrieving file: /dtbs/amlogic/meson-sm1-bananapi-m5.dtb 73627 bytes read in 7 ms (10 MiB/s) Moving Image from 0x8080000 to 0x8200000, end=a010000 ## Flattened Device Tree blob at 08008000 Booting using the fdt blob at 0x8008000 Loading Ramdisk to 3f363000, end 3ffff77b ... OK Loading Device Tree to 000000003f34e000, end 000000003f362f9a ... OK Starting kernel ... [ 0.132503] kvm: pmu event creation failed -2
earlycon to boot params and you should get more output. The
kvm: pmu: failure is probably harmless (KVM support is not an essential thing).
Yes kvm is just the first log and nothing is shown. Ill try earlycon and see what is causing it to not boot.
I tried to add
earlycon but still nothing showing, I am assuming it is getting stuck before it could post logs. 2 of the leds stops once kernel is loaded.
I am not sure what could be causing this. Is there any patch needed for m5 ? I will have to investigate further to see why it is not booting.
I am using the uboot from your link.
are you sure this is right? have you a working image to check if this is the right device for output?
Yes I tried LibreElec’s dev built and it does throw all the logs, yes
console=ttyAML0 is right
you can check in running image which device in dts your console device is (register address). maybe there are serial devices in other order…same device is maybe ttyAML1 (i don’t know AML tty), for r2 i changed ttyS2 to ttyS0 in dtsi to be compatible with bpi images. and of course be sure you have serial driver builtin
If libre elec compiled with ikconfig (modprobe config),you can export config (zcat /proc/config.gz) and use this to build your own config
Good point. Thanks. I will try this but i’d assume LibreElec and Me (manjaro) kernel are both upstream kernels so should be any difference.
won’t hurt to look into it though. Thanks for the guidance.