Лет 5 назад компилировал софтину для железке на ARM через arm-linux-gnueabi в режиме static. Она включала в себя openssl, который я тоже компил на этой же машине через arm-linux-gnueabi.
До определенного времени все нормально работало, для периодических обновлений софтины использовал только установленный Ubuntu 14 или 16 (вроде даже на 20м тоже все было путем), после чего грохал систему за ненадобностью. Тулчейн использовал стандартный из репозитория Ubuntu (apt-get install gcc-arm-linux-gnueabi).
Вчера в очередной раз поднял Ubuntu 16, запилил openssl-1.0.2r, запилил софтину, закинул на железяку, а в ответ «FATAL: kernel too old». Оно и не удивительно, ядро там действительно старое:
3.0.21+ #1 PREEMPT Wed Feb 3 14:55:39 CST 2016 armv7l GNU/Linux
Но до сих пор все работало. Видимо один из компонентов Ubuntu теперь стал minimal-kernel-version выше чем 3.0.21.
GLIBC 2.23 по-умолчанию. arm-linux-gnueabi-gcc ставится 5.4.0.
#ldd --version
ldd (Ubuntu GLIBC 2.23-0ubuntu11.2) 2.23
#arm-linux-gnueabi-gcc --version
arm-linux-gnueabi-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
GLIBC до версии 2.24 как я понимаю с ядром 3.0.0 работает нормально.
Снес систему и на голую машину поставил максимальную версию, которая не выдала ошибку «kernel too old» на конечном устройсте, это arm-linux-gnueabi - gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabi, взятый с releases.linaro.org - toolchain - binaries. Начиная с версии 7 получаю на конечном устройстве ошибку «kernel too old». Однако, openssl-1.0.2r на нем (toolchain
6.5.0) получается рабочим, но слишком жирным (около 6-8Мб в зависимости от параметров компиляции), против прежней версии удачно скомпилированной - около 3Мб. Для конечной железки это овердохрена. Условно «нормальный» размер бинарника выходит и с использованием gnueabi репозитория Ubuntu, но «kernel too old».
Собственно вопрос. Какой из компонентов мог обновиться и теперь имеет ограничения на минимальное ядро? И как это «проблему» побороть.
Поднимал Ubuntu от 14 до 20. Результат везде одинаков.
В никсах хоть и не дуб, но знаний ровно на конкретные задачи, которые приходилось на них выполнять.
cd openssl-1.0.2r && ./Configure gcc -static -no-shared --prefix=/create_soft --cross-compile-prefix=arm-linux-gnueabi-
На голой системе
~# sudo apt-get install gcc-arm-linux-gnueabi
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
binutils binutils-arm-linux-gnueabi cpp-5-arm-linux-gnueabi cpp-arm-linux-gnueabi gcc-5-arm-linux-gnueabi gcc-5-arm-linux-gnueabi-base gcc-5-cross-base libasan2-armel-cross libatomic1-armel-cross libc6-armel-cross
libc6-dev-armel-cross libcc1-0 libgcc-5-dev-armel-cross libgcc1-armel-cross libgomp1-armel-cross libisl15 libmpc3 libmpfr4 libstdc++6-armel-cross libubsan0-armel-cross linux-libc-dev-armel-cross
Suggested packages:
binutils-doc gcc-5-locales cpp-doc gcc-5-multilib-arm-linux-gnueabi gcc-5-doc libgcc1-dbg-armel-cross libgomp1-dbg-armel-cross libitm1-dbg-armel-cross libatomic1-dbg-armel-cross libasan2-dbg-armel-cross liblsan0-dbg-armel-cross
libtsan0-dbg-armel-cross libubsan0-dbg-armel-cross libcilkrts5-dbg-armel-cross libmpx0-dbg-armel-cross libquadmath0-dbg-armel-cross make manpages-dev autoconf automake libtool flex bison gdb-arm-linux-gnueabi gcc-doc
The following NEW packages will be installed:
binutils binutils-arm-linux-gnueabi cpp-5-arm-linux-gnueabi cpp-arm-linux-gnueabi gcc-5-arm-linux-gnueabi gcc-5-arm-linux-gnueabi-base gcc-5-cross-base gcc-arm-linux-gnueabi libasan2-armel-cross libatomic1-armel-cross
libc6-armel-cross libc6-dev-armel-cross libcc1-0 libgcc-5-dev-armel-cross libgcc1-armel-cross libgomp1-armel-cross libisl15 libmpc3 libmpfr4 libstdc++6-armel-cross libubsan0-armel-cross linux-libc-dev-armel-cross
0 upgraded, 22 newly installed, 0 to remove and 1 not upgraded.
Need to get 22.2 MB of archives.
After this operation, 78.4 MB of additional disk space will be used.
Do you want to continue? [Y/n]
......................
Processing triggers for libc-bin (2.23-0ubuntu11.2) ...
Setting up libmpfr4:amd64 (3.1.4-1) ...
Setting up libmpc3:amd64 (1.0.3-1) ...
Setting up binutils (2.26.1-1ubuntu1~16.04.8) ...
Setting up gcc-5-arm-linux-gnueabi-base:amd64 (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libisl15:amd64 (0.16.1-1) ...
Setting up cpp-5-arm-linux-gnueabi (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up cpp-arm-linux-gnueabi (4:5.3.1-1ubuntu1) ...
Setting up libcc1-0:amd64 (5.4.0-6ubuntu1~16.04.12) ...
Setting up binutils-arm-linux-gnueabi (2.26.1-1ubuntu1~16.04.8) ...
Setting up gcc-5-cross-base (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libc6-armel-cross (2.23-0ubuntu3cross1) ...
Setting up libgcc1-armel-cross (1:5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libgomp1-armel-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libatomic1-armel-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libasan2-armel-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libstdc++6-armel-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libubsan0-armel-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up libgcc-5-dev-armel-cross (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up gcc-5-arm-linux-gnueabi (5.4.0-6ubuntu1~16.04.9cross1) ...
Setting up gcc-arm-linux-gnueabi (4:5.3.1-1ubuntu1) ...
Setting up linux-libc-dev-armel-cross (4.4.0-18.34cross1) ...
Setting up libc6-dev-armel-cross (2.23-0ubuntu3cross1) ...
Processing triggers for libc-bin (2.23-0ubuntu11.2) ...
Может у кого-то появится мысль.
Ps вдаваться в подробности что там за софтина - смысла нет (модифицированный исходник очень популярной консольной софтины под linux), т.к. скомпилированный по конфигу выше бинарник выдает «kernel too old». Последний раз компилировал удачно на голой Ubuntu эту сборку месяцев 7-9 назад.
Дополнил:
Проблема не в том чтобы получить openssl (static) для целевого ядра, а найти решение как «откатить» gcc-arm-linux-gnueabi и/или или его зависимости, чтобы компилировать не получая «kernel too old», в том числе и для бинарника openssl. Openssl тут приведен вообще исключительно ради реального примера проблемы.