From 45ca5b07ee9f5f7d2bb8e7b0beb51d5258c08e89 Mon Sep 17 00:00:00 2001 From: anheng <12857953+aahh123456@user.noreply.gitee.com> Date: Mon, 10 Jun 2024 14:07:48 +0800 Subject: [PATCH] updata --- RK3568_Linux_SDK开发文档/RK3568_Linux_SDK开发文档.md | 459 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 420 insertions(+), 39 deletions(-) diff --git "a/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" "b/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" index 738e23d..9e6236c 100644 --- "a/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" +++ "b/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Linux_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" @@ -146,7 +146,106 @@ -## 1.3 Linux SDK源码编译 +## 1.3 Buildroot 配置 + +常见的文件系统制作就这几个: +1, Buildroot; +2, Yocto; +3, 直接用第三方的,如 debian、ubuntu 等 + +Rockchip提供的Linux 的SDK里面默认使用的Buildroot来构建根文件系统,那如果需要想让根文件系统添加一些别的命令支持则需要对Buildroot进行配置 + +此处以添加Python3为例说明 + +首先我们需要配置编译需要的配置 + +1.进入~/rk3568/sdkv1.3.0_linux4.19 + +输入`source envsetup.sh` + +选择67.rockchip_rk3568 表示使用rk3568的相关配置 + + + + + +此时可以看到配置中显示了目标板子,编译输出目录和使用的defconfig文件是哪个 + + + +2.进入~/rk3568/sdkv1.3.0_linux4.19/buildroot + +输入`make menuconfig` 找到python3,位置在Target packages ->Interpreter languages and scripting->python3选中。 + + + +选中python3后保存退出。 + +输入`make savedefconfig` 此时系统会把你所改变的config信息直接同步到rockchip_rk3568_defconfig + +3.编译buildroot + +返回~/rk3568/sdkv1.3.0_linux4.19/ + +输入`./build.sh buildroot`编译buildroot + +4.烧录编译出来的buildroot镜像到开发板中,输入`Python3` + + + + + +## 1.4 Debian构建根文件系统 + +瑞芯微的SDK中已经提供的Debian的源码,路径是~/rk3568/sdkv1.3.0_linux4.19/debian + +在编译和构建Debian_rootfs之前需要在系统里安装相关工具和依赖 + +``` +sudo apt-get install git ssh make gcc libssl-dev liblz4-tool expect \ + g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \ + qemu-user-static live-build bison flex fakeroot cmake gcc-multilib \ + g++-multilib unzip device-tree-compiler ncurses-dev +``` + +``` +sudo dpkg -i debian/ubuntu-build-service/packages/* +sudo apt-get install -f +``` + +说明: + +其中最为核心的东西是debootstrap和qemu-user-static + +这里的debootstrap就是在packages里面 + + + +debootstrap 构建debian基本文件子系统的工具。 + +qemu-user-static 在PC端非arm架构的ubuntu系统上,需要借助于qemu-arm-static工具来模拟arm环境安才可以安装arm架构下所需要的软件。 + +安装好这些必要工具后,就可以开始编译Debian了 + +返回到~/rk3568/sdkv1.3.0_linux4.19/目录 + +输入`./build.sh debian`开始编译,编译后的镜像文件放在了~/rk3568/sdkv1.3.0_linux4.19/debian + + + +我们需要将这个镜像文件烧录到开发板中 + + + +我们将烧录的rootfs文件替换成linaro-rootfs.img即可 + +烧录完成后启动开发板,会提示输入用户名和密码,这里的用户名和密码在编译脚本里写好了的均为linaro + +登录后切换su用户`sudo su`,进入根目录下展示的就是Debian的根文件系统 + + + +## 1.5 Linux SDK源码编译 @@ -397,7 +496,7 @@  -DTS文件修改(如果有) +DTS文件修改(默认已经添加节点) ``` leds: leds { @@ -455,9 +554,7 @@ **注意:这四个gpio在设备树中可能会被其他设备所占用,导致不能操作gpio,所以要查看哪些设备占用着这几个gpio需要屏蔽掉这些设备。** - - -#### 测试方法 +### 3.2.2 应用程序测试 由于这四个引脚都是用MOS管控制的开漏输出,所以我们需要去测试MOS管的栅极看看是否是3.3V电平 @@ -465,12 +562,6 @@ **GPIO输出1的时候,对应的栅极是0V** **GPIO输出0的时候,对应的栅极是3.3V** - -利用万用表,将万用表调到直流电压20V这一档,这四个模块对应的三极管如下图所示,利用gpioset来控制四个gpio的高低电平,看看是否符合上述规则。 - - - -### 3.2.2 应用程序测试 ```c gpioset 0 18=1/0 @@ -481,7 +572,7 @@ 利用万用表,将万用表调到直流电压20V这一档,这四个模块对应的三极管如下图所示,利用gpioset来控制四个gpio的高低电平,看看是否符合上述规则。 - + @@ -537,9 +628,15 @@ ## 3.4 RS232和RS485 +### 3.4.1 硬件原理图说明 + -### 3.4.1 内核修改支持 + + + + +### 3.4.2 内核修改支持 RS232 DTS文件修改 @@ -567,19 +664,19 @@ pinctrl-0 = <&uart9m1_xfer &rs485_ctrl>; status = "okay"; }; +&pinctrl { -//在rk3568-pinctrl.dtsi下加入 -rs485 { + rs485 { rs485_ctrl: rs485-ctrl { - rockchip,pins = - <4 RK_PD2 RK_FUNC_GPIO &pcfg_output_low>; + rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; }; + }; }; ``` -因为RS485是半双工的,所以要么先测接收功能要么测发送功能,从原理图上可以看到,接受与发送功能的切换是GPIO4_D2来控制的,默认情况是接收功能,我们可以利用gpioset命令拉高该gpio让其工作在发送模式 +因为RS485是半双工的,所以要么先测接收功能要么测发送功能,从原理图上可以看到,接受与发送功能的切换是GPIO4_D2来控制的,默认情况是发送功能,我们可以利用gpioset命令拉高该gpio让其工作在接受模式 -### 3.4.2 应用程序测试 +### 3.4.3 应用程序测试 RS232测试 @@ -611,6 +708,12 @@  +``` +microcom /dev/ttyS9 -s 115200 +``` + + +  @@ -620,10 +723,12 @@ 将控制引脚拉高电平,输入如下命令 ```c -gpioset 4 28=1 +gpioset 4 26=1 ``` - +``` +microcom /dev/ttyS9 -s 115200 +``` @@ -663,7 +768,9 @@ Networking support -> CAN bus subsystem support -> CAN Device Drivers -> - Platform CAN drivers with Netlink support -> + <*>Platform CAN drivers with Netlink support + <*>Rockchip CAN controller + <*>Rockchip CANFD controller ``` ### 3.5.2 应用程序测试 @@ -709,6 +816,29 @@  + +**CAN单板回环测试** + +将板子的CAN0_H和CAN1_H连接 CAN0_L和CAN1_L连接 + +依次输入以下命令 + +``` +ip link set can0 down +ip link set can0 type can bitrate 500000 +ip link set can0 up + +ip link set can1 down +ip link set can1 type can bitrate 500000 +ip link set can1 up + +candump can0 & +cansend can1 123#01020304050607 +``` + +通过CAN1发送后,CAN0会打印收到的信息 + + ## 3.6 声卡Codec @@ -757,10 +887,22 @@ 使用amixer设置声卡 +通过`amixer -c 0 contents`可以查看音频硬件的当前状态和可能的设置 + + + +这里的 1 和 2 对应于 `Main Mic` 和 `SPK` 在各自列表中的索引。根据需要调整命令中的索引以设置所需的选项。 + +可以使用如下命令切换至SPK输出 + ``` -amixer cset name='Master Playback Volume' 'on','on' -amixer cset name='Master Playback Volume' '30','30' +amixer -c 0 cset numid=2 2 + +//linux5.10 +amixer -c 0 cset numid=12 3 //HP输出 ``` + + 使用aplay播放WAV格式音乐 @@ -776,7 +918,7 @@ 点击 [下载地址](https://pyropus.ca./software/memtester/),即可下载memtester。 -##### 编译方法1: +编译方法1: 打开终端进入到该路径下,输入解压命令: @@ -787,13 +929,13 @@ 进入到解压出来的文件夹后打开conf-cc文件,行首更改如下,并保存 ``` -/home/tangjunfeng/rk3568/sdkv1.3.0_linux4.19/buildroot/output/rockchip_rk3568/host/usr/bin/aarch64-buildroot-linux-gnu-cc -O2 -DPOSIX -D_POSIX_C_SOURCE=200809L -D_FILE_OFFSET_BITS=64 - +~/rk3568/sdkv1.3.0_linux4.19/buildroot/output/rockchip_rk3568/host/usr/bin/aarch64-buildroot-linux-gnu-cc -O2 -DPOSIX -D_POSIX_C_SOURCE=200809L -D_FILE_OFFSET_BITS=64 - ``` 打开conf-ld文件,行首更改如下,并保存 ``` -/home/tangjunfeng/rk3568/sdkv1.3.0_linux4.19/buildroot/output/rockchip_rk3568/ host/usr/bin/aarch64-buildroot-linux-gnu-cc -s +~/rk3568/sdkv1.3.0_linux4.19/buildroot/output/rockchip_rk3568/ host/usr/bin/aarch64-buildroot-linux-gnu-cc -s ``` 在memtester-4.6.0路径下,进行编译: @@ -810,7 +952,7 @@ -##### 编译方法2: +编译方法2: 可以使用郭工的编译脚本进行编译,只需修改脚本的编译目标即可 @@ -840,7 +982,7 @@ ### 3.8.1 内核修改支持 -#### Iperf下载 +**Iperf下载** iperf官网:[iperf.fr](https://iperf.fr/) @@ -854,7 +996,7 @@ 2.cd iperf-3.x 进入目录,执行git tag查看历史版本。 3.执行git checkout 3.1.3 回退到3.1.3的历史版本。 -#### 网络连接和IP配置 +**网络连接和IP配置** 服务端与客户端的网口通过网线和交换机连接,两者IP需要保持在同一网段,如下所示: @@ -862,7 +1004,7 @@ Linux系统终端:192.168.10.50 -#### 服务端iperf的安装与使用 +**服务端iperf的安装与使用** 关闭Windows系统的防火墙与杀毒软件或允许iperf通过防火墙。 拷贝iperf-3.0.11-win32.rar并解压至Windows系统的的英文路径的目录(如D盘根目录)。 @@ -871,7 +1013,7 @@  -#### 客户端iperf的安装与使用 +**客户端iperf的安装与使用** 直接使用郭工安装库脚本文件build.sh,并做修改 @@ -890,7 +1032,7 @@ 12 LIB_URL=$LY_FTP 13 14 # Cross compiler for cross compile on Linux server - 15 #CROSS_COMPILE=/home/anheng/rk3568/sdkv1.3.0_linux4.19/buildroot/output/ rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu- + 15 #CROSS_COMPILE=~/rk3568/sdkv1.3.0_linux4.19/buildroot/output/ rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu- 16 CROSS_COMPILE=/opt/gcc-aarch64-10.3-2021.07/bin/aarch64-none-linux-gnu- 17 # compile jobs 18 JOBS=`cat /proc/cpuinfo |grep "processor"|wc -l` @@ -933,13 +1075,13 @@ 在/install/bin,生成可执行文件 iperf3 ``` -lingyun@9d57f9229b66:/home/anheng/install/bin$ ls +lingyun@9d57f9229b66:~/install/bin$ ls gpiodetect gpiofind gpioget gpioinfo gpiomon gpioset iperf3 ``` 将 iperf3拷贝到开发板 -#### 测试TCP +**测试TCP** 在Linux终端执行 @@ -1013,8 +1155,6 @@ ### 3.10.2 应用程序测试 - -#### 模块开关机 **开机方式** @@ -1109,7 +1249,7 @@ -#### PPP拨号方式 +**PPP拨号方式** 内核配置好后,编译生成新的镜像烧录到开发板中 @@ -1262,7 +1402,7 @@  -#### ECM模式拨号上网 +**ECM模式拨号上网** 上面的ppp模式拨号较为繁琐,需要大量的步骤依赖pppd软件,并且ppp拨号的稳定性不强,所以接下来介绍ECM模式,只需要AT命令就可以拨号上网 @@ -1284,3 +1424,244 @@ 同样,我们可以ping百度测试上网功能  + +## 3.11 RK3568自带的NPU + +### 3.11.1 应用程序测试 + +测试的程序是一个yolov5的目标识别demo,编译环境是Linux arm64系统 + +先去github下载RKNPU2并解压生成rknpu2-master文件夹 + +[GitHub - rockchip-linux/rknpu2](https://github.com/rockchip-linux/rknpu2?tab=readme-ov-file) + +1. 进入~/rk3568/rknpu2-master/examples/rknn_yolov5_demo目录 + +2. `vim build-linux_RK3566_RK3568.sh` + +3. 更改交叉编译器路径 + +  + +4. 授予build-linux_RK3566_RK3568.sh执行权限,./build-linux_RK3566_RK3568.sh + + 编译好了之后会生成install文件,里面就有官方提供的rknn模型,可执行程序,以及相应的动态库文件,如下 + + + +5. 用adb命令将~/rk3568/rknpu2-master/examples/rknn_yolov5_demo/install目录下的rknn_yolov5_demo_Linux文件夹上传到开发板的/data目录下 + +6. 指定库文件路径 `export LD_LIBRARY_PATH=/data/rknn_yolov5_demo_Linux/lib ` + +7. 运行程序识别相应的图片中物体的类别。`./rknn_yolov5_demo ./model/RV1106/yolov5s-640-640.rknn ./model/bus.jpg ` + +  + + 识别的结果会以out.jpg保存在当前目录 + +  + +## 3.12 DIO测试 + +### 3.12.1 硬件原理图说明 + +  + +  + +  + +  + +### 3.12.2 Din测试 + +  + + 按照上图的说明方法,将Din-0短接GND,此时Din-0输出低电平,测量R6114两侧的电压值,红表笔接一侧,黑笔接地。此时可以发现万用表显示电压为0.17v左右。其他的三个Din均是相同的方法。 + + **注意:为什么不是0V而是0.17v的微弱电压?** + + **因为从下图可以看出光耦内置三极管的CE结,饱合导通时会存在一定的压降,这个0.17v即为压降。** + +  + +### 3.12.3 Dout测试 + +  + + 如上图所示连接好电路,以Dout-0为例说明,其他的Dout的测试方法均相同 + + 输入`gpioset 0 4=0`,使gpio输出为低电平,用万用表测试R6211两端的电压正常情况均为0v。 + + 输入`gpioset 0 4=1`,使gpio输出为高电平,用万用表测试R6211两端的电压正常情况均为3.3v。 + + + + **注意:在RK3568上如果某个gpio没有被复用,默认情况下该引脚的模式是gpio模式,但是此处的GPIO0_PA4例外,所以需要在设备树中特殊配置一下该引脚使用gpio模式。** + +  + +### 3.12.4 Dout/ Din 联合测试 + +  + + 如上图所示将Din与Dout连接好,通过改变Dout的输出电平,检测Din是否收到对应的电平,以Din-0和Dout-0为例说明 + + 输入`gpioset 0 4=0` `gpioget 3 3`,显示Din-0的电平应为0 + + 输入`gpioset 0 4=1` `gpioget 3 3`,显示Din-0的电平应为1 + + + +## 3.13 AIN 电流电压测试 + +### 3.13.1 硬件原理图说明 + + + + + +### 3.13.2 AIN 电流测试 + +首先我们需要将ADC采样程序烧录到开发板上的单片机中 + +连接J6000 TTL下载调试串口 Debug_RXD_CN连接串口的TXD Debug_TXD_CN连接串口的RXD GND相连 + + + + + + + +**打开FlyMcu.exe烧录工具,选择准备好的.hex 的单片机程序** + + + + + +**点击开始编程后就开始烧录程序,烧录成功如下图,并且可以看到单片机的LED灯在闪烁绿光** + + + + + +单片机程序烧录好后,我们需要使能RK3568的UART6,根据原理图可以看到,RK3568和MCU通信串口为UART6,所以需要在设备树中设置UART6设备节点 + +打开`~/rk3568/sdkv1.4.0_linux5.10/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts` + +加入URAT6节点 + +``` +&uart6{ + dma-names = "tx", "rx"; + pinctrl-names = "default"; + pinctrl-0 = <&uart6m1_xfer>; + status = "okay"; +}; +``` + + + +重新编译设备树后烧录到开发板中启动开发板,在/dev下看看是否有ttyS6 + + + + + + + + + +按照上图连接电路后,用XCOM软件打开单片机的调试串口,配置如下图所示 + + + + + +在RK3568上运行comport程序,此程序可以配置串口的波特率,停止位,数据位,奇偶校验以及指定使用哪个串口设备 + +源代码在[framwork.git - Gitblit (iot-yun.club)](http://main.iot-yun.club:8088/tree/framwork.git/master/booster) + +但是这个代码需要做一定的修改,因为这个程序只能让串口输出字符串数据,但是我们在测试中需要发送十六进制数据给单片机。 + + + +此时就需要了解ADC串口协议,RK3568发送读指令给MCU,MCU会响应RK3568返回ADC采样数据 + + + +示例如下: + +示例: + +1、读第0通道电压: + +AA 55 02 00 30 8C //CRC:0x8C30 + +AA 55 02 00 EE 0D 99 C0 //0D EE -> 3566mv, CRC:0x0C99 + +2、读第1路通道电压: + +AA 55 02 01 F1 4C + +AA 55 02 01 06 00 47 C5 //00 06 -> 6mv + +3、读第2路通道电压: + +AA 55 02 02 B1 4D + +AA 55 02 02 06 00 B7 C5 //6mv + +4、读第3路通道电压: + +AA 55 02 03 70 8D + +AA 55 02 03 06 00 E6 05 //6mv + +5、读第0路电流 + +AA 55 01 00 30 7C + +AA 55 01 00 95 01 BB 71 //01 95 -> 405 单位0.01mA,即4.05mA, CRC:0x71BB + +6、读第1路电流 + +AA 55 01 01 F1 BC + +AA 55 01 01 95 01 EA B1 + +7、读第2路电流 + +AA 55 01 02 B1 BD + +AA 55 01 02 95 01 1A B1 + +8、读第3路电流 + +AA 55 01 03 70 7D + +AA 55 01 03 95 01 4B 71 + + + +以下AIN电流测试以测试第0路电流为例 + +在RK3568上输入`./comport -d /dev/ttyS6 -b 115200 -s 8N1N -x` + +在XCOM上可以看到MCU的调试信息,旋转电位器旋钮至最左或最右分别测量最小电流和最大电流,量程约为1.22mA~22.79mA(测试其他三路电流时最小电流约为0.006mA) + + + + + +### 3.12.3 AIN 电压测试 + +准备工作和AIN电流测试一样,不再赘述 + + + +运行comport程序让rk3568输出读取电压的指令给mcu + +同样在XCOM上也能看到MCU的采样调试信息,旋转电位器旋钮至最左或最右分别测量最小电流和最大电流,量程约为0.017mV~5.882mV + + -- Gitblit v1.9.1