打印

如何快捷使用瑞芯微RK3568J开发板

[复制链接]
810|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
布罗利|  楼主 | 2024-12-19 16:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

概述

本文详细介绍了RK3568Linux、Android、Ubuntu系统编译过程中可能遇到的问题,包括设备树路径、源码编译不通过、内核编译配置错误、buildroot编译问题、交叉编译工具位置、编译与烧写区别、rockdev目录映像文件、串口数据丢失问题、menuconfig配置不生效以及源码解压与编译问题等,并给出了相应的解决方案,对于开发者在编译RK3568系统时具有很好的指导意义。

硬件平台:飞凌嵌入式RK3568/RK3568J 开发板

操作系统:Linux、Android、Ubuntu

目录

1、Linux设备树的路径是什么?

2、Linux 源码编译不通过,是什么原因?

3、Linux单独编译内核提示Actions Semi Platforms (ARCH_ACTIONS) [N/y/?] (NEW),导致编译失败,这是为什么?

4、Linux在buildroot编译qt5webengine 5.14.2时出错退出,是什么原因?

5:Linux在buildroot编译linux-tools时报错出错退出,是什么原因?

6、Linux源码目录下的交叉编译工具的位置在哪?

7、Linux交叉编译配置的环境变量路径: Linux执行./build.sh buildroot与执行全编译的区别

8:Linux在rockdev目录下的misc.img oem.img recovery.img userdata.img分别是什么意思?

9:Linux为什么运行我们官方的QT程序会报以下错误?

10:Linux系统在使用串口和其他传感器模块,会发生丢少量字节,怎样保证串口不丢失数据?

11:Linux/Ubuntu 通过make ARCH=arm64 menuconfig 配置内核后没有生效,是什么原因?

12:Linux/Ubuntu/Android源码解压失败,报错EOF归档失败?

13:Android 源码编译不通过?

14:Android手册内没有单独烧写部分,是不是不支持单独烧写?

15:源码编译图形界面配置错误电压。


--正文开始--

本文基于飞凌嵌入式RK3568开发板作为硬件平台展开论述,同时也对其他开发板用户提供了参考价值。文章深入探讨了在编译RK3568芯片所支持的Linux、Ubuntu及Android系统过程中,开发者可能遇到问题。通过对这些常见编译问题的细致剖析,并配以相应的解决思路,以期帮助开发者在编译RK3568相关系统时能更加顺畅无阻。 在此过程中,我们特别提醒开发者,面对编译中的复杂性与不确定性,需保持高度的耐心与细致入微的态度。同时,鼓励开发者积极利用官方发布的详尽文档以及活跃的社区资源,希望各位开发者都能成功构建出稳定可靠的RK3568 Linux、Ubuntu及Android系统。



1、Linux设备树的路径是什么?

当您的产品是飞凌嵌入式RK3568系列板卡时,在Linux内核中,设备树的路径通常位于kernel/arch/arm64/boot/dts/rockchip/目录下,具体文件名为OK3568-C-common.dtsi。这个文件包含了与OK3568-C系列处理器相关的设备树定义。

2:Linux 源码编译不通过,是什么原因?

问题排查方向,你可以参考以下几项。

①、源码路径与名称的稳定性:

全编译流程结束后,请确保源码的存储路径未发生变动,且源码文件夹的名称也未被更改。任何路径或名称的修改都可能阻碍后续的源码编译进程。

②、操作系统与虚拟环境的核查:

验证您的电脑是否运行的是Windows 10操作系统。

检查VMware虚拟机的版本是否为15。

核实Ubuntu操作系统的版本是否为18.04。

检查电脑是否达到16G内存,虚拟机是否是达到8G内存,虚拟机处理器数量4,每个处理器内核数量1(如果编译报错,可以增大内存到10G,配置为4M倍数)。

③、编译过程中的内存与线程管理:

编译失败的一个常见原因是编译过程中线程数量过多,导致内存资源被过度占用。因此,合理管理编译线程的数量,以避免内存耗尽。

④、源码完整性的校验:

在拷贝并合并文件后,请利用md5sum OK3568-linux-source.tar.bz2命令生成校验码,并将其与OK3568-linux-source.tar.bz2.checksum.txt文件中的内容进行比对,以确保源码的完整性。

⑤、虚拟机库文件的安装情况:

请检查虚拟机中是否已安装所有基本库和必要的开发库,这些库文件对于编译过程至关重要。

⑥、网络连接的稳定性:

使用ping www.forlinx.com命令或打开浏览器访问网页,以验证网络连接是否稳定。网络连接问题可能会影响编译过程中的文件下载或更新。

