середа, 24 червня 2026 р.

How to Build stm8-binutils-gdb on Ubuntu 26.04 with GCC 15

 A few years ago, I set up the toolchain for STM8 development. Back then, simply following the steps in the README was enough to get everything compiled and working out of the box. However, after installing a clean Ubuntu 26.04 along with GCC/G++ 15, I found that compiling stm8-binutils-gdb wasn't as straightforward as it used to be. That is exactly what we will look into today.

The Problem and the Proposed Solution 

Since there is no official .deb package available in the repositories, we have to build the toolchain from source. You can find the project homepage at  https://stm8-binutils-gdb.sourceforge.io, and the source archives are available for download on https://sourceforge.net/projects/stm8-binutils-gdb/files/.

If you simply follow the instructions, the build fails with a compilation error in the readline library, which is required by stm8-gdb. Apparently, it has not been adapted for building with modern GCC v15. On the other hand, readline is available as a .deb package in the repositories. The idea is to avoid building it from source and instead link against the pre-compiled version provided by the repository.However, there are no out-of-the-box configuration flags to achieve this, so we will need to slightly modify the build configuration scripts.

Implementation Details

Assuming you have already downloaded the stm8-binutils-gdb-sources-2021-07-18.tar.gz archive, extract it, review the README.txt, and run ./patch_binutils.sh:

$ tar -xf stm8-binutils-gdb-sources-2021-07-18.tar.gz
$ cd stm8-binutils-gdb-sources/
$ cat README.txt
$ ./patch_binutils.sh 

Next, we need to modify a few configuration files. In configure_binutils.sh, replace the following line: 

./configure --host=$_HOST --target=stm8-none-elf32 $_PREFIX --program-prefix=stm8-

with

./configure --host=$_HOST --target=stm8-none-elf32 $_PREFIX \
    --program-prefix=stm8- --with-system-zlib --with-system-readline 

This explicitly tells the build system to use the pre-installed system versions of zlib and readline.Next, we need to add support for the --with-system-readline option, as the scripts only support --with-system-zlib by default. To do this, we will patch binutils-2.30/configure file. This file is quite large, so instead of fully analyzing its internal logic, I decided to implement support for --with-system-readline by mimicking the existing --with-system-zlib implementation.

First, let's add the new option to the help message block. Below the line

--with-system-zlib      use installed libz

insert the line

--with-system-readline  use installed readline

After that, we need to add two more blocks that handle the option logic.

Find block

use_included_zlib=

# Check whether --with-system-zlib was given.
if test "${with_system_zlib+set}" = set; then :
  withval=$with_system_zlib;
fi

# Make sure we don't let ZLIB be added if we didn't want it.
if test x$with_system_zlib = xyes ; then
  use_included_zlib=no
  noconfigdirs="$noconfigdirs zlib"
fi

and append the following to it

# custom option for readline
use_included_readline=

# Check whether --with-system-readline was given.
if test "${with_system_readline+set}" = set; then :
  withval=$with_system_readline;
fi

# Make sure we don't let readline be added if we didn't want it.
if test x$with_system_readline = xyes ; then
  use_included_readline=no
  noconfigdirs="$noconfigdirs readline"
fi

Then locate block

if test x${use_included_zlib} = x &&
  echo " ${configdirs} " | grep " zlib " > /dev/null 2>&1 ; then
  :
else
  with_system_zlib=yes
  extra_host_args="$extra_host_args --with-system-zlib"
fi

and append

if test x${use_included_readline} = x &&
  echo " ${configdirs} " | grep " readline " > /dev/null 2>&1 ; then
  :
else
  with_system_readline=yes
  extra_host_args="$extra_host_args --with-system-readline"
fi

Before starting the build, you need to install the libreadline-dev and texinfo packages:

$ sudo apt install libreadline-dev texinfo

It is possible that a completely clean machine might require additional dependencies, but it appears that my system already had everything necessary installed.
Now, run the modified configuration script and start the build process:

