July 20, 2026, 01:29:12 PM

Recent posts

#2
iMX233 / Re: is imx233 dead? does anyon...
Last post by xaelsouth - July 18, 2026, 04:09:02 PM
Sure. Still 'playing' with iMX233. Recently published https://github.com/xaelsouth/random-notes/wiki/On-iMX23. Audio in and out works, but tv-out does not. Not sure about the latter one, but it does not seem too hard to make it work again with recent Linux kernels.

If someone could help to move some of provided patches into U-Boot, Linux or Buildroot - you are very welcome!
#3
A20 / Running an Olimex A20 Linux Im...
Last post by mavstuff - July 16, 2026, 05:05:14 PM
If you're looking for a way to run an Olimex A20 Linux image on your local PC for development, here is a simple setup that works on both Windows and Linux hosts.

This setup is useful for:
  • Building and testing executables
  • Setting up SSH connections
  • Initializing databases
  • Performing Linux configuration and package installation
  • General application development without powering on the physical board

It provides working screen, keyboard, mouse, and network emulation. With some patching, it it can also show graphics, which I will describe below. As expected, it does not emulate GPIO or other board-specific hardware peripherals. later this image can be used on a real device as this does not touch native boot files.

1. Install QEMU

Tested with QEMU 11.x on Windows 10 x86_64, but should also work well on Linux host

2. Download an Olimex image

For example: A20-OLinuXino-bookworm-base-20260323-113959.img

3. Build QEMU-comaptibe ARMv7 Linux kernel

Notice the kernel must be separately built and applied from QEMU command line and does not interfere with built-in A20 kernel. It does not overwrite the one stored on the SD card image, but remains as a separate file on a host machine. I used Linux 6.12, which at the end boots and works well. The kernels are compatible from the userspace perspective. Also the modules from the SD image are not used and QEMU kernel has to include them in self.

git clone --depth 1 --branch linux-6.12.y https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux-6.12
cd linux-6.12
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc) zImage

4. Copy the kernel to your Windows machine

Linux Host: linux-6.12/arch/arm/boot/zImage -> Windows Host: linux-6.12-out/zImage

Sorry I used Windows host, but QEMU should also work well on a Linux host

5. Start QEMU
qemu-system-arm -M virt -m 1024 -smp 2 -display sdl -kernel linux-6.12-out/zImage -append "root=/dev/vda1 rw rootwait loglevel=8 console=ttyAMA0 console=tty0" -drive if=none,file=A20-OLinuXino-bookworm-base-20260323-113959.img,format=raw,id=hd -device virtio-blk-device,drive=hd -netdev user,id=net0 -device virtio-net-device,netdev=net0 -device virtio-gpu-device -device virtio-tablet-device -device virtio-keyboard-device -monitor none -serial telnet:127.0.0.1:4444,server,nowait
With this basic setup, the serial console and networking are available.

The serial console is accessible via Telnet on:
localhost:4444

You can connect using PuTTY or any Telnet client.

SSH networking also works, allowing you to connect directly to the virtual machine.

Graphical Desktop

Getting the graphical desktop working is a little more involved due to a compatibility issue between the Linux 6.12 kernel and QEMU's VirtIO MMIO implementation. A small kernel patch is required.

This repository includes the required kernel patches, kernel configuration, and build scripts.

Hopefully this saves someone else a few hours of debugging. ;)
#4
New Products release / New Industrial Grade Open Sou...
Last post by olimex - July 16, 2026, 01:57:07 PM
PICO-EVB enables your  Raspberry PI PICO to drive relays and sense High voltage inputs https://olimex.wordpress.com/2026/07/16/new-industrial-grade-open-source-hardware-board-pico-evb-enables-your-raspberry-pi-pico-to-drive-relays-and-sense-high-voltage-inputs/ #raspberrypi #pico #iot #plc #oshw #industial #automation #esphome #homeassistant
#5
New Product Ideas / Re: can a lime 2 or pico 2 xxl...
Last post by oeren - July 15, 2026, 04:24:01 PM
QuoteQuoting from ...

all rpi computers are a nuisance in terms of free software. Because no rpi computer will work even partly if you do not give them the non free software they require to run.

Quotepossible for Open Printer to fit it in their design?

Free software people take what they can get. If a free software computer can replace the rpi zero w then it does not matter if the computer has to be put somewhere outside of the printer.

Quotedoes not run GNU/Linux.

