Swupdate的aarch64交叉编译

这篇具有很好参考价值的文章主要介绍了Swupdate的aarch64交叉编译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇博客我们简单测试了swupdate的基础功能,当时使用的是buildroot进行编译的,依赖关心有buildroot进行处理了。今天我自己手动编译一些swupdate。下面记录了编译swupdate的过程。
基本过程就是下载源码,配置选项,然后进行编译。
swupdate是在github上下载的,下载地址为:

https://codeload.github.com/sbabic/swupdate/tar.gz/refs/tags/2023.05

一、依赖

libconfig是必须支持的库,下载地址如下:

http://hyperrealm.github.io/libconfig/dist/libconfig-1.7.3.tar.gz

如果选中了lua功能,需要下载和编译lua包,连接如下:

https://www.lua.org/ftp/lua-5.4.6.tar.gz

如果选中了delta功能,就拥有对delta升级能力(二进制差分)。librsync下载路径如下:

https://github.com/librsync/librsync/releases
https://codeload.github.com/zchunk/zchunk/tar.gz/refs/tags/1.3.1

如果选中了archive功能,就可以对归档文件的处理,就依赖libarchive。 libarchive库下载路径如下:

https://github.com/libarchive/libarchive/releases/tag/v3.6.2

如果选中了diskpart功能,就可以对disk分区进行操作。就依赖util-linux/misc-utils库下载地址

https://github.com/util-linux/util-linux/blob/master/misc-utils/blkid.c

如果选中了ext234功能,就可以对disk分区进行格式化操作。就依赖libext2fs库,下载地址

https://sourceforge.net/projects/e2fsprogs/

我们的设备使用的emmc所以不需要支持mtd,把mtd功能取消掉,就不用处理mtd的依赖了。如果你需要,那么你自行处理。

二、编译依赖库

2.1 lua库

lua库就是比较简单,直接使用MakefIle进行构建。那么我们就直接修改Makefile进行交叉编译。我这里使用了quilt作为patch工具,来记录修改,其实用git更好,我就是试一下quilt。下面修改记录,主要是进行交叉编译和lua.pc文件生成功能修改。

 Index: lua-5.4.6/Makefile
===================================================================
--- lua-5.4.6.orig/Makefile
+++ lua-5.4.6/Makefile
@@ -10,13 +10,14 @@ PLAT= guess
 # so take care if INSTALL_TOP is not an absolute path. See the local target.
 # You may want to make INSTALL_LMOD and INSTALL_CMOD consistent with
 # LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h.
-INSTALL_TOP= /usr/local
+INSTALL_TOP= $(AARCH64_SYSROOT)/usr/local
 INSTALL_BIN= $(INSTALL_TOP)/bin
 INSTALL_INC= $(INSTALL_TOP)/include
 INSTALL_LIB= $(INSTALL_TOP)/lib
 INSTALL_MAN= $(INSTALL_TOP)/man/man1
 INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V
 INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V
+INSTALL_PKG= $(INSTALL_TOP)/lib/pkgconfig
 
 # How to install. If your install program does not support "-p", then
 # you may have to run ranlib on the installed liblua.a.
@@ -54,8 +55,8 @@ all:	$(PLAT)
 $(PLATS) help test clean:
 	@cd src && $(MAKE) $@
 
-install: dummy
-	cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
+install: dummy pc
+	cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD) $(INSTALL_PKG)
 	cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
 	cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
 	cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
@@ -99,6 +100,20 @@ pc:
 	@echo "prefix=$(INSTALL_TOP)"
 	@echo "libdir=$(INSTALL_LIB)"
 	@echo "includedir=$(INSTALL_INC)"
