King3399 SDK编译简明教程

该文章仅供参考,编写人不对任何实验设备、人员及测量结果负责!!!

0 引言

文章主要介绍King3399(瑞芯微rk3399开发板,荣品)官方SDK编译过程,涉及环境配置、补丁以及编译过程中注意事项等说明,编译过程主要参考荣品官网-瑞芯微系列-rk3399
00king3399

1 编译环境

下表为编译SDK时主、从机的配置:

CPUMemoryDiskCoreSystem
Masteri516G/4Win10 64bit
Slave/10G120G2Ubuntu 18.04
注:
  1. 此处从机为安装在主机VMWare17中的虚拟机
  2. 从机的10G内存是从主机16G内存中分配的,磁盘与内核同理
  3. VMware17安装Ubuntu18.04,若环境一致可参考此链接,安装时网络类型为使用桥接网络,更新和其他软件为最小安装
  4. 编译内存分配建议不小于8G,官方编译文档中有明确说明,本人在一开始时使用2G内存会报错且速度较慢
  5. 从机磁盘空间分配建议不小于100G,官方编译文档中虽无明确说明,但本人第一次成功编译后查看磁盘占用为90G+(编译过程只安装必要的依赖,连VS Code都没安装,且源码linux-5.10-20240531.tgz存放在共享文件夹中)
  6. 编译环境建议选择Ubuntu18.04,本人第一次安装的为Ubuntu22.04,但存在部分依赖未更新至该版本,Ubuntu20.04未尝试
  7. 建议在VMware中新建一个虚拟机进行SDK开发,编译过程未知事件频发,可能导致虚拟机崩掉
2 环境配置

从机安装完成后更新包和依赖:

>>>sudo apt update && apt upgrade
# 若返回如下错误可以继续执行下述指令:
unable to acquire the dpkg frontend lock xxx are you root
# 参考:https://blog.csdn.net/Julykkk/article/details/108771331
>>>sudo passwd root
>>>xxx # your password
>>>xxx # your password
>>su
>>>xxx # your password
# 执行完上述指令后成为 root,再次尝试更新
>>>sudo apt update && apt upgradesu
>>>su ooo # ooo:one of member in this system

设置共享文件夹:

# 参考:https://blog.csdn.net/bigger_belief/article/details/134333114
# 完成参考链接中的步骤后执行如下指令
>>>ls /mnt/hgfs # return share floder you set just now
# 若返回hgfs not exit,执行如下指令
# 参考:https://blog.csdn.net/challenglistic/article/details/129026025
>>>sudo mkdir -p /mnt/hgfs
>>>sudo chmod a+w /mnt/hgfs
>>>vmhgfs-fuse .host:/ /mnt/hgfs/
# 再次执行
>>>ls /mnt/hgfs # return share floder you set just now
# 注:这种方法在每次重启从机后都需要手动挂载共享文件夹,步骤如下
# 1、虚拟机-设置-选项-共享文件夹-已禁用-确定
# 2、虚拟机-设置-选项-共享文件夹-总是启用-确定
# 对于此问题有更好的解决方案,可自行查找 

安装vim,个人认为vim比自带的vi好用,建议安装(前提是会使用基本指令,否则可自行安装VS Code等编辑器)

>>>sudo apt-get install vim

关闭终端音效

# 参考:https://blog.csdn.net/qq_32708605/article/details/123987268
>>>sudo vim /etc/inputrc
# 找到“# set bell-style none”,删除该行行首的“#”和“ ”并保存
# 打开新的终端

从机(Ubuntu)获取主机(Windows)复制(剪切板)中的内容

# 参考:https://blog.csdn.net/childbor/article/details/95073956
>>>sudo apt install open-vm-tools
>>>sudo apt install open-vm-tools-desktop
>>>reboot # reboot slave
# 注:上述指令会重启从机,及时保存相关文件
3 编译SDK

首先到荣品官网下载SDK,该SDK大约有12G+,可以提前两天下载,具体路径为:

cdrom_king3399_new/01-SDK/Linux/source/linux-5.10-20240531.tgz