I had not put any thoughts into that. I am not a programmer. Therefore my investigations are the investigations of a layperson. And in any case they can be wrong.
I have been told, it is common that printers and 3d printers are run by micro controllers. Suggesting a pico 2 xxl should be able to run an open printer in terms of performance.
On https://www.opentools.studio/ it says open printer will make use of open source print server CUPS. I guess open printer is referring to https://github.com/openprinting/cups
I cannot tell if the cups software can be put on a pico 2 xxl as is. Or should rewriting the cups software be an option for getting the software on a pico 2 xxl, how big a task that would be?
Should a lot of consumers be interested in buying an open printer running entirely on free software the open printer would present a business opportunity for olimex. I think olimex should contact opentools.studio in order to find out if an open printer version running entirely on free software can be made?


#6
New Product Ideas / Re: can a lime 2 or pico 2 xxl...
Last post by oeren - July 15, 2026, 03:50:22 PM
QuoteAll three of the boards that you mentioned can run completely open source software.

If you are including the rpi zero w in all 3 of the boards, you are wrong. The rpi zero w requires non free software in order to work.

In fact no rpi computer is able to run entirely on free software. According to a rpi engineer the raspberry pi pico 2 requires no non free software in order to work.



#7
ESP32 / Re: Framebuffer on ESP32-P4-PC
Last post by LubOlimex - July 14, 2026, 11:31:07 AM
#8
ESP32 / Framebuffer on ESP32-P4-PC
Last post by Pjotr - July 13, 2026, 03:14:22 PM
I just need the framebuffer to draw graphics to HDMI output. Is there any demo code?
#9
STMP1 / Re: STM32MP1-OLinuXino-LIME: f...
Last post by dry - July 12, 2026, 07:18:00 AM
Ta daaam ! We can improve that performance by doing small device tree mod : add

sdmmc@58007000 {
    ....
    mmc-ddr-3_3v;  <--- Just this
};

Then, after boot:

[    0.213409] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
[    4.363104] mmci-pl18x 58007000.sdmmc: mmc2: PL180 manf 53 rev1 at 0x58007000 irq 57,0 (pio)
[    4.424492] mmc1: new high speed SDXC card at address aaaa
[    4.489070] mmc2: new DDR MMC card at address 0001    < ----------- HERE
[    4.494029] mmcblk2: mmc2:0001 BJTD4R 29.1 GiB
[    4.497895] mmcblk2boot0: mmc2:0001 BJTD4R partition 1 4.00 MiB
[    4.503835] mmcblk2boot1: mmc2:0001 BJTD4R partition 2 4.00 MiB
[    4.509571] mmcblk2rpmb: mmc2:0001 BJTD4R partition 3 4.00 MiB, chardev (245:0)

