New file |
| | |
| | | # 1. 源码编译 |
| | | |
| | | |
| | | |
| | | RK3568的 Linux SDK 或 Android 源码编译对服务器要求比较高,其中: |
| | | |
| | | * 系统依赖 Ubuntu20 及以上; |
| | | * CPU 8核+、内存32GB+ 以上; |
| | | * 硬盘空间 1TB+; |
| | | |
| | | 推荐在凌云实验室的编译服务器上编译,IGKBoard-RK3568开发板请选择使用 ***sdkv1.3.0_linux4.19*** 版本。 |
| | | |
| | | |
| | | |
| | | ## 1.1 安装交叉编译环境 |
| | | |
| | | |
| | | |
| | | 首先安装交叉编译所需要的系统命令。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:~$ sudo apt install -y git ssh make gcc libssl-dev liblz4-tool \ |
| | | expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support unzip \ |
| | | qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \ |
| | | device-tree-compiler python*-pip libncurses-dev libmpc-dev |
| | | ``` |
| | | |
| | | |
| | | |
| | | 如果是 ***sdkv1.3.0_linux4.19*** 则需要将 python 的版本设置为 **python2**, 而 ***sdkv1.4.0_linux5.10*** 则需要选择 **python3**。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 |
| | | guowenxue@ubuntu22:~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 |
| | | guowenxue@ubuntu22:~$ sudo update-alternatives --config python |
| | | There are 2 choices for the alternative python (providing /usr/bin/python). |
| | | |
| | | Selection Path Priority Status |
| | | ------------------------------------------------------------ |
| | | * 0 /usr/bin/python3 2 auto mode |
| | | 1 /usr/bin/python2 1 manual mode |
| | | 2 /usr/bin/python3 2 manual mode |
| | | |
| | | Press <enter> to keep the current choice[*], or type selection number: 1 |
| | | |
| | | guowenxue@ubuntu22:~$ python --version |
| | | Python 2.7.18 |
| | | ``` |
| | | |
| | | |
| | | |
| | | ## 1.2 解压缩获取SDK源码 |
| | | |
| | | |
| | | |
| | | 首先创建 RK3568 开发板的项目工作路径。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu20:~$ mkdir rk3568 && cd rk3568 |
| | | ``` |
| | | |
| | | |
| | | |
| | | 如果选择 ***sdkv1.3.0_linux4.19*** 版本SDK,则可以使用下面命令从凌云实验室文件服务器上下载并解压缩。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:~/rk3568$ mkdir sdkv1.3.0_linux4.19 && cd sdkv1.3.0_linux4.19 |
| | | |
| | | guowenxue@ubuntu22:~/rk3568/sdkv1.3.0_linux4.19$ wget http://192.168.0.2:2211/rockchip/bsp/rk3568_linuxSDK/sdkV1.3.0_linux4.19/rk356x_linux_release_v1.3.0_20220925.tgz |
| | | |
| | | guowenxue@ubuntu22:~/rk3568/sdkv1.3.0_linux4.19$ tar -xzf rk356x_linux_release_v1.3.0_20220925.tgz |
| | | |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ rm -f *.tgz |
| | | ``` |
| | | |
| | | |
| | | |
| | | 如果选择 ***sdkv1.4.0_linux5.10*** 版本SDK,则可以使用下面命令从凌云实验室文件服务器上下载并解压缩。 |
| | | |
| | | ```bash |
| | | guowenxue@ubuntu22:~/rk3568$ mkdir sdkv1.4.0_linux5.10 && cd sdkv1.4.0_linux5.10 |
| | | |
| | | guowenxue@ubuntu22:~/rk3568/sdkv1.4.0_linux5.10$ wget http://192.168.0.2:2211/rockchip/bsp/rk3568_linuxSDK/sdkV1.4.0_linux5.10/rk356x_linux5.10_release_v1.4.0_20231220.tgz |
| | | |
| | | guowenxue@ubuntu22:~/rk3568/sdkv1.4.0_linux5.10$ tar -xzf rk356x_linux5.10_release_v1.4.0_20231220.tgz |
| | | |
| | | guowenxue@ubuntu22:~/rk3568/sdkv1.4.0_linux5.10$ rm -f *.tgz |
| | | ``` |
| | | |
| | | |
| | | |
| | | 解压缩出来的源码都在隐藏的 ***.repo*** 文件夹下,接下来我们使用 **repo** 命令将源码 checkout 出来。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ ls -a |
| | | . .. .repo |
| | | |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ ls .repo/ |
| | | manifests manifests.git manifest.xml project.list project-objects projects repo |
| | | |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ .repo/repo/repo sync -l |
| | | Updating files: 100% (17139/17139), done./app/rkaiq_tool_serverUpdating files: 51% (8839/17139) |
| | | Updating files: 100% (779/779), done.inux/buildrootUpdating files: 41% (322/779) |
| | | Updating files: 100% (1171/1171), done.ux/debianUpdating files: 72% (844/1171) |
| | | Updating files: 100% (248/248), done.inux/device/rockchipUpdating files: 10% (25/248) |
| | | Updating files: 100% (247/247), done.inux/bsp/docsUpdating files: 45% (112/247) |
| | | Updating files: 100% (1493/1493), done.ux/bsp/external/broadcom_bsaUpdating files: 41% (622/1493) |
| | | Updating files: 100% (127/127), done.inux/external/libglCompositorUpdating files: 44% (56/127) |
| | | Updating files: 100% (118/118), done.inux/external/rkfacialUpdating files: 29% (35/118) |
| | | Updating files: 100% (921/921), done.k/rknn-toolkit2Updating files: 5% (52/921) |
| | | Updating files: 100% (368/368), done.inux/external/rkupdateUpdating files: 22% (84/368) |
| | | Updating files: 100% (186/186), done.inux/external/rkwifibtUpdating files: 59% (110/186) |
| | | Updating files: 100% (2109/2109), done.ux/security/binUpdating files: 15% (332/2109) |
| | | Updating files: 100% (33/33), done. android/rk/platform/system/rk_tee_userUpdating files: 93% (31/33) |
| | | Updating files: 100% (72280/72280), done./external/uvc_appUpdating files: 3% (2631/72280) |
| | | Updating files: 100% (17900/17900), done.rnelUpdating files: 34% (6102/17900) |
| | | Updating files: 100% (7165/7165), done.prebuilts/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnuUpdating files: 13% (949/7165) |
| | | Updating files: 100% (236/236), done.k/rkbinUpdating files: 46% (109/236) |
| | | Updating files: 100% (13576/13576), done./toolsUpdating files: 88% (12076/13576) |
| | | Checking out projects: 100% (65/65), done. |
| | | repo sync has finished successfully. |
| | | |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ ls |
| | | app buildroot build.sh debian device docs envsetup.sh external kernel Makefile mkfirmware.sh prebuilts rkbin rkflash.sh tools u-boot yocto |
| | | ``` |
| | | |
| | | |
| | | |
| | | SDK 相关文档都存放 **docs** 文件夹下。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ ls docs/ |
| | | Common docs_list.txt Linux Others RK356X RK_Linux_SDK_Supported_System_Kernel_Version_and_ISP_Version_List.png Rockchip_Developer_Guide_Linux_Software_CN.pdf |
| | | ``` |
| | | |
| | | |
| | | |
| | | 如果选择 ***sdkv1.3.0_linux4.19*** 版本SDK,还需要从凌云实验室文件服务器上下载buildroot源码并解压缩。 |
| | | |
| | | ```bash |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ cd buildroot/ |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19/buildroot$ wget http://192.168.0.2:2211/rockchip/bsp/rk3568_linuxSDK/sdkV1.3.0_linux4.19/buildroot_DL/dl.zip |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19/buildroot$ unzip dl.zip && rm -f dl.zip |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19/buildroot$ cd .. |
| | | ``` |
| | | |
| | | |
| | | |
| | | ## 1.3 Linux SDK源码编译 |
| | | |
| | | |
| | | |
| | | 首先使用下面命令选择要编译的目标开发板,SDK版本不一样,该选项的名字不一样。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ ./build.sh lunch |
| | | |
| | | 5. BoardConfig-rk3568-evb1-ddr4-v10.mk # sdkv1.3.0_linux4.19 选择该选项 |
| | | 5. rockchip_rk3568_evb1_ddr4_v10_defconfig # sdkv1.4.0_linux5.10 选择该选项 |
| | | Which would you like? [0]: 5 |
| | | ``` |
| | | |
| | | |
| | | |
| | | 如果需要,可以使用下面命令来彻底清除之前的编译。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:~/rk3568/sdk$ ./build.sh cleanall |
| | | ``` |
| | | |
| | | |
| | | |
| | | ***sdkv1.3.0_linux4.19*** 和 ***sdkv1.4.0_linux5.10*** 版本SDK 都需要修改 IO Domain 电压如下。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ vim kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi |
| | | |
| | | ... ... ... |
| | | &pmu_io_domains { |
| | | status = "okay"; |
| | | pmuio2-supply = <&vcc3v3_pmu>; |
| | | vccio1-supply = <&vccio_acodec>; |
| | | vccio3-supply = <&vccio_sd>; |
| | | vccio4-supply = <&vcc_1v8>; |
| | | vccio5-supply = <&vcc_3v3>; |
| | | vccio6-supply = <&vcc_1v8>; |
| | | vccio7-supply = <&vcc_3v3>; |
| | | }; |
| | | ``` |
| | | |
| | | |
| | | |
| | | 接下来运行 build.sh 脚本开始编译SDK,默认是 Buildroot 系统镜像。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ ./build.sh |
| | | ``` |
| | | |
| | | |
| | | |
| | | 也可以通过设置坏境变量 **RK_ROOTFS_SYSTEM** 指定不同 rootfs。 **RK_ROOTFS_SYSTEM** ⽬前可设定三种系统:***buildroot、debian、 yocto***。 |
| | | |
| | | ```bash |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ RK_ROOTFS_SYSTEM=yocto ./build.sh |
| | | ``` |
| | | |
| | | |
| | | |
| | | 如果是 ***sdkv1.3.0_linux4.19*** 在编译 Linux内核时需要做如下选择。 |
| | | |
| | | ``` |
| | | 编译内核过程弹窗的电压选择如下: |
| | | 3300000 PMUIO2 Supply Power Voltage(uV) |
| | | 3300000 VCCIO1 Supply Power Voltage(uV) |
| | | 3300000 VCCIO3 Supply Power Voltage(uV) |
| | | 1800000 VCCIO4 Supply Power Voltage(uV) |
| | | 3300000 VCCIO5 Supply Power Voltage(uV) |
| | | 1800000 VCCIO6 Supply Power Voltage(uV) |
| | | 3300000 VCCIO7 Supply Power Voltage(uV) |
| | | ... ... ... |
| | | ``` |
| | | |
| | | |
| | | |
| | | 编译生成的文件将放在 **rockdev** 文件夹下。 |
| | | |
| | | ``` |
| | | guowenxue@ubuntu22:/build/rk3568/sdkv1.3.0_linux4.19$ ls rockdev/ |
| | | boot.img linux-headers.tar MiniLoaderAll.bin misc.img oem.img parameter.txt recovery.img rootfs.img uboot.img update.img userdata.img |
| | | ``` |
| | | |
| | | |
| | | |
| | | # 2. 系统烧录 |
| | | |
| | | |
| | | |
| | | ## 2.1 开发板烧录连接 |
| | | |
| | | |
| | | |
| | | 如下图所示: |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | * 使用 12V/1A 的电源给开发板供电; |
| | | * 使用两端都是 TypeA接口的USB线连接开发板上的USB3.0接口到自己的PC上,该USB接口为系统烧录口; |
| | | * 使用 TypeB 接口的USB线连接开发板上的 Console 调试串口到自己的PC上; |
| | | |
| | | |
| | | |
| | | ***注: 开发板上电时,可以听到继电器上电后的咔嚓切换声音。*** |
| | | |
| | | |
| | | |
| | | ## 2.2 烧录软件下载 |
| | | |
| | | |
| | | |
| | | 将编译SDK生成的镜像文件(rockdev文件夹)下载到 Windwos下的相应路径下,如: |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 从凌云实验室文件服务器上下载并安装下面烧录软件。 |
| | | |
| | | * [CP210x_VCP_Windows.zip](http://studio.iot-yun.club:2211/rockchip/tools/CP210x_VCP_Windows.zip) 解压缩并安装开发板的Console调试串口驱动; |
| | | * [DriverAssitant_v5.1.1.zip](http://studio.iot-yun.club:2211/rockchip/tools/DriverAssitant_v5.1.1.zip) , 解压缩安装RK3568开发板驱动; |
| | | |
| | | * [RKDevTool_Release_v2.86.zip](http://studio.iot-yun.club:2211/rockchip/tools/RKDevTool_Release_v2.86.zip) ,直接解压缩即可运行的 RK3568开发板烧录软件; |
| | | |
| | | |
| | | |
| | | 下面是我 Windows下的开发板项目目录结构: |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | * **docs** 存放开发板相关文档、芯片datasheet等; |
| | | * **images** 存放开发板编译出来系统镜像; |
| | | * **installer** 项目相关的安装软件; |
| | | * **RKDevTools_v2.86** RK3568开发板烧录软件; |
| | | |
| | | |
| | | |
| | | 双击运行 ***RKDevTools_v2.86*** 文件夹下的 **RKDevTool.exe** 可执行文件, 在下载镜像页面配置各个镜像文件及其烧录地址如下: |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | ## 2.3 Maskrom烧录模式 |
| | | |
| | | |
| | | |
| | | 如果我们想烧录或更新系统镜像,必须要让CPU进入到 Maskrom 烧录模式。在RK3568开发板上,我们可以分别按住开发板上的不同按键进入到 Maskrom 烧录模式。下面是开发板上的各个按键说明: |
| | | |
| | | | 按键 | 作用 | 备注 | |
| | | | ------ | -------------- | -------------------------------------- | |
| | | | SW2101 | RK809_PWRON | 长按8秒左右关机,再按开机 | |
| | | | S1300 | A核Maskrom按键 | 按住该键+复位键系统将进入到MASKROM模式 | |
| | | | SW1501 | Recovery Key | 按住该键+复位键系统将进入到Loader模式 | |
| | | | SW2100 | RESETN | A核复位按键 | |
| | | | S6000 | M3核复位按键 | M核复位按键 | |
| | | | S6001 | M3核ISP按键 | 按下复位M核将进入UART ISP模式 | |
| | | |
| | | |
| | | |
| | | ### 2.3.1 按住 Maskrom 按键进入 |
| | | |
| | | |
| | | |
| | | 如下图所示,将开发板上电后,按住 **S1300(Maskrom)按键** 同时,然后 **按下并释放 SW2100(Reset)按键** 将开发板重启,接下来 **再释放S1300按键**,这时候CPU将会进入到 **Maskrom模式**,在该模式下我们可以烧录或升级系统镜像。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 下面是开发板上的各个按键说明: |
| | | |
| | | | 按键 | 作用 | 备注 | |
| | | | ------ | -------------- | -------------------------------------- | |
| | | | SW2101 | RK809_PWRON | 长按8秒左右关机,再按开机 | |
| | | | S1300 | A核Maskrom按键 | 按住该键+复位键系统将进入到MASKROM模式 | |
| | | | SW1501 | Recovery Key | 按住该键+复位键系统将进入到Loader模式 | |
| | | | SW2100 | RESETN | A核复位按键 | |
| | | | S6000 | M3核复位按键 | M核复位按键 | |
| | | | S6001 | M3核ISP按键 | 按下复位M核将进入UART ISP模式 | |
| | | |
| | | |
| | | |
| | | 此时在 **RKDevTool.exe** 软件底行会显示 “**发现一个MASKROM设备**” 。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | ### 2.3.1 按住 Recovery 按键进入 |
| | | |
| | | |
| | | |
| | | 如下图所示,将开发板上电后,按住 **SW1501(Recovery)按键** 同时,然后 **按下并释放 SW2100(Reset)按键** 将开发板重启,**继续SW1501(Recovery)按键 8秒后释放**,这时候CPU将会进入到 **Loader 模式**,在该模式下我们可以烧录或升级系统镜像。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 此时在 **RKDevTool.exe** 软件底行会显示 “**发现一个LOADER设备**”。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 接下来切换到 “**高级功能**” 菜单下,并点击 “**进入Maskrom**” 按钮,这时候将会切换到 “**Maskrom**” 模式。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | ## 2.4 系统烧录与启动 |
| | | |
| | | |
| | | |
| | | 在 **RKDevTool.exe** 烧录软件上,确认设备已经进入到 Maskrom模式后,点击上面的 **“执行”** 按钮。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 此时将会开始烧录系统镜像到开发板上,烧录完成后系统将会自动重启,系统启动后将会提示 “**发现一个ADB设备**”。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 烧录完成第一次启动后,系统将会自动初始化。初始化完成之后将会再次重启,此时可以使用 Console 串口上登录到开发板的 Linux 系统中去。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | # 3. 外设调试与测试 |
| | | |
| | | |
| | | |
| | | ## 3.1 系统心跳灯 |
| | | |
| | | |
| | | |
| | | ### 3.1.1 内核修改支持 |
| | | |
| | | 原理图 |
| | | |
| | |  |
| | | |
| | | DTS文件修改(如果有) |
| | | |
| | | ``` |
| | | leds: leds { |
| | | compatible = "gpio-leds"; |
| | | work_led: work { |
| | | gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>; |
| | | linux,default-trigger = "heartbeat"; |
| | | status = “okay” |
| | | }; |
| | | }; |
| | | ``` |
| | | |
| | | |
| | | |
| | | 内核make menuconfig配置(默认已使能) |
| | | |
| | | ``` |
| | | Device Drivers -> |
| | | LED Support -> |
| | | LED Support for GPIO connected LEDs |
| | | ``` |
| | | |
| | | ``` |
| | | Device Drivers -> |
| | | LED Support -> |
| | | LED Trigger support -> |
| | | LED Heartbeat Trigger |
| | | ``` |
| | | |
| | | |
| | | |
| | | ### 3.1.2 应用程序测试 |
| | | |
| | | |
| | | |
| | | 设置好config之后重新编译内核并烧到开发板中,当系统启动时就会看到蓝色led灯闪烁。 |
| | | |
| | | |
| | | |
| | | ## 3.2 RGB灯和蜂鸣器扩展接口 |
| | | |
| | | |
| | | |
| | | ### 3.2.1 内核修改支持 |
| | | |
| | | |
| | | |
| | | 原理图及分析 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 这里的测试只要就是对这些gpio进行配置即可,利用gpioset来控制高低电平 |
| | | |
| | | **注意:这四个gpio在设备树中可能会被其他设备所占用,导致不能操作gpio,所以要查看哪些设备占用着这几个gpio需要屏蔽掉这些设备。** |
| | | |
| | | |
| | | |
| | | #### 测试方法 |
| | | |
| | | 由于这四个引脚都是用MOS管控制的开漏输出,所以我们需要去测试MOS管的栅极看看是否是3.3V电平 |
| | | |
| | | **规则:** |
| | | |
| | | **GPIO输出1的时候,对应的栅极是0V** |
| | | **GPIO输出0的时候,对应的栅极是3.3V** |
| | | |
| | | 利用万用表,将万用表调到直流电压20V这一档,这四个模块对应的三极管如下图所示,利用gpioset来控制四个gpio的高低电平,看看是否符合上述规则。 |
| | | |
| | | |
| | | |
| | | ### 3.2.2 应用程序测试 |
| | | |
| | | ```c |
| | | gpioset 0 18=1/0 |
| | | gpioset 0 20=1/0 |
| | | gpioset 0 22=1/0 |
| | | gpioset 3 21=1/0 |
| | | ``` |
| | | |
| | | 利用万用表,将万用表调到直流电压20V这一档,这四个模块对应的三极管如下图所示,利用gpioset来控制四个gpio的高低电平,看看是否符合上述规则。 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | ## 3.3 RTC芯片 |
| | | |
| | | |
| | | |
| | | ### 3.3.1 内核修改支持 |
| | | |
| | | |
| | | |
| | | 内核make menuconfig配置 |
| | | |
| | | 默认已使能 |
| | | |
| | | ``` |
| | | Device Drivers -> |
| | | Real Time Clock -> |
| | | Rockchip RK805/RK808/RK809/RK816/RK817/RK818 RTC -> |
| | | ``` |
| | | |
| | | |
| | | |
| | | ### 3.3.2 应用程序测试 |
| | | |
| | | 输入命令: |
| | | |
| | | ``` |
| | | date -s "2024-04-01 11:40:00" |
| | | ``` |
| | | |
| | |  |
| | | |
| | | 设置完成后再次使用`date`命令查看一下当前时间就会发现时间改过来了 |
| | | |
| | | 大家注意我们使用`date -s`命令仅仅是修改了当前时间,此时间还没有写入到RK809内部 RTC 里面或其他的 RTC 芯片里面,因此系统重启以后时间又会丢失。我们需要将当前的时间写入到 RTC 里面,这里要用到`hwclock` 命令,输入如下命令将系统时间写入到 RTC 里面: |
| | | |
| | | ``` |
| | | hwclock -w /将当前系统时间写入RTC里面/ |
| | | ``` |
| | | |
| | | 时间写入到 RTC 里面以后就不怕系统重启以后时间丢失了 |
| | | |
| | | 间隔时间输入如下命令: |
| | | |
| | | ``` |
| | | hwclock -r /读取当前系统时间/ |
| | | ``` |
| | | |
| | |  |
| | | |
| | | 发现当前系统时间在走动,系统时间正常。 |
| | | |
| | | ## 3.4 RS232和RS485 |
| | | |
| | | |
| | | |
| | | ### 3.4.1 内核修改支持 |
| | | |
| | | RS232 DTS文件修改 |
| | | |
| | | ```c |
| | | &uart3{ |
| | | dma-names = "tx", "rx"; |
| | | pinctrl-names = "default"; |
| | | pinctrl-0 = <&uart3m1_xfer>; |
| | | status = "okay"; |
| | | }; |
| | | |
| | | &uart4{ |
| | | dma-names = "tx", "rx"; |
| | | pinctrl-names = "default"; |
| | | pinctrl-0 = <&uart4m1_xfer>; |
| | | status = "okay"; |
| | | }; |
| | | ``` |
| | | |
| | | RS485 DTS文件修改 |
| | | |
| | | ```c |
| | | &uart9 { |
| | | pinctrl-names = "default"; |
| | | pinctrl-0 = <&uart9m1_xfer &rs485_ctrl>; |
| | | status = "okay"; |
| | | }; |
| | | |
| | | //在rk3568-pinctrl.dtsi下加入 |
| | | rs485 { |
| | | rs485_ctrl: rs485-ctrl { |
| | | rockchip,pins = |
| | | <4 RK_PD2 RK_FUNC_GPIO &pcfg_output_low>; |
| | | }; |
| | | }; |
| | | ``` |
| | | |
| | | 因为RS485是半双工的,所以要么先测接收功能要么测发送功能,从原理图上可以看到,接受与发送功能的切换是GPIO4_D2来控制的,默认情况是接收功能,我们可以利用gpioset命令拉高该gpio让其工作在发送模式 |
| | | |
| | | ### 3.4.2 应用程序测试 |
| | | |
| | | RS232测试 |
| | | |
| | | 在/dev目录下的ttyS3和ttyS4为两路RS232设备,使用microcom 命令可以操作232串口。具体测试如下 |
| | | |
| | | 将两个232设备的RX和TX口用杜邦线进行连接,如下图所示 |
| | | |
| | |  |
| | | |
| | | 连接好之后我们在设备1和设备2上均输入 |
| | | |
| | | ```c |
| | | microcom /dev/ttyS3 -s 115200 |
| | | ``` |
| | | |
| | | 测试结果 |
| | | |
| | |  |
| | | |
| | |  |
| | | |
| | | 由于microcom没有回显,所以看不到自己发送的是什么,但是接受的结果是没错的 |
| | | |
| | | |
| | | |
| | | RS485测试接受功能 |
| | | |
| | | 如图所示,利用TTL转RS485模块来作为另外一台RS485设备,连线如下图所示 |
| | | |
| | |  |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | RS485测试发送功能 |
| | | |
| | | 将控制引脚拉高电平,输入如下命令 |
| | | |
| | | ```c |
| | | gpioset 4 28=1 |
| | | ``` |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | ## 3.5 CAN总线 |
| | | |
| | | |
| | | |
| | | ### 3.5.1 内核修改支持 |
| | | |
| | | DTS文件修改 |
| | | |
| | | ```c |
| | | &can0 { |
| | | compatible = "rockchip,can-1.0"; |
| | | assigned-clocks = <&cru CLK_CAN0>; |
| | | assigned-clock-rates = <150000000>; |
| | | pinctrl-names = "default"; |
| | | pinctrl-0 = <&can0m1_pins>; |
| | | status = "okay"; |
| | | }; |
| | | |
| | | &can1 { |
| | | compatible = "rockchip,can-1.0"; |
| | | assigned-clocks = <&cru CLK_CAN1>; |
| | | assigned-clock-rates = <150000000>; |
| | | pinctrl-names = "default"; |
| | | pinctrl-0 = <&can1m1_pins>; |
| | | status = "okay"; |
| | | }; |
| | | ``` |
| | | |
| | | |
| | | |
| | | 内核make menuconfig配置 |
| | | |
| | | ``` |
| | | Networking support -> |
| | | CAN bus subsystem support -> |
| | | CAN Device Drivers -> |
| | | Platform CAN drivers with Netlink support -> |
| | | ``` |
| | | |
| | | ### 3.5.2 应用程序测试 |
| | | |
| | | 我们可以用ifconfig -a来查看can的数量,如下图所示 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 这里我们测试can1的收发功能,can0与之完全相同 |
| | | |
| | | 首先我们将两个can设备利用杜邦线进行连接,连接如下图所示 |
| | | |
| | |  |
| | | |
| | | 连接好之后,我们需要对can1进行配置,利用ip命令 |
| | | |
| | | ```c |
| | | ip link set can1 down //关闭 can 网络 |
| | | ip link set can1 up type can bitrate 800000 //设置 can1 的波特率为 800kbps,can 网络波特率最大值为 1mbps |
| | | ip link set can1 up type can //打开 can 网络 |
| | | ``` |
| | | |
| | | |
| | | |
| | | 设置好之后,我们上图所示中的设备1作为接受方,设备2作为发送方 |
| | | |
| | | 在设备1上输入 |
| | | |
| | | ```c |
| | | candump can1 |
| | | ``` |
| | | |
| | | 在设备2上输入 |
| | | |
| | | ```c |
| | | cansend can1 123#01020304050607 |
| | | ``` |
| | | |
| | | 结果如图所示 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | ## 3.6 声卡Codec |
| | | |
| | | |
| | | |
| | | ### 3.6.1 内核修改支持 |
| | | |
| | | |
| | | |
| | | 原理图及分析 |
| | | |
| | |  |
| | | |
| | | GPIO管脚设置 |
| | | |
| | | 从原理图可以看出,GPIO3_C3管脚默认值是1,即关闭状态,我们要将其值设置为0 |
| | | |
| | | 输入命令: |
| | | |
| | | ``` |
| | | root@RK356X:/usr/share/sounds# gpioset 3 19=0 |
| | | ``` |
| | | |
| | | 再输入命令,进行查看确认: |
| | | |
| | | ``` |
| | | root@RK356X:/usr/share/sounds# gpioget 3 19 |
| | | 0 |
| | | ``` |
| | | |
| | | |
| | | |
| | | ### 3.6.2 应用程序测试 |
| | | |
| | | J5950端子上部为音频功放输出端口 |
| | | |
| | | 实物图连接: |
| | | |
| | |  |
| | | |
| | | 将.wav格式音乐拷贝到开发板/usr/share/sounds目录下,如图: |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | 使用amixer设置声卡 |
| | | |
| | | ``` |
| | | amixer cset name='Master Playback Volume' 'on','on' |
| | | amixer cset name='Master Playback Volume' '30','30' |
| | | ``` |
| | | |
| | | 使用aplay播放WAV格式音乐 |
| | | |
| | | ``` |
| | | aplay /usr/share/sounds/C400004a29p81sntRV.wav |
| | | ``` |
| | | |
| | | 如果一切设置正常的话就会开始播放音乐。 |
| | | |
| | | |
| | | |
| | | ## 3.7 内存压力测试 |
| | | |
| | | 点击 [下载地址](https://pyropus.ca./software/memtester/),即可下载memtester。 |
| | | |
| | | ##### 编译方法1: |
| | | |
| | | 打开终端进入到该路径下,输入解压命令: |
| | | |
| | | ``` |
| | | tar xzvf memtester-4.6.0.tar.gz |
| | | ``` |
| | | |
| | | 进入到解压出来的文件夹后打开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 - |
| | | ``` |
| | | |
| | | 打开conf-ld文件,行首更改如下,并保存 |
| | | |
| | | ``` |
| | | /home/tangjunfeng/rk3568/sdkv1.3.0_linux4.19/buildroot/output/rockchip_rk3568/ host/usr/bin/aarch64-buildroot-linux-gnu-cc -s |
| | | ``` |
| | | |
| | | 在memtester-4.6.0路径下,进行编译: |
| | | |
| | | ``` |
| | | sudo make |
| | | ``` |
| | | |
| | | 编译之后,进行安装: |
| | | |
| | | ``` |
| | | sudo make install |
| | | ``` |
| | | |
| | | |
| | | |
| | | ##### 编译方法2: |
| | | |
| | | 可以使用郭工的编译脚本进行编译,只需修改脚本的编译目标即可 |
| | | |
| | | |
| | | |
| | | 安装完成后,会在memtester-4.6.0路径下生成memtester可执行文件,将memtester执行文件传到RK3568开发板中,给予memtester权限 |
| | | |
| | | ``` |
| | | chmod 777 memtester |
| | | ``` |
| | | |
| | | 输入`free -h`查看开发版剩余空间,可以看到还剩余3.6G |
| | | |
| | |  |
| | | |
| | | 输入命令(3.6G=3687M,跑3轮),即可测试 |
| | | |
| | | ``` |
| | | ./memtester 3687 3 |
| | | ``` |
| | | |
| | | |
| | | |
| | | ## 3.8 网卡压力测试 |
| | | |
| | | |
| | | |
| | | ### 3.8.1 内核修改支持 |
| | | |
| | | #### Iperf下载 |
| | | |
| | | iperf官网:[iperf.fr](https://iperf.fr/) |
| | | |
| | | iperf源码下载地址:[https://github.com/esnet/iperf](https://github.com/esnet/iperf) |
| | | |
| | | Windows版本二进制文件下载:[32位&64位](https://iperf.fr/iperf-download.php#windows) |
| | | |
| | | Linux系统terminal终端下载指定版本: |
| | | |
| | | 1.执行git clone [https://github.com/esnet/iperf.git](https://github.com/esnet/iperf.git) 默认下载最新版本。 |
| | | 2.cd iperf-3.x 进入目录,执行git tag查看历史版本。 |
| | | 3.执行git checkout 3.1.3 回退到3.1.3的历史版本。 |
| | | |
| | | #### 网络连接和IP配置 |
| | | |
| | | 服务端与客户端的网口通过网线和交换机连接,两者IP需要保持在同一网段,如下所示: |
| | | |
| | | Windows系统终端:192.169.10.200 |
| | | |
| | | Linux系统终端:192.168.10.50 |
| | | |
| | | #### 服务端iperf的安装与使用 |
| | | |
| | | 关闭Windows系统的防火墙与杀毒软件或允许iperf通过防火墙。 |
| | | 拷贝iperf-3.0.11-win32.rar并解压至Windows系统的的英文路径的目录(如D盘根目录)。 |
| | | 按"win + R"打开Dos窗口,执行“d:” 进入D盘,再执行“cd iperf-3.0.11-win32”进入iperf3.exe所在目录。 |
| | | 执行iperf3 -s 运行iperf作为服务端 |
| | | |
| | |  |
| | | |
| | | #### 客户端iperf的安装与使用 |
| | | |
| | | 直接使用郭工安装库脚本文件build.sh,并做修改 |
| | | |
| | | ```c |
| | | 1 #!/bin/bash |
| | | 2 |
| | | 3 # library name and version |
| | | 4 # Official: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git |
| | | 5 LIB_NAME=iperf |
| | | 6 PACK_SUFIX=tar.gz |
| | | 7 |
| | | 8 # LingYun source code FTP server |
| | | 9 LY_FTP=http://main.iot-yun.club:2211/src/ |
| | | 10 |
| | | 11 # library download URL address |
| | | 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- |
| | | 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` |
| | | 19 |
| | | 20 # this project absolute path |
| | | 21 PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) |
| | | 22 |
| | | 23 # top project absolute path |
| | | 24 TOP_PATH=$(realpath $PRJ_PATH/..) |
| | | 25 |
| | | 26 # binaries install path |
| | | 27 PREFIX_PATH=$TOP_PATH/install |
| | | 28 BIN_PATH=$PREFIX_PATH/bin |
| | | 29 LIB_PATH=$PREFIX_PATH/lib |
| | | 30 INC_PATH=$PREFIX_PATH/include |
| | | 31 |
| | | ...... |
| | | 155 function do_build() |
| | | 156 { |
| | | 157 cd $LIB_NAME |
| | | 158 |
| | | 159 do_export |
| | | 160 |
| | | 161 echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache |
| | | 162 ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} --enable-static |
| | | 163 check_result "ERROR: configure ${LIB_NAME} failure" |
| | | 164 |
| | | 165 make -j ${JOBS} && make install |
| | | 166 check_result "ERROR: compile ${LIB_NAME} failure" |
| | | 167 } |
| | | ...... |
| | | ``` |
| | | |
| | | 执行脚本文件,自动安装下载 |
| | | |
| | | ``` |
| | | ./build.sh |
| | | ``` |
| | | |
| | | 在/install/bin,生成可执行文件 iperf3 |
| | | |
| | | ``` |
| | | lingyun@9d57f9229b66:/home/anheng/install/bin$ ls |
| | | gpiodetect gpiofind gpioget gpioinfo gpiomon gpioset iperf3 |
| | | ``` |
| | | |
| | | 将 iperf3拷贝到开发板 |
| | | |
| | | #### 测试TCP |
| | | |
| | | 在Linux终端执行 |
| | | |
| | | ``` |
| | | iperf3 -c 192.168.10.200 -d -t 60 |
| | | ``` |
| | | |
| | |  |
| | | |
| | | 测试结果 |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | ## 3.9 继电器 |
| | | |
| | | |
| | | |
| | | ### 3.9.1 内核修改支持 |
| | | |
| | | |
| | | |
| | | 原理图及分析 |
| | | |
| | |  |
| | | |
| | | ### 3.9.2 应用程序测试 |
| | | |
| | | 利用gpioset来控制继电器的开与关,当我们设置这两个gpio的电平时会听到继电器发出“咔嚓”的声音,此时证明继电器是正常的。 |
| | | |
| | | 例如输入 |
| | | |
| | | ```c |
| | | gpioset 3 28=0 |
| | | gpioset 3 28=1 |
| | | ``` |
| | | |
| | | |
| | | |
| | | ## 3.10 4G模块 |
| | | |
| | | |
| | | |
| | | ### 3.10.1 内核修改支持 |
| | | |
| | | |
| | | |
| | | 原理图及分析 |
| | | |
| | | |
| | | |
| | | DTS文件修改(如果有) |
| | | |
| | | ``` |
| | | TBD |
| | | ``` |
| | | |
| | | |
| | | |
| | | 内核make menuconfig配置(如果有) |
| | | |
| | | ``` |
| | | xxxx -> |
| | | xxxx -> |
| | | xxxx -> |
| | | ``` |
| | | |
| | | |
| | | |
| | | ### 3.10.2 应用程序测试 |
| | | |
| | | |
| | | |
| | | TBD |
| | | |