$ ./configure_binutils.sh
$ cd binutils-2.30
$ make

You can speed up the build by running it on all available CPU cores simultaneously:

$ make -j$(nproc)

пʼятниця, 31 серпня 2018 р.

stm8 toolchain під Linux

stm8 ST-Link v2 sdcc
Недавно я зацікавився мікроконтролерами stm8. Це чудові сучасні контролери. Особливо приваблювала можливість повноцінного внутрішньо-схемного відлагодження та відсутність фьюз-бітів, як в AVR. Щодо інструментарію розробника - то під Windows ситуація цілком зрозуміла: ST Visual Develop + С компілятор від Cosmic задовільно працюють з коробки. А от під Linux все виявилось не так гладко. Про налаштування інструментарію для stm8 під Linux і піде мова у цьому пості.

понеділок, 30 квітня 2018 р.

Посланя нащадкам від працівників заводу VEF.

Люблю я усяку ретро електроніку. Всі ці аналогові схеми, радянські теплі лампи та механічні шкали радіоприймачів. Напевно, у цьому є щось магічне.

На цей раз до моїх рук потрапив VEF 201. Культове радіо епохи 70-х. Та не простий, а з посланням у середині...

субота, 31 березня 2018 р.

А вам не заважають FM станції?

Відстань від мого будинку до антени FM передавача складає близько 1.5 км. Зрозуміло, що за таких умов навіть не дуже довгий відрізок дроту буде працювати як антена. А в результаті певних паразитних перетворень отримуємо на виході звукопідсилювальної апаратури відчутний "фон" ЧМ радіопередач у паузах між піснями замість ледь помітного рівномірного шуму. Не те щоби ситуація була настільки критичною, але я люблю слухати музику негучно за умови тиші навколо, і такий ефект злегка мене дратував.

четвер, 20 липня 2017 р.

Простий малопотужний лінійний стабілізатор з низьким падінням напруги (LDO).

Стабілізатор напруги LDO
Простий LDO стабілізатор.
Передмова.
На днях займався конструюванням регенеративного приймача з живленням від батарей. Такий приймач забезпечує повну "віддачу" лише на порозі генерації. Стан цей досить нестабільний і сильно залежить від зовнішніх факторів. Зокрема, від якості джерела живлення. Моя основна схема живиться від чотирьох батарей типу АА. Отже вхідна напруга може коливатись від 6 до 4 В. Виходить, що потрібен малопотужний стабілізатор напруги з низькими падінням напруги (Low-dropout regulator, LDO) [1] та власним споживанням струму.

Що ж саме мені потрібно?
Перш за все, падіння напруги на стабілізаторі не повинно перевищувати 0,1-0,2 В, а власне споживання - 2,0-2,5 мА. Схема повинна забезпечувати вихідний струм до 30 мА, коефіцієнт стабілізації очікується більшим ніж 100. Також, це має бути досить простий вузол з доступних деталей.

середа, 7 грудня 2016 р.

Скільки коштували радянські радіодеталі?



Радянський транзистор МП41 фото.
Транзистор МП41.
В радянські часи майже на кожній речі з магазину стояла позначка з ціною. Я навіть дивувався, навіщо зазначати ціну, невже продавець буде намагатись обманути. Але такі позначки чомусь майже не ставили на радіодеталях. А тепер було б цікаво знати, скільки ж коштували тогочасні резистори-конденсатори.

неділя, 25 вересня 2016 р.

Дешевий китайський мультиметр.

дешевий китайський мультиметрКілька років тому прийшлось мені зайти до господарського супермаркету. І, окрім усього іншого, попався мені на очі тестер-мультиметр. На вигляд нічого особливого, прилад як прилад. Відрізнявся він лише дуже низькою ціною, всього лише $3,5.

Купив я тоді той тестер. І зовсім не із за ціни. Вірніше із цікавості, що ж насправді всередині приладу за такі гроші.

Отже, цього разу мова піде про те чим же насправді відрізняється дешеве від нормального.