+	@echo "prefix=$(INSTALL_TOP)"     > $(INSTALL_PKG)/lua.pc
+	@echo -n "libdir=$$"   >> $(INSTALL_PKG)/lua.pc
+	@echo "{prefix}/lib"   >> $(INSTALL_PKG)/lua.pc
+	@echo -n "includedir=$$" >> $(INSTALL_PKG)/lua.pc
+	@echo "{prefix}/include" >> $(INSTALL_PKG)/lua.pc
+	@echo ""                          >> $(INSTALL_PKG)/lua.pc
+	@echo "Name: lua"                 >> $(INSTALL_PKG)/lua.pc
+	@echo "Description: lua library." >> $(INSTALL_PKG)/lua.pc
+	@echo "Version: $R"                >> $(INSTALL_PKG)/lua.pc
+	@echo -n "Libs: -L$$"  >> $(INSTALL_PKG)/lua.pc
+	@echo "{libdir} -llua"  >> $(INSTALL_PKG)/lua.pc
+	@echo -n "Cflags: -I$$"  >> $(INSTALL_PKG)/lua.pc
+	@echo "{includedir}"  >> $(INSTALL_PKG)/lua.pc
+
 
 # Targets that do not create files (not all makes understand .PHONY).
 .PHONY: all $(PLATS) help test clean install uninstall local dummy echo pc
Index: lua-5.4.6/src/Makefile
===================================================================
--- lua-5.4.6.orig/src/Makefile
+++ lua-5.4.6/src/Makefile
@@ -6,13 +6,19 @@
 # Your platform. See PLATS for possible values.
 PLAT= guess
 
-CC= gcc -std=gnu99
+TOOLCHAIN-PREFIX= aarch64-linux-gnu-
+
+CC= $(TOOLCHAIN-PREFIX)gcc -std=gnu99
 CFLAGS= -O2 -Wall -Wextra -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS)
 LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
 LIBS= -lm $(SYSLIBS) $(MYLIBS)
 
-AR= ar rcu
-RANLIB= ranlib
+CFLAGS+= --sysroot=$(AARCH64_SYSROOT)
+LDFLAGS+= --sysroot=$(AARCH64_SYSROOT)
+
+
+AR= $(TOOLCHAIN-PREFIX)ar rcu
+RANLIB= $(TOOLCHAIN-PREFIX)ranlib
 RM= rm -f
 UNAME= uname

2.2 libconfig库

常规的configure编译,3步走。我这里是将系统的CC环境变量修改了的,如下:

./configure --host=aarch64  --with-sysroot=$AARCH64_SYSROOT --prefix=$AARCH64_SYSROOT/usr
make
make install

环境变量
CXX=aarch64-linux-gnu-g++
LD=aarch64-linux-gnu-ld
AARCH64_SYSROOT=/home/yp/workspace/toolchain/staging-8.3
AR=aarch64-linux-gnu-ar
NM=aarch64-linux-gnu-nm
CC=aarch64-linux-gnu-gcc

2.3 zchunk库

使用meson进行编译,交叉编译时,一定要把环境变量中的CC,AR,NM等变量unset掉。我的编译环境变量中CC=aarch64-linux-gnu-gcc时,meson setup --cross-file crosscompile.txt build-aarch64一直报错。报错如下:

zchunk-1.3.1$ meson setup --cross-file crosscompile.txt  build-aarch64
The Meson build system
Version: 0.53.2
Source dir: /home/yp/workspace/packages/zchunk-1.3.1
Build dir: /home/yp/workspace/packages/zchunk-1.3.1/build-aarch64
Build type: cross build
Project name: zck
Project version: 1.3.1
/lib/ld-linux-aarch64.so.1: No such file or directory

meson.build:1:0: ERROR: Executables created by c compiler aarch64-linux-gnu-gcc are not runnable.

A full log can be found at /home/yp/workspace/packages/zchunk-1.3.1/build-aarch64/meson-logs/meson-log.txt

当我把编译的环境变量CC,AR,NM等unset后,执行setup恢复正常。 crosscompile.txt内容如下:

[binaries]
c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-g++'
ar = 'aarch64-linux-gnu-ar'
strip = 'aarch64-linux-gnu-strip'

