(0xff0fffff).toString(2).split('').forEach((e,i) => console.info(`${31-i}:${e}`));
CONFIG_BLK_DEV_INITRD=y | |
CONFIG_INITRAMFS_SOURCE="xinitcpud.cpio.xz" | |
# CONFIG_PERF_EVENTS_AMD_UNCORE is not set | |
CONFIG_EFI=y | |
CONFIG_KEXEC=y | |
CONFIG_CMDLINE_BOOL=y | |
CONFIG_CMDLINE="noefi ip=dhcp earlyprintk=ttyS0,115200,keep console=ttyS0,115200" | |
CONFIG_CMDLINE_OVERRIDE=y | |
# CONFIG_ACPI_PRMT is not set | |
CONFIG_NET=y |
[52]HELLO! BOOT0 is starting! | |
[55]BOOT0 commit : 9d92598 | |
[58]set pll start | |
[60]periph0 has been enabled | |
[62]set pll end | |
[64][pmu]: bus read error | |
[66]board init ok | |
[68]DRAM only have internal ZQ!! | |
[71]get_pmu_exist() = -1 | |
[73]DRAM BOOT DRIVE INFO: V0.32 |
[34]HELLO! BOOT0 is starting![Sep 18 2021, 11:27:51] | |
[39]BOOT0 commit : 3b45046 | |
[42]set pll start | |
[44]periph0 has been enabled | |
[47]set pll end | |
[48][pmu]: bus read error | |
[50]board init ok | |
[52]enable_jtag | |
[54]DRAM only have internal ZQ!! | |
[57]get_pmu_exist() = -1 |
#!/bin/sh | |
_TMP=`mktemp` | |
echo -n $(rax2 -s "$1") > $_TMP | |
riscv64-linux-gnu-objdump -m riscv -b binary -D $_TMP | tail -n 5 | |
rm $_TMP |
Last year, I ported oreboot to the Allwinner D1 SoC that is found on the Nezha SBC and many other boards now. For a boot loader environment, I chose to embed LinuxBoot, and then partitioned an SD card with two root filesystems for testing: OpenWrt, which is small and just ran right away, and openSUSE, which required some extra effort. I was happy to see a new D1 board advertised with openSUSE support, though the process of getting there was tedious enough that I wanted to find an
The SoC is unlabeled but turns out to be an Allwinner T3/R40 aka sun8iw11p1.
The device is presumably also known as ShareVDI R1 (Pro).
#!/bin/sh | |
_REGS=`echo RomProtect{0,1,2,3} SPICntrl0 SPIRestrictedCmd{,2} AltSPICS` | |
for r in $_REGS; do | |
chipsec_util.py reg read $r | |
done | |
dmidecode -t bios -t system |
During the last two years, I have collected ARM and RISC-V gadgets and development boards. What I realized is that many of them run systems far off mainline Linux, and quite often do the vendors not publish the sources. However, when able to get serial output, I can fix that. And that is where many engineers start with regular development, so we are in the same boat.
Now how do the original drivers work? Applications in existing products often have userspace or hybrid drivers, which opens up a door. We can emulate the app, e.g., in QEMU, and monitor I/O accesses. Then we can write our own driver. But that is a tedious and time consuming process, the most inconvenient step being
#!/bin/sh | |
set -e | |
_NAME=u-root-nezha | |
_DIR=/tmp/$_NAME | |
_FLAGS=-build=bb | |
# Get u-root, module workaround is necessary as of now | |
# see also https://github.com/u-root/u-root#warning-go-modules-are-a-work-in-progress-warning |