自学完linux基础,开始学习RV1126 38板子的开发,以下是对开发环境和固件烧录,还有demo运行的全流程
一、安装环境
1.1 选型思路:独立虚拟机做 RV1126 开发的必要性
我前期花费 1 个月从零自学 Linux 基础操作,原本已有一套日常练手的 Ubuntu 虚拟机。考虑到 RV1126 原厂 SDK 依赖繁杂,包含交叉编译工具链、32 位兼容库、NFS/TFTP/ADB、音视频编译依赖等大量环境包 ,如果和日常 Linux 学习环境混用,极易出现库版本冲突、系统环境被污染,一旦环境崩掉会同时影响学习和项目调试。 因此决定单独新建一台专用虚拟机,专门用于 RV1126 音视频项目编译调试。为省去从零安装系统、逐条配置依赖的繁琐步骤,我直接选用大佬预置好 RV1126 开发依赖的成品 Ubuntu20.04 镜像,大幅节约环境部署时间。
本次我采用的是的rv1126 38板


1.2 虚拟机硬件参数配置
基于 RV1126 全量 SDK 编译吃内存、占用磁盘空间大的特性,在 VMware 中提前配置硬件规格:
- CPU:分配 4 核处理器,满足源码并行编译算力需求;
- 内存:8GB,编译 Buildroot 固件、FFmpeg、MPP 音视频库时避免内存不足编译中断;
- 硬盘:60GB,预留 SDK 源码、编译镜像、交叉工具链、工程文件存储空间;
- 网卡:默认桥接模式,后续实现 Windows、虚拟机、RV1126 开发板三者局域网互通。
1.3 成品开发镜像导入虚拟机
1.3.1 下载预置开发镜像
资源来源:RV1126 配套 Ubuntu20.04 成品虚拟机镜像,镜像内部已经预装好全套开发依赖:gcc/g++ 编译套件、32 位系统兼容库、git/repo、adb、nfs/tftp 服务、python 编译环境等,开箱即可用于交叉编译,无需手动逐条apt安装依赖。
1.3.2 VMware 导入镜像
- 打开 VMware 软件,选择「打开虚拟机」,选中下载后的
.vmx镜像文件; - 首次开机选择「我已复制该虚拟机」,避免虚拟机 UUID 冲突;
- 启动系统,登录预设用户账号,完成虚拟机开机初始化。
1.4 SDK相关
进入终端切换root用户,root是全权限用户模式,su进入,sudo是单次临时提权,如果第一次我们su之后,输完密码不能直接进入,那我们就要手动给root设置个密码,
sudo passwd root
再次su,尽可以进入root模式,进入opt目录可以看到多版本SDK,我使用rv1126_rv1109_v2.2.0_20210825版本源码。
su
cd /opt
ls

二、整体编译SDK环境
2.1 镜像编译
在root用户下,进入opt中的rv1126_rv1109_linux_sdk_v1.8.0_20210224文件夹
cd /opt
cd rv1126_rv1109_linux_sdk_v1.8.0_20210224
进入之后调用source envsetup.sh指令选择开发板类型,选择85,它是适配38板子的选项
source envsetup.sh

使用./build.sh lunch去选择Board类型,选择2
./build.sh lunch

使用./build.sh去整体编译SDK
./build.sh
整体编译这个时间很长,需要等一个多小时,
编译出对应的镜像会放在rockdev中,

上面这里是编译出来的整个img,那我们在开发中需要用到的是update.img,update.img可以烧录整个板子。
2.2 创建共享文件夹
在开发时经常遇到将Ubuntu编译好的文件要放到windows上进行烧录,此时创建一个VMware共享文件夹
- 虚拟机关机 / 挂起,编辑虚拟机设置
VMware 选中当前 Ubuntu 虚拟机 → 右键【设置】→【选项】→【共享文件夹】
- 勾选:总是启用
- 点击【添加】,向导下一步,选择 Windows 本地文件夹(比如桌面)
- 勾选「只读」不要选,确定保存。

- 开启 Ubuntu 系统
共享目录默认挂载路径:/mnt/hgfs
ls /mnt/hgfs
能看到 Windows 桌面文件即挂载成功。
- 文件使用
- Ubuntu 拷文件到 Windows:
cp 可执行文件 /mnt/hgfs/复制完立刻出现在 Windows 对应文件夹。
我们就要把刚才编译出来的update.img放到共享文件夹里。
三、烧录固件(给板子装系统)
类似给新组装的电脑装 Windows,RV1126 是裸硬件,没有操作系统无法运行程序;你通过 RK 工具把编译好的 Linux 固件(内核 + 根文件系统 + 驱动)写入板载 Flash。
- 芯片上电后从 Flash 启动 Linux 系统,网卡、USB、摄像头、MPP 编解码等硬件驱动才会加载生效;
- 没有固件就是一块空白电路板,不能执行任何 Linux 命令、跑音视频程序。
根据板子手册将线接好,


把USB线插入电脑并同时打开瑞芯微开发工具,此时工具就会提示发现一个ADB设备,这说明设备已经连上了,注意:此时可以将虚拟机关机,烧录暂时用不到,插上板子后总是弹窗还会影响连接

但是此时设备还不能进行固件烧写,因为RV1126的板子固件烧写需要进入MASKROM模式才行。要进入MASKROM模式首先要在此模式下点击切换,此时模式变成了 LOADER 模式如下图所示:

变成LOADER模式后再点击右上角的高级功能,此时再点击进入Maskrom模式。进入Maskrom模式后就可以烧录固件了。

