当前位置: 首页 > news >正文

实习日记--核心板第一周

第一天

了解公司核心板:IDO-EVB3568-V1/IDO-EVB3562-V1

对两块核心板的功能外设进行了解,了解各个接口分别是什么

第二天

对IDO-EVB3562-V1进行基础测试(SOC:RockChip RK3562)

1、烧录固件:IDO_EVB3562_V1B_Android13_LVDS1280×800_240411R
2、测试主要用ADB、LVDS屏幕和调试串口(Debug UART)进行辅助测试
3、补充:调试串口(Debug UART):BootROM → Bootloader(如 U-Boot)→ Linux 内核 → 文件系统依次执行,每个阶段都会通过这个串口打印日志

1、测试环境准备

首先将板子连接上LVDS屏幕的屏幕接口,选择驱动电压(我选择3.3v),连接好屏幕背光座和屏幕的TP,接着win+r输入cmd启动命令行接口,将核心板的OTG的USB口与电脑连接起来,在命令行接口输入adb shell命令在主机上建立一个与核心板之间的交互式 Linux Shell 会话

现例举印象深刻的模块:

2、Ethernet测试/WIFI测试

在主板上插网线,看屏幕上是否有主板动态分配 IP 地址/在屏幕上连接WiFi看是否能连接

通过ifconfig查看网线/WiFi分配的IP地址和MAC地址等,然后静态修改IP地址和MAC地址看是否成功

接着查看丢包率,使用ping -c 100 -I wlan0 www.baidu.com进行ping100次www.baidu.com查看丢包率,跑完后再查看cat /proc/net/dev

再进行冲突测试,看优先级是否网口>WIFI>4G/5G上网优先级

3、串口测试

本次测了四个串口,uart4,uart9,uart6,uart8(前两个是ttl,后两个是rs232)

3.1、ttl

ttl的测试通过USB转TTL模块和串口调试助手进行测试,先将USB转TTL模块和板子与主机连接好,进入adb shell,输入microcom -s 9600 -X /dev/ttyS4(后面那个是串口的设备节点)
接着进入串口调试助手,输入对应波特率,选择设备,接着就可以进行测试

3.2、rs232

通过官网文档找到设备RS232节点,EVB3562为/dev/ttyS6和/dev/ttyS8,使用回环测试,将两个串口的tx接rx,rx接tx。
接着用调试串口和adb分别进入两个命令行,其中一个输入cat /dev/ttyS6监视串口是否有数据收发,在另一个命令行输入echo 123 > /dev/ttyS8发送数据

3.3、UI测试

如果要用LVDS屏幕进行UI测试,通过 adb 工具安装 ComAssistant.apk 至开发板
adb install "C:\Users\admin\Desktop\ComAssistant.apk"后面那个是apk的地址,获取地址可以通过直接将apk拖入cmd命令行获取
接着做法就与上述方式类似,ui配置设备节点和波特率,串口调试助手也配置对应波特率

4、ADC测试

该板子

然后通过cat /sys/bus/iio/devices/iio\:device1/in_voltage0_raw读取ADC

5、固件

固件”实际上是一个完整的系统镜像包,它包含了让硬件启动和运行所需的所有软件层
固件 ≈引导程序 + 内核 + 根文件系统 + 分区表的打包体

每次使用一块新的核心板时,都需要先烧录固件,我使用RKDevTool进行烧录固件

烧录固件前,要先进行驱动安装,下载官方驱动软件压缩包DriverAssitant_v5.11.zip,解压完之后运行DriverInstall.exe进行驱动安装

5.1、固件烧录方式

固件烧录有两种方式,MaskRom和Loader模式,OTG

烧录模式

MaskRom模式

Loader模式

简单描述

1.使用USB线将主板连接到电脑上

2.硬件操作使板子进入升级模式

3.在PC上使用USB升级单板固件

1.使用USB线将主板连接到电脑上

2.软件或按键操作使板子进入升级模式

3.在PC上使用USB升级单板固件

使用场景

1.当板子无法正常启动时

1.有完整Uboot或能正常进入系统

2.需要单独烧写分区

优点

1.最基本的烧写方式

2.非固件和硬件问题,一般都能成功烧写

3.不需要Uboot支持,拯救变砖的单板

1.烧写效果与MaskRom升级模式类似

2.能单独烧写分区

3.进入Loader模式方便

缺点