sudo cat /sys/kernel/debug/mmc2/ios
actual clock:    49500000 Hz
vdd:        21 (3.3 ~ 3.4 V)
bus mode:    2 (push-pull)
chip select:    0 (don't care)
power mode:    2 (on)
bus width:    3 (8 bits)
timing spec:    8 (mmc DDR52)    <--------- NOTE HERE
signal voltage:    0 (3.30 V)
driver type:    0 (driver type B)



So re-running the fio tests, this gives a speed-up / bump:

Compared with your earlier non-DDR / MMC high-speed raw results
Test              Before: MMC high-speed SDR After: DDR52 Change
Less-severe sequential write ~27.1 MiB/s 36.6 MiB/s +35%
Less-severe sequential read ~27.5 MiB/s 34.4 MiB/s +25%
Less-severe random write ~1730 IOPS 1934 IOPS +12%
Less-severe random read         ~2481 IOPS 2726 IOPS +10%
Severe sequential write         ~12.8 MiB/s 13.3 MiB/s +4%
Severe sequential read         ~27.4 MiB/s 35.0 MiB/s +28%
Severe random write         ~1001 IOPS 1021 IOPS +2%
Severe random read         ~2600 IOPS 2862 IOPS +10%


So you can decide if you need this bump. Also, any longer run stability issues not tested, if this may affect it or not.

#10
STMP1 / Re: STM32MP1-OLinuXino-LIME: f...
Last post by dry - July 12, 2026, 06:06:26 AM
Looks like I cannot attach anything on posts, so I'll inline my fio scripts.
(Btw, thanks got bot /chatGPT for help with these reports).

#    FIO Severe test
#!/bin/sh
set -eu

# Raw block target.
# WARNING: write tests will overwrite data on this device/partition.
# Change this in one place if needed.
TARGET_DEV="/dev/mmcblk2p1"

# Output directory for logs.
LOG_DIR="/tmp"

# Common fio settings.
COMMON_OPTS="--ioengine=psync \
  --iodepth=1 \
  --numjobs=1 \
  --runtime=30 \
  --time_based \
  --direct=1 \
  --group_reporting \
  --lat_percentiles=1 \
  --percentile_list=50:90:95:99:99.9:99.99"

echo "Target device: $TARGET_DEV"
echo "Logs written to: $LOG_DIR"
echo
echo "WARNING: write tests will overwrite data on $TARGET_DEV"
echo "Make sure the target is unmounted before running write tests."
echo

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=seqwrite_raw_sync \
  --filename="$TARGET_DEV" \
  --rw=write \
  --bs=1M \
  --sync=1 \
  $COMMON_OPTS \
  --output="$LOG_DIR/seqwrite_raw_sync_test.txt"

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=seqread_raw_direct_severe \
  --filename="$TARGET_DEV" \
  --readonly=1 \
  --rw=read \
  --bs=1M \
  $COMMON_OPTS \
  --output="$LOG_DIR/seqread_raw_direct_severe_test.txt"

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=randwrite_raw_sync \
  --filename="$TARGET_DEV" \
  --rw=randwrite \
  --bs=4k \
  --sync=1 \
  $COMMON_OPTS \
  --output="$LOG_DIR/randwrite_raw_sync_test.txt"

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=randread_raw_direct_severe \
  --filename="$TARGET_DEV" \
  --readonly=1 \
  --rw=randread \
  --bs=4k \
  $COMMON_OPTS \
  --output="$LOG_DIR/randread_raw_direct_severe_test.txt"

echo
echo "Done. Logs:"
echo "  $LOG_DIR/seqwrite_raw_sync_test.txt"
echo "  $LOG_DIR/seqread_raw_direct_severe_test.txt"
echo "  $LOG_DIR/randwrite_raw_sync_test.txt"
echo "  $LOG_DIR/randread_raw_direct_severe_test.txt"


# FIO less Severe setting test
#!/bin/sh
set -eu

# Raw block target.
# WARNING: write tests will overwrite data on this device/partition.
# Change this in one place if needed.
TARGET_DEV="/dev/mmcblk2p1"

# Output directory for logs.
LOG_DIR="/tmp"

# Common fio settings.
COMMON_OPTS="--ioengine=psync \
  --iodepth=1 \
  --numjobs=1 \
  --runtime=30 \
  --time_based \
  --direct=1 \
  --group_reporting \
  --lat_percentiles=1 \
  --percentile_list=50:90:95:99:99.9:99.99"

echo "Target device: $TARGET_DEV"
echo "Logs written to: $LOG_DIR"
echo
echo "WARNING: write tests will overwrite data on $TARGET_DEV"
echo "Make sure the target is unmounted before running write tests."
echo

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=seqwrite_raw_direct \
  --filename="$TARGET_DEV" \
  --rw=write \
  --bs=1M \
  --end_fsync=1 \
  $COMMON_OPTS \
  --output="$LOG_DIR/seqwrite_raw_direct_test.txt"

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=seqread_raw_direct_less_severe \
  --filename="$TARGET_DEV" \
  --readonly=1 \
  --rw=read \
  --bs=1M \
  $COMMON_OPTS \
  --output="$LOG_DIR/seqread_raw_direct_less_severe_test.txt"

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=randwrite_raw_direct \
  --filename="$TARGET_DEV" \
  --rw=randwrite \
  --bs=4k \
  --end_fsync=1 \
  $COMMON_OPTS \
  --output="$LOG_DIR/randwrite_raw_direct_test.txt"

sync
echo 3 | tee /proc/sys/vm/drop_caches >/dev/null

fio --name=randread_raw_direct_less_severe \
  --filename="$TARGET_DEV" \
  --readonly=1 \
  --rw=randread \
  --bs=4k \
  $COMMON_OPTS \
  --output="$LOG_DIR/randread_raw_direct_less_severe_test.txt"

echo
echo "Done. Logs:"
echo "  $LOG_DIR/seqwrite_raw_direct_test.txt"
echo "  $LOG_DIR/seqread_raw_direct_less_severe_test.txt"
echo "  $LOG_DIR/randwrite_raw_direct_test.txt"
echo "  $LOG_DIR/randread_raw_direct_less_severe_test.txt"