⑦、特定编译错误的应对措施:

若您在首次编译RK3568 Linux时遇到错误,建议再次执行./build.sh脚本进行尝试。有时,初次编译中的某些错误可能由于环境或配置的小幅波动而产生,再次执行脚本可能会解决这些问题。

3:在Linux系统中单独编译内核时,提示“Actions Semi Platforms (ARCH_ACTIONS) [N/y/?] (NEW)”,并且导致编译失败,这是为什么?

这种情况的原因是 .config 文件中的架构配置被错误地修改为X86架构。通常发生在用户直接在内核源代码目录下执行 make menuconfig 命令时,没有指定正确的目标架构。正确的命令应该是 make ARCH=arm64 menuconfig,其中 ARCH=arm64 指定了目标架构为ARM64。

为了解决这个问题,可以取消之前对编译脚本所做的修改,让编译脚本能够重新生成 .config 文件。重新生成 .config 文件后,使用正确的命令执行配置过程,这样就可以确保使用正确的架构配置进行内核编译。

4:在Buildroot环境中编译Qt5WebEngine 5.14.2时,Linux系统报错并退出,可能的原因是什么?

编译Qt5WebEngine 5.14.2时出错并退出的原因通常是由于虚拟机(VM)可用的运行内存不足。推荐的最低VM配置是8GB运行内存和200GB存储空间。然而,很多用户的宿主机只有8GB运行内存,这在实际操作中会导致问题。即使VM被设置为使用8GB运行内存,宿主机本身也需要占用一定的运行内存来维持其正常运行,因此实际上VM可用的内存会少于8GB。

此外,有些用户可能会修改产品资料中提供的VM镜像配置,比如增加内核数或调整运存大小。在某些情况下,为了成功编译Qt5WebEngine,用户可能需要将VM的运存增加到10GB或更高。

因此,如果在编译Qt5WebEngine时遇到内存不足的报错,解决方法通常是增加VM可用的运存空间。建议确保宿主机的运行内存在16GB及以上,以便为VM分配足够的内存资源。如果宿主机内存不足,可以尝试关闭一些不必要的应用程序或服务,或者升级宿主机的硬件配置。

5、在Buildroot环境中编译linux-tools时,Linux系统报错并退出,可能的原因是什么?




A:在Buildroot环境中编译linux-tools时遇到报错并退出,通常是因为当前开发环境中的/usr/bin/python软链接指向了Python 3,而linux-tools的源码编译过程可能需要使用Python 2。为了验证这一点,可以使用ls -l /usr/bin/python命令来查看/usr/bin/python软链接实际指向的是哪个Python版本。

如果/usr/bin/python指向的是Python 3,那么你需要将其更改为指向Python 2。可以通过删除现有的软链接并重新创建一个指向Python 2的软链接来完成。具体的命令如下:

首先,删除现有的/usr/bin/python软链接(需要管理员权限):

sudorm/usr/bin/python

然后,创建一个新的软链接指向/usr/bin/python2(同样需要管理员权限):

sudoln-s /usr/bin/python2 /usr/bin/python

注意,在执行这些命令之前,确保你的系统中已经安装了Python 2,并且/usr/bin/python2是可用的。此外,更改系统级的软链接可能会影响其他依赖于特定Python版本的程序,因此进行此类更改之前,请备份重要数据。

6、Linux源码目录下的交叉编译工具的位置在哪?

A:在正常使用情况下,我们推荐用户采用位于OK3568-linux-source/buildroot/output/OK3568/host/bin目录下的aarch64-linux-gcc和aarch64-linux-g++作为交叉编译工具。

该编译器查找的库文件路径位于OK3568-linux-source/buildroot/output/OK3568/host/aarch64-buildroot-linux-gnu/sysroot/usr目录下。用户可以在Buildroot的配置中实时更新或添加所需的编译库。

值得注意的是,因为源码的第一次编译耗时较长,对于某些用户而言可能并不希望进行全编译。针对这种情况,用户可以尝试使用位于OK3568-linux-source/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-***-gnu/bin目录下的aarch64-linux-gnu-gcc和aarch64-linux-gnu-g++作为交叉编译工具。

关于gcc-linaro-6.3.1和gcc-buildroot-9.3.0的详细信息,用户可以查阅OK3568-linux-source/docs/Rockchip_Developer_Guide_Linux_Software_CN.pdf这一瑞芯微官方文档。在该文档的5.2.4章节中,用户可以找到关于交叉编译工具的详细介绍和使用指南。