[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'

[properties]
sys_root = '/home/yp/workspace/toolchain/staging-8.3'

[build_machine]
system = 'linux'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

完整的编译流程如下:

unset CC AR CXX NM LD LDFLAGS PKG_CONFIG_PATH

配置交叉编译
meson setup --cross-file crosscompile.txt  --prefix=/your/aarch64_sysroot/usr/local build-aarch64

如果你有什么东西漏配置了,可以编译路径下执行
meson --reconfigure --prefix=/your/aarch64_sysroot/usr/local

执行编译
ninja

执行安装
ninja install

2.4 librsync库编译

是cmake进行编译,需要注意的是,我的编译中环境变量CC,AR,NM都是修改过的,已经是交叉工具链。编译脚本如下。

#!/bin/bash
rm build -rf

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$AARCH64_SYSROOT/usr/local ..

if [ $? -ne 0 ];then
	echo "cmake .. error"
	exit 1
fi

make

if [ $? -ne 0 ];then
	echo "make  error"
	exit 1
fi

make install

if [ $? -ne 0 ];then
	echo "make install error"
	exit 1
fi

echo "all is ok"

env命令的打印, 编译的环境变量如下:

CXX=aarch64-linux-gnu-g++
LD=aarch64-linux-gnu-ld
AARCH64_SYSROOT=/home/yp/workspace/toolchain/staging-8.3
AR=aarch64-linux-gnu-ar
NM=aarch64-linux-gnu-nm
CC=aarch64-linux-gnu-gcc

2.5 编译zlib

之前已经移植了,今天就不在移植了。

2.6 编译archive

libarchive 是一个可以创建和读取多种不同流式归档格式的程序库,包含了最流行的 tar 格式变体、一些 cpio 格式,以及所有的 BSD 和 GNU ar 变体。bsdtar 是一个使用 libarchive 的 tar 实现。
编译的环境变量如2.4。编译脚本如下:

#!/bin/bash
rm cbuild -rf

mkdir cbuild
cd cbuild

export PKG_CONFIG_PATH=$AARCH64_SYSROOT/usr/lib/pkgconfig:$AARCH64_SYSROOT/usr/local/lib/pkgconfig
export CFLAGS="--sysroot=$AARCH64_SYSROOT -I$AARCH64_SYSROOT/include -I$AARCH64_SYSROOT/usr/local/include"
export LDFLAGS="--sysroot=$AARCH64_SYSROOT -L$AARCH64_SYSROOT/usr/loacl/lib"

cmake -DCMAKE_INSTALL_PREFIX=$AARCH64_SYSROOT/usr/local ..

if [ $? -ne 0 ];then
	echo "cmake .. error"
	unset PKG_CONFIG_PATH CFLAGS LDFLAGS 
	exit 1
fi

make

if [ $? -ne 0 ];then
	echo "make  error"
	unset PKG_CONFIG_PATH CFLAGS LDFLAGS 
	exit 1
fi

make install

if [ $? -ne 0 ];then
	echo "make install error"
	unset PKG_CONFIG_PATH CFLAGS LDFLAGS 
	exit 1
fi

unset PKG_CONFIG_PATH CFLAGS LDFLAGS 
echo "all is ok"

2.6 编译 blkid fdisk uuid

blkid - command-line utility to locate/print block device attributes.

又来了一个meson编译的东西,我们模仿上面的编译流程。完整的编译流程如下:

unset CC AR CXX NM LD LDFLAGS PKG_CONFIG_PATH

配置交叉编译
meson setup --cross-file crosscompile.txt  --prefix=/your/aarch64_sysroot/usr/local build-aarch64 -Dbuild-libmount=disabled

如果你有什么东西漏配置了,可以编译路径下执行
meson --reconfigure --prefix=/your/aarch64_sysroot/usr/local

执行编译
ninja

执行安装
ninja install

编译中找不到Python.h头文件。我已经不想再去搞Python了,我们直接把对应的工具disabled掉-Dbuild-libmount=disabled,-Dbuild-plymouth-support=disabled。这些定义我是在meson.build文件中看到的。但是disbale掉还是解决不了问题。

meson --reconfigure --prefix=/your/aarch64_sysroot/usr/local -Dbuild-libmount=disabled -Dbuild-plymouth-support=disabled

配置完后是这种状态
util-linux 2.39

  components
              libblkid: enabled
               libuuid: enabled
              libmount: disabled
          libsmartcols: enabled
              libfdisk: enabled
                 uuidd: enabled
    cryptsetup support: disabled
      plymouth support: disabled

       static programs: 


然而还是没有解决问题,ninja就是要编译libmount中的东西,使用pythone。那我们就单独编译 blkid,fdisk,uuidd,然后再手动安装

ninja blkid
cp ./libblkid/libblkid.so* /home/hy/workspace/toolchain/staging-8.3/usr/local/lib -d
mkdir /home/hy/workspace/toolchain/staging-8.3/usr/local/include/blkid/ -p
cp libblkid/blkid.h /home/hy/workspace/toolchain/staging-8.3/usr/local/include/blkid/
cp ./meson-private/blkid.pc /home/hy/workspace/toolchain/staging-8.3/usr/local/lib/pkgconfig/
 

ninja fdisk
cp ./libfdisk/libfdisk.so* /home/yp/workspace/toolchain/staging-8.3/usr/local/lib -d
mkdir -p /home/yp/workspace/toolchain/staging-8.3/usr/local/include/libfdisk 
cp libfdisk/libfdisk.h /home/yp/workspace/toolchain/staging-8.3/usr/local/include/libfdisk
cp meson-private/fdisk.pc /home/yp/workspace/toolchain/staging-8.3/usr/local/lib/pkgconfig/

ninja uuidd
mkdir -p /home/hy/workspace/toolchain/staging-8.3/usr/local/include/uuid
cp ./libuuid/src/uuidd.h ./libuuid/src/uuid.h ./libuuid/src/uuidP.h /home/hy/workspace/toolchain/staging-8.3/usr/local/include/uuid
cp ./build-aarch64/libuuid/libuuid.so* /home/hy/workspace/toolchain/staging-8.3/usr/local/lib -d
cp ./build-aarch64/meson-private/uuid.pc /home/hy/workspace/toolchain/staging-8.3/usr/local/lib/pkgconfig/

但是编译报错找不到一些符号,我看了半天没有找到解决办法,改天再研究一下,后来发现在/lib/libblkid.a已经有一个旧库了,连接查找库错误了。删除旧的库即可正常编译分区相关功能。

2.7 编译ext2/3/4支持 libext2fs

常规编译三步走,如下:


mkdir build
cd build
build$ ../configure --prefix=$AARCH64_SYSROOT/usr/local --host=aarch64   --with-sysroot=$AARCH64_SYSROOT 
make

install

2.7 编译swupdate

1)设置 SWUpdate Settings → Build Options

