问题标签 [linaro]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded-linux - 带有 RTC 板的 Tinkerboard 不更新系统时间
我正在使用 ASUS TinkerBoard,OS Linaro 9.5 - Kernel 4.4.132
我添加了一个基于 DS3231 芯片的小 RTC 板。
系统创建添加到 /dev/rtc0 和 /dev/rtc 的设备 /dev/rtc1(链接到 /dev/rtc0)。
我可以通过i2cdetect和hwclock命令与 RTC 芯片交谈,但我有一个奇怪的行为。
这是我的测试——当然我已经断开网络以避免 ntp 同步:
没有 RTC:每次上电时,板/操作系统都会从 2016 年 11 月 3 日 00:00 重置日期和时间
使用 RTC:
- 通过 Internet 连接同步日期/时间
- 强制设置的 RTC 值
hwclock -f /dev/rtc1 --systohc
- 通过 'hwclock -f /dev/rtc1 --get' 检查值
- 断开网络并关闭电路板 - 假设在 18:00
- 18:15 给电路板加电
- 当桌面准备好时,我看到系统时间设置为 18:00(?)
- 如果我阅读 RTC
hwclock -f /dev/rtc1 --get
并且我有 18:15 - 数据正确设置为今天(!)
好像恢复了系统日期,掉电时系统时间冻结,RTC时间正确但没有恢复到系统时间。
任何想法?
qt - Qt With Raspi:错误编译器为不同的 ABI 生成代码
我已按照此视频 ( https://www.youtube.com/watch?v=TmtN3Rmx9Rk ) 中的所有说明设置开发环境。一切都很好,直到在 qt creator 中添加编译器。添加设备看起来很简单,但添加编译器并不顺利。gcc 编译器添加正在平滑,而 g++ 没有。尝试添加 g++ 时出现以下错误。
错误:编译器为不同的 ABI 生成代码:arm-linux-generic-elf-32bit、x86-linux-generic-elf-64bit
我该如何解决 ?
注意:我使用的是 Qt 5.15.2
git - 如何修复 bitbake failed to fetch git 错误?
在对 Yocto rocko 构建进行 bitbaking 时,出现此错误:
go-systemd_git.bb 文件:
我手动克隆了 repo,确认提交 b4a58d95188dd092ae20072bac14cece0e67c388 在 master 中,并手动将其放入我的构建文件夹,但我仍然收到此错误。
c - GCC 启动代码 _start 不以 main() 结尾
我只能在符号上找到零碎的信息_start
,从目标启动代码中调用它以建立C运行时环境。这对于确保在分支到main()
.
就我而言,我使用的是带有 ARM Cortex-R4F 核心 CPU 的 MCU。当设备重置时,我会执行 MCU 制造商推荐的所有步骤,然后尝试_start
使用以下代码行跳转到符号:
我正在使用类似于以下内容的内容来链接程序:
armeb-eabi-gcc-7.5.0" -marm -fno-exceptions -Og -ffunction-sections -fdata-sections -g -gdwarf-3 -gstrict-dwarf -Wall -mbig-endian -mcpu=cortex-r4 -Wl,-Map,"app_tms570_dev.map" --entry main -static -Wl,--gc-sections -Wl,--build-id=none -specs="nosys.specs" -o[OUTPUT FILE NAME HERE] [ALL OBJECT FILES HERE] -Wl,-T[LINKER COMMAND FILE NAME HERE]
在这种情况下,我的工具链是gcc-linaro-7.5.0-2019.12-i686-mingw32_armeb-eabi
,因为我的 MCU 设备是大端的,所以正在使用它。
当我跟踪对 symbol 的调用时_start
,我可以看到我的程序分支到 symbol_start
然后发生了一些意想不到的事情。
首先,有几个地方调用了以下指令:
EF123456 svc #0x123456
这基本上会生成一个软件中断,这会导致程序跳转到我为设备配置的软件中断处理程序。
其次,设备最终分支到__libc_init_array
then _init
。但是,符号_init
不包含任何分支指令并允许程序流入_fini
,它也不包含任何分支指令并允许程序流入接下来放置在内存中的任何代码。正如预期的那样,这最终会导致某种类型的中止异常。
与 _init 和 _fini 相关的反汇编:
根据我阅读的其他一些文档,我也尝试main()
直接调用,但这只是导致程序跳转到main()
没有初始化任何东西。我还尝试调用__main()
类似于使用 ARM 编译器时所做的操作以执行启动代码的符号,但未找到此符号。
请注意,这是针对不使用半主机的裸机系统。
我的问题是:有没有办法设置系统并调用将自动建立 C 运行时环境并分支到main()
使用 GCC 链接器的函数?
目前,我已经实现了我自己的函数来初始化.data
部分,并且这些.bss
部分已经在复位时使用 MCU 设备的内置功能归零。
在此处添加更多详细信息:我正在使用的特定 MCU 不应该相关,特别是考虑到以下讨论。
首先,我已经在汇编文件中设置了设备的异常向量:
IRQ 和 FIQ 中断也有两条指令,但它们是根据 MCU 数据表设置的。我已经为未定义的指令、预取中止、数据中止和无效向量异常定义了处理程序。对于软件异常,我使用一些程序集跳转到可以在运行时更改的地址。我的启动顺序从c_int00
. 这些都已经过测试并且没有问题。
我的复位处理程序负责按照 MCU 数据表初始化 MCU 所需的所有步骤。这包括初始化 CPU 寄存器和堆栈指针,它们是使用链接器文件中的符号加载的。
如上所述,我正在使用的工具链包括 C 标准库和其他库,这些库可以毫无问题地编译和链接我的程序。这包括_start
我之前提到的符号。
据我了解,该函数_start
通常包含main()
. 在它调用main()
它之前,它会初始化.bss
和.data
分段,配置堆,以及执行一些其他任务来设置环境。返回时main()
,它会执行一些清理任务并分支到指定的exit()
功能。(旁注:_start
根据我从 linaro 下载的源代码在 newlib 中定义)。
在此处的单独回复中有一些关于此的详细信息:
我一直在使用 ARM 编译器作为同一个项目的替代方案。在那里,__main
执行这些功能。对于堆栈初始化,我基本上为它提供了一个空钩子函数,而对于退出,我为它提供了一个安全终止程序的函数,该函数应main()
出于某种原因返回。我不确定GCC是否需要这样的东西。
我会注意到我已经包含了 option-specs="nosys.specs"
而没有 option -nostartfiles
。我的理解是这样可以避免实现一些我的应用程序中不想使用的功能,比如I/O操作,而是链接启动代码。
我没有在我的项目中使用堆,因为动态内存使用是不受欢迎的,但我希望能够主要使用启动代码以避免必须记住.data
手动初始化部分。上面我注意到我的应用程序是baremetal-ish。我实际上正在使用 RTOS 并将内存分区为块,以便我可以使用设备 MPU。
linux - ffplay不能播放mp4视频,但是mpv可以
我想在 Debian 9 上播放 mp4 视频。
首先,我尝试使用 ffplay 播放视频。我使用该命令ffplay test.mp4
,但它无法播放,并显示许多相同的错误Receive_frame and send_packet both returned EAGAIN, which is an API violation.
。有详细的日志。
然后,我尝试使用 mpv 播放视频。我使用命令mpv test.mp4
,它成功播放了视频。有详细的日志。
我对视频编码和解码了解不多。mpv 和 ffplay 都使用 ffmpeg 进行视频解码,但是为什么结果不一样呢?提前致谢。
有我系统的信息。
buildroot - Buildroot 使用外部 linaro toolchian 配置镜像
我对 buildroot 外部工具链有疑问;最后,当我输入“ make linux-menuconfig ”命令时,我收到了以下错误(我想将此配置菜单用于 eth 驱动程序)
在此命令之前,我已成功完成“make”,工具链配置如下:
当我检查 arm-linux-gnueabihf 时,我收到以下输出,我已经安装了 linaro gnueabihf 工具链并将其保存为“gcc-linaro”
到时候你能指导我吗?
我想将 eth 接口添加到图像和 arm-linux-gnueabihf 外部工具链中,
我的主机是 ubuntu 18
buildroot 版本是 buildroot-2021.02.5
linaro 版本是 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
谢谢!
linux-kernel - 关于 Linaro 和 linux 内核映像生成的基本问题
我最近在研究 Linaro 并使用它为 linux 构建内核映像。看起来 Linaro 曾经有自己的图像创建工具,但它停止更新了?我设法找到了这样的链接:https ://git.linaro.org/ci/linaro-image-tools.git
但我可以看到,它最后一次更新是在 4~5 年前。而官方 Linaro 网站的下载部分https://www.linaro.org/downloads/似乎不再有图像工具部分(据我研究,该部分过去存在)。
所以在我看来,Linaro 主要专注于其工具链,不再支持像 Yocto 那样的自定义图像生成工具。这个对吗?
说到 Yocto,看起来 Yocto 支持使用外部工具链,其中包括 Linaro 工具链。因此,为了使用 Linaro 工具链进行编译,最好使用 Yocto 图像工具并从那里包含 Linaro 工具链吗?我有一些使用 Yocto 及其预定义图像来引导 beaglebone black board 的经验。但当时我没有使用外部工具链。现在我正在尝试学习使用 Linaro 工具链,但不确定在哪里/如何做。
我对这些主题相当陌生,所以希望我的问题对阅读本文的人有意义。谢谢你。
debian - GStreamer - 意外的 XShm 图像大小
我尝试在 Linaro (Debian) 中使用 GStreamer 显示网络摄像头。使用此管道时出现意外的 XShm 图像大小错误:
当我使用 videotestsrc 时它工作正常。
这是错误打印输出:
c - 如何修复警告:堆栈保护器不保护局部变量:使用 gcc-linaro-7.5.0-2019.12-x86_64_arm-eabi 的可变长度缓冲区
测试.c:
编译命令和警告:
我的源代码中的结构类似于Foo
上面显示的源代码,它无法更改,因此我可以用 main 函数做什么来解决警告?
任何帮助将非常感激!
gcc - 在 64 位 LFS/inode 的主机上使用 gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf 进行交叉编译
简介: 我们将 arm 板的交叉编译工具链从 32 位文件系统主机移至文件系统具有 inode > 2^32 的 64 位主机。使用gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf会导致错误
cc1plus: error: MYPATH: Value too large for defined data type
在哪里
这个工具链是为 64 位主机编译的,为什么它不能处理 64 位 inode?
Long:
我们在 32 位主机上使用了gcc-linaro-arm-linux-gnueabihf-4.8-2014.04 。最初在迁移到 64 位文件主机后,我们设置enable_ino64=0
并继续使用旧工具链。然而,这只对单台机器有影响,最终我们希望工具链能在公司的所有机器上工作。
当所有源文件(顺便说一句)驻留在 inode <= 32 位的文件服务器上时,我们可以使用gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf成功编译代码。