1.进入方式麻烦,不适难拆除外壳的产品

2.较难单独烧写分区

3.需要完全擦除设备再烧写

1.需要完整的Loader

2.跨系统升级需要完全擦除设备在烧写

5.2、固件内部结构(以 Rockchip Android 为例)

组件说明对应文件(分区)
1. Loader / SPL一级引导程序,初始化 DDR 时钟、存储控制器,从闪存加载下一级MiniLoaderAll.bin
2. U-Boot二级引导程序,初始化外设、显示、启动内核uboot.img
3. Trusted Firmware (ATF)ARM 可信固件,提供安全监控模式调用trust.img
4. 内核 (Kernel)Linux/Android 内核镜像,包含驱动、调度器、文件系统支持boot.img(内含 kernel + ramdisk + DTB)
5. 设备树 (DTB)硬件描述文件,告诉内核板子上有哪些外设、引脚功能、时钟等通常打包在boot.img或单独的dtbo.img
6. 根文件系统 (Rootfs)系统启动后挂载的根目录,包含/system,/vendor,/data等分区system.img,vendor.img,oem.img
7. 用户数据分区出厂预置的用户空间,首次开机会被复制到/datauserdata.img
8. 其他参数分区表、环境变量、开机 Logo、恢复模式等parameter.txt,misc.img,logo.img,recovery.img

我通过RKDevToll解包该固件得到:

文件名说明
MiniLoaderAll.bin一级引导加载器(SPL),初始化 DDR 和存储,加载 U-Boot
parameter.txt分区表配置,定义了各分区的起始地址、大小和名称
uboot.imgU-Boot 二级引导程序镜像
boot.img内核 + ramdisk + 设备树(DTB),用于启动系统
dtbo.img设备树叠加层(Device Tree Overlay),用于动态调整硬件配置
recovery.img恢复模式系统镜像(包含独立的 kernel + ramdisk)
misc.imgmisc 分区,用于控制启动模式(如进入 recovery)
super.imgAndroid 动态分区镜像,内部包含systemvendorproductodm等逻辑分区
vbmeta.imgAndroid Verified Boot 元数据,用于验证分区完整性
baseparameter.img板级参数(如序列号、WiFi MAC 地址等)
package-file打包配置文件,记录了固件打包时各镜像的打包顺序和路径

6、驱动编写

6.1、准备与理解

理解硬件:需要清晰地知道这个外设在硬件上是如何连接,了解工作原理、寄存器定义、通信协议和时序,确认它连接到了哪个接口(例如,I2C、SPI、GPIO等)以及具体引脚

确认驱动类型:根据设备特性,确定它在Linux系统中的驱动类型

明确接口方式:明确应用程序将如何与你的驱动交互

6.2、设备树配置 (DTS)

修改板级dts文件:在对应目录下,找到并修改你开发板对应的.dts文件

添加或修改节点:根据硬件连接来编写设备树节点

上面的启动节点就是把status设置成“okay”

6.3、驱动代码编写

6.4、编译


kconfig里面定义了内核配置的菜单项,让你可以通过 make menuconfig来决定是否编译某个驱动(编译进内核、编译成模块、或完全不编译)

接着修改Makefile:打开Makefile,添加“obj-$(CONFIG_MY_SENSOR) += my_sensor.o”

6.5、测试与调试 (Test & Debug)

第三,四天

对SBC-7602进行测试(SOC:RockChip RK3576)
(测试内容不写完,仅展示部分)

1、Ethernet测试

ifconfig查看IP地址,Mac地址等等

ethtool eth0查看以太网口速率

2、TF卡

TF卡全称TransFlash 卡,是Micro SD 卡的旧称。它是一种极小的闪存存储卡,主要用于手机、平板、运动相机、树莓派、开发板等空间受限的设备扩展存储。

测试速率,插入TF卡,输入df-h,在输出里面找设备
挂载点也可为:/storage/E07E-415A0

查询设备

输入df

清除缓存

su echo 3 > /proc/sys/vm/drop_caches

读速率测试(2G)

dd if=/storage/E07E-415A0/test.txt of=/dev/zero bs=16k count=128k

写速率测试(2G)

dd if=/dev/zero of=/storage/E07E-415A0/test.txt bs=16k count=128k
方向作用
if=/dev/zero生成无限零字节,用于写测试或创建空白文件
of=/dev/zero丢弃所有写入的数据,用于读测试(相当于黑洞)