设置工具链前缀:aarch64-linux-gnu-

设置交叉编译的sys_root: /your/aarch64_sysroot

设置LD选项:-ldl -lm (后面编译会报错,所以加上这2个库)

选中你需要的功能,然后进行make编译。当报错缺头文件时,大概率是你的库没有安装。这里举例几个错误场景。

  • 场景1,lua的函数找不到,是因为没有连接lua库,查看前面的打印,可以看出来没有找到lua.pc,认为没有lua库。但程序又选中了lua的支持。
报错:
ld: lua_interface.c:(.text.update_table+0x200): undefined reference to `lua_pushstring'

lua.pc内容:
$ cat ~/workspace/toolchain/staging-8.3/usr/local/lib/pkgconfig/lua.pc 
prefix=/home/yp/workspace/toolchain/staging-8.3/usr/local
libdir=${prefix}/lib
includedir=${prefix}/include

Name: lua
Description: lua library.
Version: 5.4.6
Libs: -L${libdir} -llua
Cflags: -I${includedir}


解决办法:
export PKG_CONFIG_PATH=/home/yp/workspace/toolchain/staging-8.3/usr/local/lib/pkgconfig/ 
  • 场景2, 其他符号找不到,缺少库连接,使用make menuconfig去添加链接库即可。我这里添加了-ldl -lm连接库。
liblua.a(loadlib.o): undefined reference to symbol 'dlsym@@GLIBC_2.17'
(.text+0x398): undefined reference to `sin'

  • 场景3,在menuconfig中增加-lcom_err,这个库随e2fsprogs-1.47.0一起编译产生。加了还报找不到com_err,我看了一下我使用的是静态库libcom_err.a,静态库很依赖编译时的路径。于是我手动调整了一下该路径的路径,就编译成功了。
    将-lcom_err 与 -lext2fs放在一个group里面。那我们怎么自动成功呢?虽然ext2fs.pc的中已经写了libext2fs依赖com_err,但是编译脚本任然没有自动将该库连接进去。看来自能手动修改Makefile.flags文件在ext2fs 后面增加com_err。好吧这样就能编译成功了