7:Linux交叉编译配置的环境变量路径:

配置环境变量:

export PATH=$PATH:/home/forlinx/linux-3568/OK3568-linux-source/buildroot/output/OK3568/host/bin

设置交叉编译并运行程序的命令行:

export PATH=/home/forlinx/3568/OK3568-linux-source/buildroot/output/OK3568/host/bin/:$PATH

aarch64-linux-gcc test.c -o test

8:Linux环境下执行./build.sh buildroot与执行全编译的区别

执行./build.sh buildroot

执行./build.sh buildroot只会在/OK3568-linux-source/buildroot/output/OK3568/images目录下生成文件系统镜像;

执行全编译:

执行全编译才会在/OK3568-linux-source/IMAGE/OK3568-C-LINUX_20230714.0034_RELEASE_TEST/IMAGES目录下生成各个分区文件和update.img文件。

执行./build.sh buildroot与进行全编译的主要区别在于它们的目标和输出。前者可能只生成一个或几个特定的文件系统镜像文件,而后者则生成一个完整的、可用于部署的软件包或镜像文件集合。使用RK3568进行开发或部署时,您应根据具体需求选择适当的构建方式。

9:Linux在rockdev目录下的misc.img oem.img recovery.img userdata.img分别是什么意思?

misc.img:

解释:此映像文件包含了一些杂项(miscellaneous)信息,这些信息通常与设备启动和配置相关。例如,bootloader的状态(如锁定或解锁),以及其他与设备安全和启动流程相关的参数。

oem.img:

解释:此映像文件包含了设备制造商(OEM)定制的数据。这些数据一般包括设备制造商的**、特定的驱动程序、配置文件,以及用于设备初始化或特定功能的脚本。

recovery.img:

解释:此映像文件包含了Recovery模式的文件系统。Recovery模式是一个独立于主操作系统的环境,用于设备的恢复、更新、修复问题,或创建/恢复备份。它通常提供了一个简单的用户界面,允许用户在没有主操作系统的情况下执行这些操作。

userdata.img:

解释:此映像文件包含了用户数据,如应用程序数据、用户设置、任务信息等。这是用户在使用设备时创建和存储的数据,对于设备的个性化配置和用户体验至关重要。

这些映像文件通常在设备刷机或升级时被使用。因此,在进行相关操作时,须格外小心谨慎,以避免因操作不当而导致的设备损坏或数据丢失。

10:Linux为什么运行我们官方的QT程序会报以下错误?

qt.qpa.wayland: No shell integration named “xdg-shell” found

A:此情况属于正常现象,在编译命令执行完毕后,RK3568开发板连接显示屏时即可观察到QT程序的界面已正常呈现。

11:Linux系统在使用串口和其他传感器模块,会发生丢少量字节,怎样保证串口不丢失数据?

可尝试修改设备树中与串口相关的配置,以启用直接内存访问(DMA)模式。具体操作步骤包括在对应的串口配置函数中,添加如下配置:

dma-names = “tx” , “rx”;

通过启用DMA模式,可以更有效地管理串口数据的传输,进而减少数据丢失的风险。

12:Linux/Ubuntu 通过make ARCH=arm64 menuconfig 配置内核后没有生效,是什么原因?

在Linux内核编译过程中,使用menuconfig命令主要是用于生成和修改.config文件,该文件包含了内核编译时的各种配置选项。然而,如果在执行menuconfig后,又通过编译脚本(如build.sh)来生成镜像,且该脚本中包含make defconfig命令,那么原本通过menuconfig设置的.config文件可能会被make defconfig命令重新生成的.config文件覆盖。

基于这一原理,要使menuconfig的配置生效,可以采取以下两种方法:

①、直接编辑defconfig文件:

找到与你的目标硬件(如飞凌嵌入式RK3568开发板)相对应的配置文件,通常位于kernel/arch/arm64/configs/目录下,文件名为OK3568-C-linux_defconfig。你可以直接编辑这个文件,将需要的配置选项添加进去,或者基于这个文件创建一个新的配置文件。然后,在编译时,使用make ARCH=arm64 OK3568-C-linux_defconfig命令来生成.config文件,这样.config文件就会包含你在defconfig文件中设置的配置选项。

②、修改编译脚本:

打开你的build.sh编译脚本,找到其中包含make defconfig命令的行(第509行),并将其注释掉。这样,在执行编译脚本时,就不会再执行make defconfig命令,从而避免覆盖通过menuconfig设置的.config文件。




13:在Linux/Ubuntu系统上解压Android源码时遇到“EOF归档失败”的错误