of=/.../test.txt表示输出文件。如果该文件不存在,dd会自动创建它
连续测试3次,取平均值,测试前均需要清除缓存

3、串口测试

RS232

把RS232的TX和RX通过一根导线短接,然后在终端输入microcom -p /dev/ttyS7 -s 115200进行测试,在键盘上输入什么,终端就会显示什么

RS485

将两个RS485的A连起来,B连起来,假设两个串口节点分别为/dev/ttyS1和/dev/ttyS7
然后设置参数

stty -F /dev/ttyS1 115200 cs8 -cstopb -parenb stty -F /dev/ttyS7 115200 cs8 -cstopb -parenb

终端1 监听

cat /dev/ttyS1

终端2 发送

echo "test" > /dev/ttyS7

4、Linux操作系统

Debian、Ubuntu 和 Buildroot 的核心区别在于,前两者是成熟的通用操作系统,而 Buildroot 更像一个用于构建定制系统的框架

4.1、Buildroot

它不是一个装好就能用的操作系统,而是一套用 Makefile 和 Kconfig 脚本写成的自动化构建工具。你给它选好目标硬件、需要的软件包,它就会帮你从源代码交叉编译,生成一个极简的根文件系统、内核和引导程序。

  • 产出:几 MB 到几十 MB 的固件镜像,适合小到路由器、摄像头这类资源紧张的设备。

  • 特点:高度定制,要什么功能加什么,系统非常轻量;没有传统的包管理器(如 apt),升级通常靠整体烧录新固件。

4.2、Debian

它是一个完全由社区维护的通用操作系统,以坚如磐石的稳定性和庞大的软件仓库闻名。它只收录经过充分测试的自由软件。

  • 用途:服务器、追求长期无故障运行的桌面。

  • 特点:软件版本偏保守但极其可靠,是许多其他发行版(包括 Ubuntu)的“母版”。

4.3、Ubuntu

它基于 Debian 的不稳定分支构建,由 Canonical 公司主导,目标是降低 Linux 的使用门槛,提供更现代的桌面体验和更新的软件。

  • 用途:个人电脑、云服务器、人工智能开发环境。

  • 特点:界面友好,软件版本新,对硬件驱动支持更好。分为每半年一版的常规版和每两年一版的长期支持版 (LTS)。

对比维度BuildrootDebianUbuntu
本质嵌入式系统构建工具通用 Linux操作系统发行版基于 Debian 的操作系统发行版
目标场景极简嵌入式设备、IoT、工控服务器、追求稳定的桌面、嵌入式(如树莓派)个人/企业桌面、云服务器、AI 开发
系统大小极轻量,可做到几 MB基础安装约几百 MB起步基础安装约几百 MB起步
软件获取完全从源代码编译,精挑细选使用庞大的二进制软件包仓库 (apt)使用庞大的二进制软件包仓库 (apt)
包管理器。系统构建完成后是静态的。dpkg / apt,可随时安装、升级、删除软件dpkg / apt,同 Debian
发布与维护每 3 个月发布一次版本,持续滚动更新不定期发布稳定版,维护周期长(约5年)定期发布,LTS 版维护 5-10 年
定制与复杂度灵活度极高,但需要较多嵌入式 Linux 知识通过包管理安装卸载,常规配置,上手相对简单同 Debian,且提供更多自动化配置工具

5、M.2

M.2 是一种电脑内部的硬件接口规范,主要用来安装固态硬盘(SSD)无线网卡。可以把它理解成一种新的、小巧的“插槽标准”,用来替代老旧的 mSATA 等接口。

5.1、显著特点:

  • 体积很小:像一根口香糖,长条形,直接平插在主板上,非常适合轻薄笔记本和紧凑的迷你主机。

  • 速度极快:M.2 接口最重要的优势是支持NVMe 协议,数据通过 PCIe 通道(类似显卡用的高速通道)传输,速度可达几千 MB/s,是传统 SATA 固态硬盘的好几倍。

  • 一槽两用,需要留意:M.2 插槽既可以走SATA 通道,也可以走PCIe 通道(支持 NVMe)

    • M.2 SATA SSD:速度跟普通 2.5 寸固态一样(约 550MB/s),价格便宜。

    • M.2 NVMe SSD:速度极快(可达 7000MB/s+),是目前的主流。

    • 外观上可能一样,但插槽协议可能不同,购买时一定要看清主板 M.2 插槽和硬盘都支持哪种协议。