in function `ext2fs_inode_alloc_stats2':
alloc_stats.c:(.text+0xf8): undefined reference to `com_err'

手动编译成功指令
aarch64-linux-gnu-gcc -Wall -Wshadow -Wwrite-strings -Wundef -Wstrict-prototypes -Wunused -Wunused-parameter -Wunused-function -Wunused-value -Wmissing-prototypes -Wmissing-declarations -Wno-format-security -Wno-format-truncation -Wold-style-definition -finline-limit=0 -fno-builtin-strlen -fomit-frame-pointer -ffunction-sections -fdata-sections -fno-guess-branch-probability -funsigned-char -falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1 -static-libgcc -fno-unwind-tables -fno-asynchronous-unwind-tables -Os --sysroot=/home/hy/workspace/toolchain/staging-8.3 -I/home/hy/workspace/toolchain/staging-8.3/usr/local/include -ldl -lm -lcom_err -Wl,-E -o swupdate_unstripped -Wl,--sort-common -Wl,--sort-section,alignment -Wl,--gc-sections -Wl,--start-group core/built-in.o handlers/built-in.o bootloader/built-in.o suricatta/built-in.o ipc/built-in.o corelib/lib.a mongoose/lib.a parser/lib.a fs/lib.a -Wl,--end-group -Wl,--start-group -lpthread -llua -lcurl -lconfig -larchive -lcrypto -lssl -lz -lzstd -lfdisk -lblkid -lext2fs -luuid -lblkid -lrsync -lzck -lcom_err  -Wl,--end-group

最终编译出来的文件swupdate的依赖库如下,有些库是使用的静态库,如lua,ext2fs库:

swupdate-2023.05$ readelf -d swupdate