cdrom_king3399_new/01-SDK/Linux/source/linux-5.10-20240531.md5

另外还需要下载烧写驱动与烧写软件,具体路径为:

cdrom_king3399_new/05-工具/USB烧写驱动/DriverAssitant_v4.5zip

cdrom_king3399_new/05-工具/烧写工具/android烧写工具/android10烧写软件/AndroidTool_Release_v2.71.rar

注:

  1. 上述路径不尽相同,若在上述路径中没有找到相应工具或者文档,可以查看其他路径
  2. 本人使用的烧写工具为AndroidTool_v2.61.rar
  3. 上述文件或者工具全部都是下载到主机磁盘中
  4. 网盘中还存在大量其他工具与参考文档,可按需下载查看
3.1 安装编译SDK环境搭建所依赖的包

官方文档所要求的依赖包:

sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf
sudo apt-get install device-tree-compiler gcc-aarch64-linux-gnu mtools parted
sudo apt-get install libudev-dev libusb-1.0-0-dev python-linaro-image-tools
sudo apt-get install linaro-image-tools autoconf autotools-dev libsigsegv2 m4
sudo apt-get install intltool libdrm-dev curl sed make binutils build-essential gcc
sudo apt-get install g++ bash patch gzip bzip2 perl tar cpio python unzip rsync flex
sudo apt-get install bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev
sudo apt-get install libglade2-dev cvs git mercurial rsync openssh-client subversion
sudo apt-get install asciidoc w3m dblatex graphviz python-matplotlib libc6:i386
sudo apt-get install libssl-dev texinfo genext2fs u-boot-tools# 若使用Ubuntu18.04,还需安装
sudo apt-get install liblz4-tool lib32gcc-7-dev g++-7 libstdc++-7-dev# 若某一步安装失败,请单独安装对应的包,并根据情况处理
# 如果安装完后续编译遇到报错,可以视报错信息,安装对应的软件包

本人在编译时没有直接使用全局编译SDK:./build.sh,而是先单独编译uboot、kernel、recovery,在单独编译过程中出现缺少依赖的情况及安装补丁如下:

# 1.awk: line 2: function strtonum never defined
# 参考:https://blog.csdn.net/liangtianmeng/article/details/86020254
>>>sudo apt-get install gawk# 2./bin/sh: 1: bison: not found
# 参考:https://blog.csdn.net/qq_36393978/article/details/117816425
>>>sudo apt install bison flex# 3.ERROR: Running xxx mk-kernel.sh - do_build failed!
>>>git clone https://github.com/lz4/lz4.git --depth 1 -b v1.9.4
>>>cd lz4
>>>sudo make install -j8# 4.Your gmp headers are missing
>>>sudo apt install libgmp-dev# 5.Your gmp headers are missing
>>>sudo apt-get install libgmp-dev# 6.Your mpc headers are missing
>>>sudo apt-get install libmpc-dev# 7.Your unbuffer is missing
>>>sudo apt-get install expect expect-dev

在单独编译某个部分报错时,可根据报错信息安装相关依赖,若使用环境与本文章相同,可以直接安装上述两部分依赖(官方要求的和本人在单独编译时报错后安装的)

3.2 源码SDK的md5校验

将下载的linux-5.10-20240531.tgz和linux-5.10-20240531.md5移动到共享文件夹下(此处放在共享文件夹下是避免占用从机磁盘空间),并执行如下指令:

