概述
本文详细介绍了RK3568在Linux、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)定制的数据。这些数据一般包括设备制造商的LOGO、特定的驱动程序、配置文件,以及用于设备初始化或特定功能的脚本。
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参数可能根据具体编译需求而有所调整。
文章评论(0条评论)
登录后参与讨论