记录|泰山嵌入式Linux开发
前言
泰山派板载瑞芯微RK3566,性能尚可,出厂系统为Android 11
配置SDk环境
调试
ADB
Android Debug Bridge,即安卓调试桥。作为一个官方“后门”,它是给开发者用于调试的接口,具有高权限的特点
开启有以下步骤:
- 在关于手机中连按版本号打开开发者选项
- 在开发者选项中打开USB调试即可
ADB命令介绍
- 普通型格式,是在电脑上运行的:关于install命令的参数:
1
2
3
4
5
6adb devices
adb shell
adb push <文件路径>
adb pull <文件路径>
adb install <apk文件路径>
adb uninstall <apk包名>
- -g:安装后赋予所有权限
- -r:替换已存在的应用程序,强制安装
- -d: 允许降级安装
结合uninstall -k可实现保留数据降级
以及关于重启的:1
2
3
4
5adb reboot
adb reboot -p
adb reboot recovery
adb reboot bootloader
adb reboot fastboot
- shell型格式,本质上是调用了手机的shell来执行,如adb shell reboot -p,对于shell型命令,我们可以直接调用Android API:
- 活动管理器AM(Activity Manager)
activity可理解为App内部的各个界面1
2am start <包名>/<活动名>
am force-stop <包名> 包管理器PM(Packet Manager)
主要用于管理系统/预装软件1
2
3
4
5
6pm disable-user <包名>
pm enable <包名>
提取系统安装包
pm path <包名>
pm package list | grep <包名的一部分>
adb pull <apk路径>窗口管理器WM(Window Manager)
1
2
3wm size <xPx>x<yPx> # x修改分辨率
wm density <数值> # 修改Dpi
wm density reset- input
1
2
3
4input tap <x> <y>
input swipe <x1> <y1> <x2> <y2> <d>
input keyevent <键值>
input text <内容> # 注意,仅支持英文、数字与半角字符
基本概念
Linux是类Unix的系统,苹果的MacOS也是。
Linux启动的流程:BootLoader->系统内核->文件系统->App。
对于Linux系统的构建,主要有三个
设备树
基本流程:内核编译出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
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语言一样
头文件包含:
- 设备树语法 /include/ “xxx.dtsi”
- C语言语法 #include “xxx.dtsi”,注意使用C语言语法需要预编译:通常使用.h文件包含是为了使用C语言的宏,方便编辑配置
1
cpp -nostdinc -I [头文件目录] -x assembler-with-cpp [设备树源文件] > [预处理输出文件]
技巧:找文件、重复定义的时候直接去temp文件找设备树节点
节点名不得有特殊字符并且要用分隔符通俗易懂,@单元地址(并不是实际的地址,只是为了增强可读性和避免命名冲突),使用标签的引用可以很方便的操作设备树添加节点,别名是在内核中使用的。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{
};
};设备树的属性
属性即键值对。有以下: - model(字符串):描述开发板型号
- compatible(字符串或字符串列表):用于标识设备的兼容性字符串
- reg(地址,长度对):描述设备的物理地址范围,由其父节点的这两个参数确定地址和大小:
- address-cells(整数) 指定用几个32位描述起始地址
- size-cells(整数) 指定用几个32位描述区域长度
- status(字符串):相当于使能开关
- okay:使能工作
- disable:失能
- fail/fail-sss:设备错误/输出错误信息
- devices type(字符串):通常只用于cpu或memory节点
修改示例
- 修改串口波特率:在temp综合文件中搜索1500000可发现该配置项在tspi-rk3566-core-v10.dtsi中,修改fiq-debugger中的baudrate属性即可
- 三色灯在tspi-rk3566-user-v10-linux.dts中,将status改为disable即可
- 泰山派编译内核:sdk/linux中执行
1
./build.sh kernel
- 烧录:参考嘉立创泰山派教程。写驱动,改设备树都是直接编译内核烧录内核就行。
ROS与STM32
ROS(Robot Operating System)
在泰山派中配置ROS,可先刷写树莓派系统