>>>cd /mnt/hgfs/sharefile # sharefile:your share folder
>>>md5sum linux-5.10-20240531.tgz  # return : xxxooo
>>>vim ubuntu-xxx.md5     # show : xxxuuu# 若返回的xxxooo与xxxuuu相同,则检验通过
# 反之可能需要重新下载linux-5.10-20240531.tgz文件
# 由于本人没有遇到不相同的情况,因此没有深入了解解决方案# md5校验通过后将linux-5.10-20240531.tgz解压到指定目录
# 提前在当前用户下创建目录 /home/username/ws/sdk,此处为自定义目录
# 参考:https://blog.csdn.net/libing_zeng/article/details/73268032
tar xzvf /mnt/hgfs/sharefile/linux-5.10-20240531.tgz -C /home/username/ws/sdk # about 4 minute# 解压完成后并不能看到源码,需要从git版本库中检出,查看是否生成 .git
>>> ls -al # return list exit file : .git# 检出源码
>>> git reset --hard # about 2 minute# 此时在/home/username/ws/sdk下生成如下文件夹
SDK
├──app:       #存放上层应用 APP,主要是 qcamera/qfm/qplayer/qseting 等一些应用程序。
├──buildroot: #基于 Buildroot开发的根文件系统。
├──device/rockchip:#存放各芯片板级配置以及一些编译和打包固件的脚本和预备文件。
├──docs:      #存放开发指导文件、平台支持列表、工具使用文档、Linux 开发指南等。
├──external:  #存放第三方相关仓库,包括音频、视频、网络、recovery 等。
├──kernel:    #存放 Kernel源代码。
├──prebuilts: #存放交叉编译工具链。
├──rkbin:     #存放 Rockchip 相关 Binary 和工具。
├──rockdev:   #存放编译输出固件,完整编译后生成(该文件夹当前并不存在)
├──tools:     #存放 Linux 和 Window 操作系统下常用工具。
├──u-boot:    #存放 U-Boot 源代码。
├──debian:    #存放 debian 文件系统镜像(需单独下载)。
├──README.md
├──Makefile
├──build.sh
├──output
├──rkflash.sh
├──uefi
├──common
├──external
└──yocto
3.3 编译SDK

SDK编译可分为buildroot系统编译、debian系统编译和ubuntu系统编译,无论最后要使用什么系统,都请先全局编译一次 buildroot,之后再进行其他系统的编译,以避免出现需要某个依赖的工具找不到的情况,本文选择buildroot系统编译

若需要点亮对应屏幕,在编译之前修改相关配置,参见显示屏配置,由于本人手边没有合适的屏幕,因此没有配置此处,在编译完成后直接使用板子上的hdmi接口连接的电脑复屏,画质勉强可以接受

根据选项和当前主板的型号进行选择,主板型号可查看 CPU 确认,输入对应的序号选择

# 注:编译部分的所有指令都是在/home/username/ws/sdk下执行
./build.sh init# 返回结果如下 
Log saved at /home/rpdzkj/fourth/zzc/rk-linux5.10/output/log/2023-07-27_08-39-50Pick a chip:1. rk3399
2. rk3566_rk3568
3. rk3588
Which would you like? [1]: 1 # 根据板载芯片选择
Pick a defconfig:  #输入需要编译的板型1. king-rk3399-buildroot_defconfig
2. king-rk3399-debian_defconfig
3. king-rk3399-ubuntu_defconfig
4. nano-rk3399-buildroot_defconfig
......
19. rp-rk3399-buildroot_defconfig
20. rp-rk3399-debian_defconfig
21. rp-rk3399-ubuntu_defconfig
Which would you like? [1]: 
#输入需要编译的板型和系统序号,如输入 1 编译king-rk3399-buildroot# 全局编译SDk
./build.sh # about 2.5 hour# --------------------------------------
# 若选择单独编译可以使用如下指令:# 单独编译 uboot
# ./build.sh uboot# 单独编译kernel,about 30 miunte
# ./build.sh kernel# 单独编译 recovery,about 60 miunte
# ./build.sh recovery# 上述时间仅供参考,本人中途换过电脑与内存条,
# 具体在哪台设备上编译的已记不太清,
# 建议找个完整的时间守在电脑旁边进行编译
4 烧录镜像

编译成功后所有的镜像文件都会在/home/username/ws/sdk/rockdev目录下