Dynamic section at offset 0x78d40 contains 35 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libcurl.so]
 0x0000000000000001 (NEEDED)             Shared library: [libarchive.so.19]
 0x0000000000000001 (NEEDED)             Shared library: [libcrypto.so.1.1]
 0x0000000000000001 (NEEDED)             Shared library: [libz.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libzstd.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [librsync.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libzck.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 
libarchive-3.6.2.tar.gz  librsync-2.3.4.tar.gz  swupdate-2023.05.tar.gz  zchunk-1.3.1.tar.gz
libconfig-1.7.3.tar.gz   lua-5.4.6.tar.gz       util-linux-2.39.tar.gz   e2fsprogs-1.47.0.tar.gz

最终我们支持了分区操作,ext文件格式操作,delta,签名,lua等功能的swupdate已经是比较全的了,另外zmq(ipc功能), uboot是没有支持的。
我们测试了一些功能正常,编译这到这里吧!!还是自动构建套件好选中就行,例如openwrt,buildroot等。如果这篇文章帮助到你,请帮忙点赞。文章来源地址https://www.toymoban.com/news/detail-520415.html

到了这里,关于Swupdate的aarch64交叉编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu 20.04 aarch64 平台交叉编译 opencv

    win10 64 位 VMware Workstation Pro 16 虚拟机 虚拟机安装 ubuntu 20.04 opencv 版本: 来自 github 当前最新 4.7 交叉编译 opencv,用于 嵌入式 aarch64 平台 可以直接从 github 下载 release 版本或者 使用 git clone 最新的 opencv 仓库 github opencv https://github.com/opencv/opencv git clone https://github.com/opencv/openc

    2024年02月09日
    浏览(51)
  • libbpf-bootstrap安卓aarch64适配交叉编译

    起初我也认为,像 libbpf-bootstrap 这样在ebpf程序开发中很常用的框架,理应支持不同架构的交叉编译。尤其是向内核态的ebpf程序本身就是直接通过clang的 -target btf 直接生成字节码,各个内核上的ebpf虚拟机大同小异,对于字节码大概率是兼容的。那么问题就落在用户态程序生成

    2024年02月09日
    浏览(32)
  • ubuntu 20.04 aarch64 平台交叉编译 opencv 静态库

    win10 64 位 VMware Workstation Pro 16 虚拟机 虚拟机安装 ubuntu 20.04 opencv 版本: 来自 github 当前最新 4.7 交叉编译 opencv 生成静态库(.a),用于 嵌入式 aarch64 平台。 参考上一篇 ubuntu 20.04 aarch64 平台交叉编译 opencv 默认会生成 动态库(so),可以通过cmake 配置 -DBUILD_SHARED_LIBS=OFF 关闭动

    2024年02月08日
    浏览(52)
  • 交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64

    1.交叉编译是什么,为什么要交叉编译 编译:在一个平台上生成在该平台上的可执行代码 交叉编译:在一个平台上生成在另一个平台上的可执行代码 交叉编译的例子:如51单片机的可执行代码(hex文件)是在集成环境keil上面编译完成的,我们只需要将编译好的可执行代码下

    2024年02月15日
    浏览(34)
  • Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程

    苦辣酸甜时光八载,春夏秋冬志此一生 Qt简介: Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。 Qt 支持的操作系统有很多,例如通用

    2024年01月23日
    浏览(40)
  • Ubuntu20.04_x86交叉编译aarch64版本的tslib1.22步骤

    编译环境:小米笔记本+Windows10+VMware17 +Ubuntu20.04虚拟机 编译目标:需要生成aarch64环境下对应的触摸屏驱动。 编译步骤: 1、下载aarch64-linux-gnu编译器,下载地址为:https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.x

    2024年02月16日
    浏览(38)
  • 带wiringPi库的交叉编译 ---宿主机x86Ubuntu,目标机ARMv8 aarch64(香橙派)

    带wiringPi库的交叉编译如何进行 先交叉编译wiringPi库,编译出的库适合香橙派,这时候交叉编译可执行程序的平台和链接库的格式也是正确的 ,然后通过-I和-L来指定链接的wiringPi库的头文件和库的位置,但是现在还没有学习过,后面学了补上 此时如果把wiringPi库拿到Ubuntu上进

    2024年02月15日
    浏览(36)
  • 在Linux、Ubuntu中跨平台编译ARM(AARCH64)平台的binutils

    Binutils 是GNU(https://www.gnu.org/)提供的一组二进制工具的集合。通常,在已经安装了Linux操作系统的个人电脑上,系统就已经自带了这个工具集。但在进行嵌入式开发的时候,可能会用到支持ARM64平台的Binutils,这时就需要用到交叉编译。 此前,在【1】我们已经介绍过Ubuntu中交

    2024年02月05日
    浏览(51)
  • aarch64-linux-gcc安装编译及生成so动态库和调用

    官方二进制下载 Ubuntu packages 提供了软件包: gcc-arm-linux-gnueabihf (4:7.4.0-1ubuntu2.3 以及其他的) 。 建议直接从 linaro 的官网下载相应版本的 gcc-linaro 交叉编译工具,并直接选择带有二进制的文件,即在官网入口处选择 binaries 路径,该文件夹下面包含各种版本的已经编译好的 aarch

    2024年02月13日
    浏览(40)
  • 基于Linux平台交叉编译 flutter arm64应用

        操作系统ubuntu 20.04,开发工具Android Studio + Flutter,运行平台RK3566 Linux。截止现在Flutter官方尚未正式对Linux arm64进行支持,仅有flutter-elinux可用。开发环境的搭建过程遇到了很多的坑,幸运的是最终完成了。为避免后来者再次浪费时间,特撰此文以飨读者。     本文仅记

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包