点击上面的**升级固件,**然后选择我们编译好的update.img固件,最后点击升级按钮就可以成功烧录固件。

烧录成功以后,等一会板子会重新进入ADB模式,显示发现一个ADB设备

四、SSH登录
4.1 ADB 调试(USB 调试通道)
通过 OTG USB 线,Windows / 电脑和板子建立 USB 虚拟通道,不用网线就能进板子 root 终端(就是敲adb shell进系统)。
- 刚烧完固件、网口没调试通前唯一调试手段 :网口没 IP 连不上时,靠 ADB 查看
ifconfig、调试系统、修改配置; - 短距离快速调试:临时传文件、查看日志、启停程序,不用插网线,烧录后开机首选调试方式。近距连接,大批量开发、远端调试不方便,所以需要网口方案。
配置ADB步骤:
将ADB放在一个英文路径里,
win+r打开运行界面输入sysdm.cpl回车进入系统属性页面

高级→环境变量→系统变量→双击Path→新建→输入路径→确定→保存
安装瑞芯微驱动

win+r输入cmd,命令行输入adb shell

输入ifconfig,查看板子的ip地址

如果没有显示板子的IP地址,可以输入ifconfig eth0 192.168.100.75,即可配置板子的IP地址,然后再ifconfig查看板子的IP地址
3、网线直连 + ping 通(以太网链路打通)
配置电脑和板子同网段 IP,物理网线建立局域网,ping用来验证网线、网卡驱动、IP 配置全部正常。
ping通=底层网络没问题,是 SSH、NFS、网络流媒体的前置校验;- 以太网传输速率远高于 ADB USB,后续传大体积音视频程序、码流数据效率更高。
右击电脑网络标志,打开"网络和internet设置",更改适配器选项
选择板子的以太网→属性→ipv4协议→输入192.168.100.80→确认

同频段网络才可以通信,所以前三位必须和板子一致,最后一位不一致
cmd进行通信测试输入ping 192.168.100.75,看看能否通信正常

4、SSH 远程登录(以太网远程终端)
依托 ping 通的网线网络,在电脑 CMD / 终端通过ssh root@IP远程登录板子 Linux 终端,和 adb shell 功能一致,但走网线。
- 核心开发刚需:NFS 开发依赖 SSH + 网口 后续你在 Ubuntu 虚拟机交叉编译音视频程序,通过 NFS 把编译目录挂载到板子,板子直接跑虚拟机里的程序,不用每次把固件 / 程序拷进 Flash,改代码秒生效;
- 脱离 USB 束缚:板子放远端工位,电脑局域网远程操作,量产调试、长时间抓音视频日志更方便。
使用MobaXterm配置ssh
打开MobaXterm,点击Session,打开ssh,输入板子的ip地址192.168.100.75,用户名root,点击确认

输入板子密码:rockship

点击yes
设置MobaXterm的主密码

出现此界面板子的ssh就配置成功了

烧固件(硬件跑Linux) → ADB(初期无网调试系统) → ping通(验证网口可用) → SSH(正式网络开发环境) 最终目的:搭建完整开发环境,用来做摄像头采集、H.264/H.265 编码、RKMedia/MPP 音视频业务开发。
五、交叉编译工具链&运行demo
5.1 什么是交叉编译?
在电脑(Ubuntu/x86)上,编译出能在开发板(RV1126/ARM)上运行的程序,这个过程就叫交叉编译。
一句话总结: 电脑编译 → 板子运行
5.2 为什么要交叉编译?
因为:
-
电脑和开发板的芯片架构不一样
- 电脑:x86 架构
- RV1126:ARM 架构 两者不兼容,电脑编译出来的程序,板子跑不了;板子也没法自己编译(性能太弱)。
-
开发板性能差,不能自己编译代码 RV1126 是小芯片,内存小、CPU 弱,根本跑不动庞大的编译程序。
-
效率高 电脑几十秒编译完,板子可能要几十分钟。
5.3 交叉编译过程
在编写程序之前先找到编译链的位置,我这个环境下他的位置如下图

常用的的交叉编译工具链:arm-linux-gnueabihf-g++和arm-linux-gnueabihf-gcc
1.arm-linux-gnueabihf-g++:C++文件编译器
2.arm-linux-gnueabihf-gcc:C文件编译器
建一个放demo的目录,擦黄健一个.c文件,如何创建文件和目录,这都是基础的linux命令,不会的可以去我之前的博客里面先学习一下
我这边创建的是rv1126_helloworld.c
#include <stdio.h>
int main()
{
printf("hello rv1126 \n");
return 0;
}
再创建一个Makefile文件,里面写脚本
CC=/opt/rv1126_rv1109_linux_sdk_v1.8.0_20210224/prebuilts/gcc/linux-x
86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnu
eabihf-gcc //gcc编译器的路径
all:
$(CC) rv1126_helloworld.c -o rv1126_helloworld
保存退出,命令行输入make,就能编译成功了,可以试一下,在本地上本能不能运行
./rv1126_helloworld
肯定是运行不了的,因为我们编译成的arm环境的程序了
接下来把这个编译好的程序复制到共享文件夹
cp rv1126_helloworld /mnt/hgfs/UbuntuShared/
上传文件到rv1126板子上
点击左上角绿色的上传按钮,找到当时创建共享文件夹时windows上的位置,将rv1126_helloworld上传,注意路径是tmp,如果不是,可以在对话框里输入/tmp/回车即可

在这里面编译这个程序./rv1126_helloworld,就会打印相关信息。