Note: This is for Odroid m1s, not Odroid m1 - there just isn't a forum for the m1s (yet?)
When I tried to start the board with the community image for the Odroid m1s on a SD card, it wouldn't boot.
The connected screen (HDMI) would stay black and the blue heartbeat LED would stay on permanently.
I tried building and flashing u-boot but that didn't help me.
Here's what DID work:
(Note: it worked for me. I can't guarantee that this fixes it for everyone, use at your own risk)
I mounted the SD card on a Linux desktop and created backups of the boot scripts (just to be safe)
sudo cp <mount_path>/armbi_root/boot/boot.cmd <mount_path>/armbi_root/boot/boot.cmd.bak
sudo cp <mount_path>/armbi_root/boot/boot.scr <mount_path>/armbi_root/boot/boot.scr.bak
Then I set the load address to 0x0c000000
sudo sed -i 's/setenv load_addr "0x9000000"/setenv load_addr "0x0c000000"/' <mount_path>/armbi_root/boot/boot.cmd
Then I ran mkimage as follows:
sudo /usr/bin/mkimage -C none -A arm -T script -d <mount_path>/armbi_root/boot/boot.cmd <mount_path>/armbi_root/boot/boot.scr
This fixed the booting, but just to be sure a future update wouldn't undo it I also wrote it to armbianEnv.txt
echo "load_addr=0x0c000000" | sudo tee -a <mount_path>/armbi_root/boot/armbianEnv.txt
And that's it!
One more thing: I noticed that Ethernet did not work out of the box, so I did this:
I attached a UART cable to log into the machine and created the following script, which patches the device tree.
You might need to get a little creative if your only access would be through Ethernet, but you I'm sure you can figure something out.
(Maybe create the necessary files while the SD card is still mounted on your PC)
cat > /usr/local/sbin/patch-gmac-dtb.sh << 'EOF'
#!/bin/bash
DTB=/boot/dtb/rockchip/rk3566-odroid-m1s.dtb
dtc -I dtb -O dts $DTB -o /tmp/m1s.dts 2>/dev/null
# Only patch if not already applied
if grep -q 'snps,reset-gpio' /tmp/m1s.dts; then
echo "GMAC DTB patch already present, skipping"
exit 0
fi
sed -i '/phy-mode = "rgmii-id";/a \\t\tsnps,reset-gpio = <0x51 0x0f 0x01>;\n\t\tsnps,reset-active-low;\n\t\tsnps,reset-delays-us = <0x00 0x4e20 0x186a0>;' /tmp/m1s.dts
sed -i '/reset-assert-us/d; /reset-deassert-us/d; /reset-gpios = <0x51/d' /tmp/m1s.dts
dtc -I dts -O dtb /tmp/m1s.dts -o $DTB 2>/dev/null
echo "GMAC DTB patch applied"
EOF
chmod +x /usr/local/sbin/patch-gmac-dtb.sh
Execute the script and Ethernet should be working. (Might need a reboot, though).
If this works, you should make sure this is applied after every kernel update, because it will get overwritten otherwise:
# Run it automatically after kernel/dtb package updates
cat > /etc/apt/apt.conf.d/99-patch-gmac-dtb << 'EOF'
DPkg::Post-Invoke {"if [ -f /usr/local/sbin/patch-gmac-dtb.sh ]; then /usr/local/sbin/patch-gmac-dtb.sh; fi"};
EOF