xxx@ooo:~/ws/sdk/rockdev$ ls -hl
total 94M
boot.img -> ../../kernel/boot.img
linux-headers.tar
MiniLoaderAll.bin -> ../../u-boot/rk3399_loader_v1.30.130.bin
misc.img -> ../misc.img
oem.img
parameter.txt -> ../../device/rockchip/.chips/rk3399/parameter.txt
recovery.img -> ../recovery/ramboot.img
rootfs.img -> ../../buildroot/output/rockchip_rk3399/images/rootfs.ext2
trust.img -> ../../u-boot/trust.img
uboot.img -> ../../u-boot/uboot.img
update.img -> ../update/Image/update.img
update-rk3399-king-rk3399-buildroot-mipi-7-1024-600-20240912-214925.img -> ../update/Image/update.img
userdata.img

将该目录下的所有文件复制到共享目录下,在主机中打开前文中下载的烧写驱动并安装,烧录流程参考,烧录时的硬件连接如下图所示:
01硬件连接图
烧录分立镜像:
02部分烧录
烧录完整镜像:
03整体烧录
烧录完成后,掉电重启:
04显示界面

重启的桌面上有几个测试软件,可以打开进行测试,在进行视频、图片以及3D渲染测试时建议不要长时间运行,板载CPU及内存颗粒发热严重!!!

另外脚注[3]中提供的镜像仅供King3399这个型号的板子使用,不可随意烧录!!!

[1] 荣品官网-网盘链接

[2] 荣品官网-在线文档

[3] SDK编译后的镜像(分立+完整)BaiduPan( pwd : vllt)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1536769.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

shiro漏洞复现

目录 shiro介绍框架介绍判断是否使用shiro框架 环境搭建CVE-2010-3863漏洞原理影响版本漏洞复现 CVE-2016-4437漏洞原理影响版本漏洞复现 CVE-2020-1957漏洞原理影响版本漏洞复现 shiro-721拉取环境漏洞原理漏洞复现 shiro介绍 框架介绍 Apache Shiro提供了认证、授权、加密和…

CSARA机械手正反解代码解读和左右手定则应用

前言:前段时间在某鱼上买了一份CSARA的机械臂的程序,拿出来分享一下,并记录一下。说明一下并非是公司的核心代码,我也不搞这个....侵权就删了。 首先简单回顾一下CSARA的正逆解。 根据几何的方法能求出末端在平面坐标系中的xy坐标…

第二百三十五节 JPA教程 - JPA Lob列示例

JPA教程 - JPA Lob列示例 以下代码显示了如何使用Lob注释将字节数组保存到数据库。 LOB在数据库中有两种类型:字符大对象(称为CLOB)和二进制大对象(或BLOB)。 CLOB列保存大字符序列,BLOB列可存储大字节序…

Linux memcg lru lock提升锁性能

内核关于per memcg lru lock的重要提交: f9b1038ebccad354256cf84749cbc321b5347497 6168d0da2b479ce25a4647de194045de1bdd1f1d 计算虚拟地址转换基本机制 为了处理多应用程序的地址冲突, linux 系统在应用中使用了虚拟地址,得益于硬件的…

SpringBoot+vue集成sm国密加密解密

