全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

【风火轮YY3568开发板免费体验】第四章:给 nan

时间:2023-08-16 14:15

人气:

作者:admin

标签: 开发板  RK3568  C  Linux  编译 

导读:本章记录下我针对 nanogui 写的 videoview 控件以及调试和测试过程。...

本章记录下我针对 nanogui 写的 videoview 控件,并且在海康的一个摄像头上测试通过的过程,在开发的过程中碰到了 segment fault的问题,通过导出 core 文件以及使用 gdb 很快定位出崩溃的原因,在这个过程中再次体验到了使用 buildroot 进行构建的快乐。但是我目前根据 nanogui 开发的程序尚未继承到 buildroot 当中,将 nanogui 继承到 buildroot 这个也算是后期的一个目标。

  • 修复ffmpeg编译一直出错,提示undefined av_xxxx
  • 使用 buildroot 编译 aarch64-linux-gdb定位 segment fault 问题
  • 在 solus 上编译 buildroot,修复相关编译错误

1. 链接 ffmpeg 库一直出错

首先看一下出错的提示:
l_ffmpeg_undef.png

后来参考了网上的解决方案,发现是引用 ffmpeg 头文件的时候缺少

#ifdef __cplusplus
extern "C" {
#endif
xxxxx /* ffmpeg 头文件 */
#ifdef __cplusplus
}
#endif

因为 ffmpeg 主要是 c 语言开发的所以,引用相关头文件的时候需要为 C++ 原文件进行一次兼容。要不然的话,就不能正常引用到对应的函数。

完整 videoview 控件的源码,我已经上传到我 fork 的 nanogui 仓库了。这里就不罗列了,这里展示下成功显示视频的相关照片:
00.jpg

11.jpg

2. 使用 gdb 定位 segment fault

在顺利完成 ffmpeg 的链接编译之后,开始运行可执行程序,发现 segment fault了,我尝试使用 gdbserver 和 gdb 配置进行定位,发现默认并没有编译出来 aarch64-linux-gdb。只能在 buildroot 中开启 host gdb 的编译,主要放开如下宏:

BR2_PACKAGE_HOST_GDB=y
BR2_PACKAGE_HOST_GDB_TUI=y
BR2_GDB_VERSION_8_1=y
BR2_GDB_VERSION="8.1.1"

编译出来后,在板子上修改 core 配置,放开生成 core 文件:ulimit -c unlimited。然后将 core 文件发送到 PC,再使用命令 aarch64-linux-gdb example1 core 对 example1进行调试(目前我的开发是直接修改的 example1.cpp进行的)。记得修改下 sysroot 和 solib-search,这部分可以放在当前目录的 .gdbinit 文件中:

set solib-search-path /home/yangyongsheng/Projects/debian_yy3568/YY3568-Debian10/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/
set sysroot ~/Projects/debian_yy3568/YY3568-Debian10/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/

记得还有修改下 ~/.gdbinit 文件:

set auto-load safe-path /

通过 gdb 很快就可以定位到出错的代码位置。

3. 在 solus 上编译 buildroot

家里的一台笔记本,我安装的是 solus,软件包可能没有 fedora 那么齐全,所以编译过程中碰到了一些问题,经过几天的搜索还好是顺利将 buildroot编译通过,通过这几天的排查问题,我感觉的 solus 依旧好用。有些软件包官方仓库没有就需要自己手动下载源码安装,我仅罗列一些我下载的:

├── libdb
├── libnsl
├── libtirpc
├── libxcrypt

特别地在编译 python2.7 的时候,总是出错,但是终端提示的问题只是一些警告信息,导致我一直搜索如何排除这些警告,实际还是走了一些弯路。可能是 unbuffer 的锅,因为我在使用 buildroot menuconfig 的时候使用默认的 unbuffer 总是无法在 solus 上弹出来 menuconfig 的配置界面(因为我要开启 gdb 编译选项),在 buildroot 的根目录直接 make menuconfig 确是可以的,后来我就强制修改 menuconfig 的时候不用 brmake 而是使用 make 规避了这个问题。下次碰到这个问题需要去对应的 buildroot 的根目录去 make 确认出错的根本原因,发现是链接 crypt 的时候出错的,通过强制创建 /lib/libcrypt.so 到的软链接修复了这个问题。

▸ ll /lib/libcrypt.so
lrwxrwxrwx root root 26 B Sun Aug 13 13:44:40 2023  /lib/libcrypt.so ⇒ /usr/local/lib/libcrypt.so

再展示下在 solus 下使用 buildroot 开心编译的截图:
buildroot_solus.png

通过这个过程我还发现了一个软件包集合的网站 https://dev.getsol.us/source,这里面包含了 solus 有关 python2.7 的配置编译依赖,最后顺利编译出来了 buildroot 选择的 python2.7。

审核编辑:汤梓红

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信