遇到“EOF归档失败”的错误通常意味着压缩包在下载或传输过程中可能已损坏,或者解压时使用的文件不完整。为了解决这个问题,请按照以下步骤操作:

①、验证MD5码:

首先,需要确认你下载的压缩包的MD5码是否与提供的一致。MD5码是一种校验和,用于验证文件的完整性和真实性。可以使用md5sum命令(在Linux/Ubuntu上)来计算下载的压缩包的MD5码,并将其与提供的MD5码进行比较。

如果MD5码不一致,那么很可能是文件在下载过程中出现了损坏,或者下载的不是正确的文件。此时,应该重新下载文件,并确保下载过程中没有中断。

②、检查压缩包数量:

如果MD5码一致,但解压时仍然出现错误,那么需要注意,RK3568系板卡的源码包是以切包的方式存储的,即生成了多个压缩包(如.aa, .ab, .ac等,统称为a*压缩包)。在解压前,需要将这些压缩包合并成一个完整的压缩包。

③、合并压缩包:

使用cat命令将多个压缩包合并成一个完整的压缩包。例如 cat OK3568-linux-source.tar.bz2.a* > OK3568-linux-source.tar.bz2,这条命令会将所有以OK3568-linux-source.tar.bz2.a开头的文件合并成一个名为OK3568-linux-source.tar.bz2的完整压缩包。

④、解压合并后的压缩包:

使用tar命令 tar -xvf OK3568-linux-source.tar.bz2 解压合并后的压缩包,这条命令会解压OK3568-linux-source.tar.bz2文件,并将其内容提取到当前目录下。

请确保在执行这些步骤时,你有足够的磁盘空间和正确的权限来访问和修改这些文件。如果问题仍然存在,请检查你的系统环境是否支持解压该类型的压缩包,或者尝试在不同的系统或环境中进行解压。

14:Android 源码编译不通过?




有用户反馈,在编译3568Android源码的过程中,首次编译会遇到错误,但再次编译时却能成功,且之前的报错似乎并未对最终的编译结果产生影响。

针对用户反馈的这一问题,我们注意到Android源码编译前需要执行两条关键命令,它们分别是: ①、source build/envsetup.sh

②、lunch ok3568_r-userdebug

这两条命令的主要作用是配置编译所需的环境变量,这些配置是临时的,它们与当前的终端窗口紧密相关。若用户在新建的终端窗口中执行编译操作,那么需要重新执行这两条命令,以确保环境变量得到正确配置。

15:Android手册内没有单独烧写部分,是不是不支持单独烧写?

A:Android系统在经历过一次全编译后,是支持单独编译和烧写的。

Q:源码编译过程中电压域配置错误导致内核编译失败的解决方案







在源码编译过程中,若因图形界面配置错误电压域而导致内核编译失败,首先,确认你正在编译的是Linux系统、Forlinx Desktop系统还是Android系统,这几个操作系统的编译和修复步骤略有不同。可按照以下步骤进行故障排查与修复

①、针对Linux系统与Forlinx Desktop系统

定位并删除临时文件:

首先,需定位至内核设备树(DTS)文件所在的目录。在Ubuntu系统中,若使用飞凌嵌入式提供的OK3568开发板源码,该目录通常位于~/OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip。在此目录下,查找名为.OK3568-C-linux.dtb.dts.tmp.domain的临时文件,并使用rm命令将其删除。执行ls -a命令可确认文件是否已成功删除。




重新编译内核镜像:

删除临时文件后,返回至Linux源码的根目录(如~/OK3568-linux-source),并执行编译脚本(如./build.sh)以重新编译内核镜像。

②、针对Android系统

定位并删除临时文件:

对于Android系统,同样需定位至内核设备树(DTS)文件所在的目录,该目录在Android源码中通常位于~/android-ok3568/OK3568-android11-source/kernel/arch/arm64/boot/dts/rockchip。在此目录下,查找名为.OK3568-C-android.dtb.dts.tmp.domain的临时文件,并使用rm命令将其删除。执行ls -a命令确认文件删除情况。




设置编译环境并重新编译:

删除临时文件后,返回至Android源码的根目录(如~/android-ok3568/OK3568-android11-source),并执行以下命令以设置编译环境、选择编译目标并重新编译镜像:

source build/envsetup.sh:设置Android编译环境变量。

lunch ok3568_r-userdebug:选择编译目标配置。

./build.sh -UKAup:执行编译命令,其中-UKAup参数可能根据具体编译需求而有所调整。


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

178

帖子

0

粉丝