文章目录 前言认识SM2后端工具类实现引入依赖代码实现工具类:SM2Util 单元测试案例1:生成服务端公钥、私钥,前端js公钥、私钥案例2:客户端加密,服务端完成解密案例3:服务端进行加密(可用于后面前…

禹神:一小时彻底搞懂跨域解决方案

1. 浏览器的同源策略 2. 跨域会受到哪些限制 4. CORS 解决 Ajax 跨域问题 exposedHeaders 不加这个,js拿不到这个响应头(浏览器控制台network中能看见,但是js拿不到) 5. JSONP 解决跨域问题 JSOP只能解决get请求 服务端代码 客户端代码 服务端代码升…

卡尔曼滤波中Q和R与噪声的关系

卡尔曼滤波 一种用于估计系统状态的递归滤波器,通过融合传感器测量和系统模型,提供系统状态的最优估计。 Q和R是什么 在卡尔曼滤波中,Q和R分别表示过程噪声和测量噪声的协方差矩阵。 Q Q Q矩阵(过程噪声协方差矩阵)…

LC并联电路在正弦稳态下的传递函数推导(LC并联谐振选频电路)

LC并联电路在正弦稳态下的传递函数推导(LC并联谐振选频电路) 本文通过 1.解微分方程、2.阻抗模型两种方法推导 LC 并联选频电路在正弦稳态条件下的传递函数,并通过仿真验证不同频率时 vo(t) 与 vi(t) 的幅值相角的关系。 电路介绍 已知条件…

人工智能和大模型的简介

文章目录 前言一、大模型简介二、大模型主要功能1、自然语言理解和生成2、文本总结和翻译3、文本分类和信息检索4、多模态处理三、大模型的技术特性1、深度学习架构2、大规模预训练3、自适应能力前言 随着技术的进步,人工智能(Artificial Intelligence, AI)和机器学习(Mac…

建设世界一流财务管理体系【数字化顶层设计】【持续更新】

财务管理是企业管理的中心环节,是企业实现基业长青的重要基础和保障。近年来,中央企业认真贯彻落实党中央、国务院决策部署,高度重视财务管理工作,持续优化管理手段,不断创新管理模式,积极应用先进管理工具…

CSS调整背景

一、设置背景颜色 通过 background-color 属性指定,值可以是十六进制 #ffffff,也可以是rgb(0, 255, 255),或是颜色名称 "red" div {background-color: red; /* 通过颜色名称设置 */background-color: #ff0000; /* 通过十六进制设…

面向对象程序设计之继承(C++)

1.继承的定义 1.1继承的概念 继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承 呈现了⾯向…

给虚拟机linux系统安装交叉编译工具链

我们在电脑上写的代码编译生成的是X86架构的二进制文件,只能在X86平台上运行,而开发板是ARM架构因此需要安装交叉编译链工具,这样在电脑上写的代码交叉编译之后生成的是ARM架构的二进制文件。 绿色的字眼是与本文无关的只是这样有助于我们的…

推荐5款AI论文大纲生成器,一键极速生成!

在当今学术研究和写作领域,AI论文大纲生成器的出现极大地提高了写作效率和质量。以下是五款功能强大且全面的AI论文大纲生成器推荐: 一、千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和自然语言处理技术的AI写作助手,旨在帮助用户…

【探索数据结构与算法】希尔排序原理、实现与分析(图文详解)

目录 一、 引言 二、算法思想 三、算法步骤 四、代码实现 五、复杂度 💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:探索数据结构与算法 一、 引言 希尔排序(Shell Sort)是插入排序的一种更高效的改进版本&#x…

【Kubernetes笔记】为什么DNS解析会超时?

【Kubernetes笔记】为什么DNS解析会超时? 目录 1 问题背景2 产生后续的问题3 DNS 负缓存工作原理:4 如何解决和缓解 DNS 负缓存 4.1 减小负缓存 TTL4.2 重试机制4.3 减少 Pod 的频繁重启或调度4.4 使用 Headless Service4.5 手动刷新 DNS 缓存 5 总结 …

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 🍸前言 🍻一、台式电脑基本组成 🍺二、组装 🍹三、安装系统 👋四、系统设置 👀五、章末 🍸前言 小伙伴们大家好,上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

15. 三数之和(实际是双指针类型的题目)

15. 三数之和 15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以…

支持升降压型、升压、降压、60V的1.2MHz频率LED恒流驱动器LGS63040、LGS63042

前言: 一款支持升降压的LED驱动器。适合单节锂电池使用。当然不仅于此。SOT23-5封装的外形和丝印 特性 宽输入电压、宽输出电压范围:3.0V-60V 支持 PWM 调光及模拟调光 内置 60V/350mΩ低侧金属氧化物半导体场效应晶体管 1.2MHz固定工作频率 逐周期峰值…

面试官问:你在团队中的角色是什么?

面试官问你在团队中的角色是什么,其目的是了解你如何在团队环境中工作,以及你如何看待自己在团队中的定位。他们希望听到你如何与他人协作、你的领导能力或团队合作精神,以及你是否能适应不同的团队角色。 回答这类问题时,你可以…