| | |
| | | |
| | | |
| | | |
| | | ## 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源码编译 |
| | | |
| | | |
| | | |
| | |
| | | |
| | |  |
| | | |
| | | DTS文件修改(如果有) |
| | | DTS文件修改(默认已经添加节点) |
| | | |
| | | ``` |
| | | leds: leds { |
| | |
| | | |
| | | **注意:这四个gpio在设备树中可能会被其他设备所占用,导致不能操作gpio,所以要查看哪些设备占用着这几个gpio需要屏蔽掉这些设备。** |
| | | |
| | | |
| | | |
| | | #### 测试方法 |
| | | ### 3.2.2 应用程序测试 |
| | | |
| | | 由于这四个引脚都是用MOS管控制的开漏输出,所以我们需要去测试MOS管的栅极看看是否是3.3V电平 |
| | | |
| | |
| | | |
| | | **GPIO输出1的时候,对应的栅极是0V** |
| | | **GPIO输出0的时候,对应的栅极是3.3V** |
| | | |
| | | 利用万用表,将万用表调到直流电压20V这一档,这四个模块对应的三极管如下图所示,利用gpioset来控制四个gpio的高低电平,看看是否符合上述规则。 |
| | | |
| | | |
| | | |
| | | ### 3.2.2 应用程序测试 |
| | | |
| | | ```c |
| | | gpioset 0 18=1/0 |
| | |
| | | |
| | | 利用万用表,将万用表调到直流电压20V这一档,这四个模块对应的三极管如下图所示,利用gpioset来控制四个gpio的高低电平,看看是否符合上述规则。 |
| | | |
| | |  |
| | |  |
| | | |
| | | |
| | | |
| | |
| | | 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>; |
| | | }; |
| | | }; |
| | | }; |
| | | ``` |
| | | |
| | |
| | | |
| | |  |
| | | |
| | | ``` |
| | | microcom /dev/ttyS9 -s 115200 |
| | | ``` |
| | | |
| | | |
| | | |
| | |  |
| | | |
| | | |
| | |
| | | 将控制引脚拉高电平,输入如下命令 |
| | | |
| | | ```c |
| | | gpioset 4 28=1 |
| | | gpioset 4 26=1 |
| | | ``` |
| | | |
| | |  |
| | | ``` |
| | | microcom /dev/ttyS9 -s 115200 |
| | | ``` |
| | | |
| | | |
| | | |
| | | |
| | | |
| | |
| | | |
| | | 点击 [下载地址](https://pyropus.ca./software/memtester/),即可下载memtester。 |
| | | |
| | | ##### 编译方法1: |
| | | 编译方法1: |
| | | |
| | | 打开终端进入到该路径下,输入解压命令: |
| | | |
| | |
| | | 进入到解压出来的文件夹后打开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路径下,进行编译: |
| | |
| | | |
| | | |
| | | |
| | | ##### 编译方法2: |
| | | 编译方法2: |
| | | |
| | | 可以使用郭工的编译脚本进行编译,只需修改脚本的编译目标即可 |
| | | |
| | |
| | | |
| | | ### 3.8.1 内核修改支持 |
| | | |
| | | #### Iperf下载 |
| | | **Iperf下载** |
| | | |
| | | iperf官网:[iperf.fr](https://iperf.fr/) |
| | | |
| | |
| | | 2.cd iperf-3.x 进入目录,执行git tag查看历史版本。 |
| | | 3.执行git checkout 3.1.3 回退到3.1.3的历史版本。 |
| | | |
| | | #### 网络连接和IP配置 |
| | | **网络连接和IP配置** |
| | | |
| | | 服务端与客户端的网口通过网线和交换机连接,两者IP需要保持在同一网段,如下所示: |
| | | |
| | |
| | | |
| | | Linux系统终端:192.168.10.50 |
| | | |
| | | #### 服务端iperf的安装与使用 |
| | | **服务端iperf的安装与使用** |
| | | |
| | | 关闭Windows系统的防火墙与杀毒软件或允许iperf通过防火墙。 |
| | | 拷贝iperf-3.0.11-win32.rar并解压至Windows系统的的英文路径的目录(如D盘根目录)。 |
| | |
| | | |
| | |  |
| | | |
| | | #### 客户端iperf的安装与使用 |
| | | **客户端iperf的安装与使用** |
| | | |
| | | 直接使用郭工安装库脚本文件build.sh,并做修改 |
| | | |
| | |
| | | 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` |
| | |
| | | 在/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终端执行 |
| | | |
| | |
| | | |
| | | |
| | | ### 3.10.2 应用程序测试 |
| | | |
| | | #### 模块开关机 |
| | | |
| | | **开机方式** |
| | | |
| | |
| | | |
| | | |
| | | |
| | | #### PPP拨号方式 |
| | | **PPP拨号方式** |
| | | |
| | | 内核配置好后,编译生成新的镜像烧录到开发板中 |
| | | |
| | |
| | | |
| | |  |
| | | |
| | | #### ECM模式拨号上网 |
| | | **ECM模式拨号上网** |
| | | |
| | | 上面的ppp模式拨号较为繁琐,需要大量的步骤依赖pppd软件,并且ppp拨号的稳定性不强,所以接下来介绍ECM模式,只需要AT命令就可以拨号上网 |
| | | |
| | |
| | | 同样,我们可以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 |