前言

泰山派板载瑞芯微RK3566,性能尚可,出厂系统为Android 11

配置SDk环境

调试

ADB

Android Debug Bridge,即安卓调试桥。作为一个官方“后门”,它是给开发者用于调试的接口,具有高权限的特点
开启有以下步骤:

  1. 在关于手机中连按版本号打开开发者选项
  2. 在开发者选项中打开USB调试即可

    ADB命令介绍

  3. 普通型格式,是在电脑上运行的:
    1
    2
    3
    4
    5
    6
    adb devices
    adb shell
    adb push <文件路径>
    adb pull <文件路径>
    adb install <apk文件路径>
    adb uninstall <apk包名>
    关于install命令的参数:
  • -g:安装后赋予所有权限
  • -r:替换已存在的应用程序,强制安装
  • -d: 允许降级安装
    结合uninstall -k可实现保留数据降级
    以及关于重启的:
    1
    2
    3
    4
    5
    adb reboot
    adb reboot -p
    adb reboot recovery
    adb reboot bootloader
    adb reboot fastboot
  1. shell型格式,本质上是调用了手机的shell来执行,如adb shell reboot -p,对于shell型命令,我们可以直接调用Android API:
  • 活动管理器AM(Activity Manager)
    activity可理解为App内部的各个界面
    1
    2
    am start <包名>/<活动名>
    am force-stop <包名>
  • 包管理器PM(Packet Manager)
    主要用于管理系统/预装软件

    1
    2
    3
    4
    5
    6
    pm disable-user <包名>
    pm enable <包名>
    # 提取系统安装包
    pm path <包名>
    pm package list | grep <包名的一部分>
    adb pull <apk路径>
  • 窗口管理器WM(Window Manager)

    1
    2
    3
    wm size <xPx>x<yPx> # x修改分辨率
    wm density <数值> # 修改Dpi
    wm density reset
  • input
    1
    2
    3
    4
    input tap <x> <y>
    input swipe <x1> <y1> <x2> <y2> <d>
    input keyevent <键值>
    input text <内容> # 注意,仅支持英文、数字与半角字符

基本概念

Linux是类Unix的系统,苹果的MacOS也是。
Linux启动的流程:BootLoader->系统内核->文件系统->App。
对于Linux系统的构建,主要有三个

  1. Buildroot
  2. yocto
  3. openwrt

    基本操作

    linux常用命令

    source用于引入环境变量,可以使用echo ${变量}来输出变量的值
    删除:rm -rf *

设备树

基本流程:内核编译出DTC(设备树编译器,相当于c语言的gcc),再用DTC编译DTS(设备树源文件,相当于.c)、DTSI(设备树源文件包含,相当于.h)得到DTB(设备树二进制文件)。属性(Property)与属性值(Property value)用于描述节点(Node),节点存在子节点和父节点用于描述设备间的连接关系。每一个节点都是一个硬件

文档结构

一般在SDK/kernel/arch/arm64/boot/dts/rockchip/中,其中arm64指明了系统的架构。(vscode插件推荐:DeviceTree)
里面有四种类型的文件:DTS、DTSI、DTB、Makefile
alt text

dtc编译

在sdk/linux/kernel/scripts中,存放着内核编译出来的dtc,在此目录下可使用dtc工具指令,否则需下载dtc工具
全局dtc:

1
sudo apt install device-tree-compiler

使用dtc —version可查看版本信息,一般全局安装的软件dtc版本和SDK的版本不一样,下列两个指令设备树文件的编译与反编译:
1
dtc -I dts -O dtb -o output.dtb input.dts

1
dtc -I dtb -O dts -o backput.dts output.dtb

设备树基础语法

版本声明: /dts-v1/;
注释:与C语言一样
头文件包含:

  1. 设备树语法 /include/ “xxx.dtsi”
  2. C语言语法 #include “xxx.dtsi”,注意使用C语言语法需要预编译:
    1
    cpp -nostdinc -I [头文件目录] -x assembler-with-cpp [设备树源文件] > [预处理输出文件]
    通常使用.h文件包含是为了使用C语言的宏,方便编辑配置
    技巧:找文件、重复定义的时候直接去temp文件找
    alt text

    设备树节点

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /dts-v1/;             // 设备树编译器版本信息

    / { // 根节点
    node1@123 { // 第一个子节点
    child_node { // node1 的子节点
    // 空节点,没有定义任何属性或子节点
    };
    };

    node2@321 { // 第二个子节点
    // 空节点,没有定义任何属性或子节点
    };
    };

    &uart1{ // 通过引用标签的方式往 serial@80000000 中追加一个节点非覆盖。
    node_add2{
    };
    };

    节点名不得有特殊字符并且要用分隔符通俗易懂,@单元地址(并不是实际的地址,只是为了增强可读性和避免命名冲突),使用标签的引用可以很方便的操作设备树添加节点,别名是在内核中使用的。

    设备树的属性

    属性即键值对。有以下:
  3. model(字符串):描述开发板型号
  4. compatible(字符串或字符串列表):用于标识设备的兼容性字符串
  5. reg(地址,长度对):描述设备的物理地址范围,由其父节点的这两个参数确定地址和大小:
  • address-cells(整数) 指定用几个32位描述起始地址
  • size-cells(整数) 指定用几个32位描述区域长度
  1. status(字符串):相当于使能开关
  • okay:使能工作
  • disable:失能
  • fail/fail-sss:设备错误/输出错误信息
  1. devices type(字符串):通常只用于cpu或memory节点

修改示例

  1. 修改串口波特率:在temp综合文件中搜索1500000可发现该配置项在tspi-rk3566-core-v10.dtsi中,修改fiq-debugger中的baudrate属性即可
  2. 三色灯在tspi-rk3566-user-v10-linux.dts中,将status改为disable即可
  3. 泰山派编译内核:sdk/linux中执行
    1
    ./build.sh kernel
  4. 烧录:参考嘉立创泰山派教程。写驱动,改设备树都是直接编译内核烧录内核就行。

ROS与STM32

ROS(Robot Operating System)
在泰山派中配置ROS,可先刷写树莓派系统

简介

  1. ROS主控:上位机
    对雷达,摄像头数据进行融合,进行上层的路径、速度规划
  2. STM32:下位机
    检测底层参数,如IMU方位,编码器,并执行上位机的要求,如前进与转向

    软件配置

    在通信方面,一般使用TTL电平转换芯片,如CP2102,这就涉及两个配置:
  3. 配置CP2102的serial号
    相当于芯片编号,系统用它来识别不同的芯片
  4. 在系统层面为CP2102端口配置别名
    在linux中,串口端口名字默认为ttyUSBx,后面的x与接入系统的上电时间有关,为了增强程序的稳健性,有必要给各自的端口起一个唯一的名字