5.2、常见形态与用途

最常见的尺寸是2280(宽22mm,长80mm)。除了 SSD,M.2 接口也常用于安装 Wi-Fi/蓝牙无线网卡(尺寸更小,通常为 2230)。很多工业主板或树莓派 CM4 的扩展底板上,也会用 M.2 槽来挂载硬盘或 AI 算力卡。

6、GPIO

#输出 # 设置 GPIO0_D1 输出高电平状态 gpioset gpiochip0 25=1 # 设置 GPIO0_D1 输出低电平状态 gpioset gpiochip0 25=0 #输入 # 获取 GPIO0_D1 输入电平状态 gpioget gpiochip0 25

其中25是GPIO序号
然后用万用表测gpio电平

7、串口通信

7.1、UART

UART 不是一种硬件,而是一种通信约定,它解决的是“一个比特一个比特如何打包”的问题。
本质:一种异步串行通信协议,没有独立的时钟线,双方约定相同的波特率(如 9600、115200)。
数据帧格式(一帧数据)
起始位:未通信时总线保持高电平(空闲状态),要发送数据时,先拉低一个位宽,作为起始标志。
数据位:紧接起始位后,通常是5到9位,最低有效位(LSB)先发。最常见的是8位数据。
奇偶校验位(可选):用于简单检错。比如“偶校验”保证数据位加校验位中 1 的个数为偶数。接收方可以据此判断单比特错误。
停止位:数据发送完毕后,将总线拉高,维持 1、1.5 或 2 个位宽,表示本帧结束,同时让总线回到空闲状态,准备下一帧。
全双工:TX 和 RX 独立线路,可同时收发
注意:UART 是全双工(可同时收发),但它通常只需要 TX、RX、GND 三根线(无硬件流控时)。

7.2、TTL

当人们说“接个 TTL 串口”,指的是:直接使用 0V 和芯片供电电压(3.3V 或 5V)来表示 0 和 1 的 UART 信号
电平标准(以 5V TTL 为例):

信号连接单端信号,以公共地(GND)为参考。最少只需3 根线:TX(发送)、RX(接收)、GND(地)。带硬件流控时才需要 RTS/CTS。
致命弱点:

7.3、RS232

TTL 用 0V 和几伏的正电压来表示;RS232 用正负十几伏的电压来表示,而且逻辑是反的。

RS232 就是给两台设备之间,拉一根“专用电话线”,只能你和我通话,距离不远,但够直接。

工作方式:
它用电线上的电压高低来表示 0 和 1。比如电压是正的(+几伏)表示 0,电压是负的(-几伏)表示 1。
这就像两个人拿对讲机,按下说话时灯亮(代表 0),松开时灯灭(代表 1),对方看灯就知道你在说什么,很简单直接。

特点:

比较点TTL 串口RS232 串口
电压0V ~ 3.3V 或 0V ~ 5V+3V 到 +15V-3V 到 -15V(常见 ±12V)
逻辑定义0V 左右 = 逻辑0
Vcc(3.3V/5V)= 逻辑1
正电压(+3V ~ +15V)= 逻辑0
负电压(-3V ~ -15V)= 逻辑1(注意是反的)
空闲状态高电平(Vcc)负电压(逻辑1
连接线TX, RX, GND(最少3根)TX, RX, GND(DB9头里常用2,3,5脚)
距离板级,几厘米到几十厘米可达15米左右
抗干扰差,因为电压低且单端对地稍好,因为电压摆幅大
能否直连绝对不能直接连 RS232,会烧毁芯片必须通过MAX232 之类芯片转换才能接 TTL 设备
典型场景单片机连接蓝牙模块、GPS模块、串口屏电脑背后老式 COM 口连调制解调器、工控仪表

7.4、RS485

RS485 就是给一群设备拉一根“公共广播线”,大家都能接在这条线上,轮流说话,传得远,抗干扰强。
它没有固定形状的接头,通常就是两根普通的双绞线(像网线里面那种两根拧在一起的线),一红一黑或者标着A 和 B

工作方式:
它不靠电压的绝对值,而是靠两根线之间的电压差来表示 0 和 1。就像跷跷板:

这样做的好处:假设外面有电磁干扰,两根线靠得很近又拧在一起,受到的干扰几乎一样,差值却基本不变,所以不容易出错。这就是它抗干扰强、能传很远的秘密。

特点:

如何给特定设备发信息:
所有设备都在静默“监听” -> 主机发出“寻址呼叫” -> 从机“对号入座”,只有被点名的才应答 -> 目标从机接管总线,做出回应


7.5、Modbus

Modbus 是一种主从架构的通信协议,主要用于工业设备之间交换数据。它规定了数据怎么打包、谁问谁答、问的格式是什么

Modbus 的核心规则:
一条总线上只有一个主机(主设备,比如 PLC 或电脑),其他都是从机(从设备,比如传感器、仪表)。从机从不主动说话,只有主机点到它的地址,它才能回答。

数据打包格式:


功能码决定了“干什么”:

8、GDB

GDB(GNU Debugger)是 Linux/Unix 下最常用的命令行调试器,用于调试 C/C++ 程序。它可以让你在程序运行时暂停、查看变量、设置断点、单步执行、查看调用栈等,是排查崩溃、逻辑错误、内存泄漏的核心工具。

指令(简写)作用
gdb ./program启动 GDB 并加载程序
gdb ./program core调试 core dump 文件
runr运行程序
break mainb mainmain函数设置断点
break file.c:50在 file.c 的第 50 行设置断点
continuec继续执行,直到下一个断点
nextn单步执行(不进入函数内部)
steps单步执行(会进入函数内部)
print varp var打印变量var的值
info localsi loc显示当前函数的局部变量
backtracebt查看函数调用栈
frame nf n切换到栈帧 n(0 为当前)
listl显示当前附近的源代码
quitq退出 GDB
http://www.cnnetsun.cn/news/2853941.html

相关文章:

  • 深入理解Kotlin中的noinline与crossinline修饰符:Android开发的必备进阶技巧
  • JVM——线程池实现原理
  • 洛谷题解P4314 [CPU监控]
  • Dubbo的实现原理
  • 公司要求全员学 AI:别只追工具,核心要掌握方法与工作流
  • 蓝桥杯嵌入式备赛避坑指南:从第八届电梯题看状态机设计与调试技巧
  • Windows 10上5分钟搞定EMQX MQTT服务器,叉车本地测试不求人
  • 告别手动复制粘贴!用Wireshark命令行+Python脚本,一键批量提取pcap原始16进制数据
  • 从设计稿到上线:手把手教你用el-table实现高还原度的复杂数据表格(含暗黑模式适配)
  • 保姆级教程:在Win11上搞定MySQL 8.0.28安装与配置(附常见错误排查清单)
  • FusionCompute 8.0 VRM主备部署:从规划IP到登录管理后台的完整配置清单与注意事项
  • 告别Softmax,拥抱Logistic:YOLOv3的多标签分类实战与损失函数调优指南
  • 终于有人整理出了,AI漫剧角色创作全流程:从设定、三视图、表情、动作到提示词
  • 2026成都苹果手机维修性价比推荐:不花冤枉钱的理性选择
  • DocuSign电子签API集成实战:批量发送信封与Webhook回调处理
  • 2026年鹤壁烟酒选购指南:口碑好店真实对比
  • 易连EDI—EasyLink:企业级全场景文件传输管理(MFT)解决方案
  • 通讯管理机之数源系统(一)框架
  • 一个人就是一家公司:200+ AI 专家自动协作,帮你搞定研发、运营和营销
  • 简单易用的进销存该怎么选?分清真易用与功能极简陷阱(2026行业权威标准)
  • js中不会冒泡的事件有哪些?
  • Hybrid AI应用架构设计——WebView+LLM混合开发实践
  • 茶馆主题H5前端静态包|uni-app编译生成,2020风格UI,开箱即用
  • 协议碎片化与性能瓶颈破局:WVP-GB28181-Pro分布式视频管理平台架构深度解析
  • AlistHelper:告别命令行,用图形界面轻松管理Alist文件服务
  • Paperxie 工科代码辅助:AI 一键匹配论文需求生成完整工程源码
  • 【学术干货】清华团队发布RWAI框架:让AI从“能做“到“能落地“,产业应用效率提升50%
  • 线上 Bug 排查与修复实录
  • Android 权限请求构建器使用指南
  • 中小企业做GEO的投入和产出怎么算——从成本、时间线和效果三个方向来看