本文提供一種解決 Buildroot SIGSTKSZ 報錯途徑
解決途徑來源參考:Buildroot error when building with Ubuntu 21.10
其出現原因在于 GNU C Library 2.34 release announcement:
Add _SC_MINSIGSTKSZ and _SC_SIGSTKSZ. When _DYNAMIC_STACK_SIZE_SOURCE or _GNU_SOURCE are defined, MINSIGSTKSZ and SIGSTKSZ are no longer constant on Linux. MINSIGSTKSZ is redefined to sysconf(_SC_MINSIGSTKSZ) and SIGSTKSZ is redefined to sysconf (_SC_SIGSTKSZ). This supports dynamic sized register sets for modern architectural features like Arm SVE.
也就是 Buildroot 默認使用的 host-m4 版本太老了,導致出現了下面的問題:
解決途徑:
解決思路在于升級 host-m4
這個 package 的版本,因此進入到 buildroot/package/m4
的目錄,按照下面步驟操作即可,步驟 1 和 2 的兩個文件可以從https://github.com/buildroot/buildroot/tree/master/package/m4 這里獲取,也可以按照我下面的形式修改,或者直接從官方復制粘貼替換掉你本地的 m4.mk
和 m4.hash
文件。
- 配置
host-m4
為1.4.19
版本,修改m4.mk
文件:################################################################################ # # m4 # ################################################################################# M4_VERSION = 1.4.18 M4_VERSION = 1.4.19 M4_SOURCE = m4-$(M4_VERSION).tar.xz M4_SITE = $(BR2_GNU_MIRROR)/m4 M4_LICENSE = GPL-3.0+ M4_LICENSE_FILES = COPYING HOST_M4_CONF_OPTS = --disable-static$(eval $(host-autotools-package))
- 修改
m4.hash
文件,改為1.4.19
版本的包校驗值:# Locally calculated after checking pgp signature # sha256 f2c1e86ca0a404ff281631bdc8377638992744b175afb806e25871a24a934e07 m4-1.4.18.tar.xz # License files, locally calculated # sha256 8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903 COPYING # Locally calculated after checking pgp signature sha256 63aede5c6d33b6d9b13511cd0be2cac046f2e70fd0a07aa9573a04a82783af96 m4-1.4.19.tar.xz # License files, locally calculated sha256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 COPYING
- 刪除掉原本
buildroot/package/m4
中的兩個 patch,0001-fflush-adjust-to-glibc-2.28-libio.h-removal.patch
、0002-fflush-be-more-paranoid-about-libio.h-change.patch
(如果沒有可以略過)
回到 SDK 目錄就可以正常編譯了,可以看到 host-m4 這塊已經成功編譯過去了:
該方式可能并不是一種治標又治本的方式,原因可以參考文章 為開發板編譯最新的 Buildroot 系統 ,本質上編譯報錯的原因是 SDK 中的 buildroot 已經不適合目前的編譯環境,不僅僅是 host-m4 可能出現問題,其他模塊在編譯過程中也可能出現問題,解決辦法:
- 第一,使用 docker 搭建一個適配該 SDK 出廠的環境的編譯環境,例如:大部分廠商使用 Ubuntu-18.04(如果大家不想大費周章,那么該方法是最推薦的);
- 第二,直接升級 buildroot,也就是文章 為開發板編譯最新的 Buildroot 系統 的來源。