实习日记--核心板第一周 第一天了解公司核心板IDO-EVB3568-V1/IDO-EVB3562-V1对两块核心板的功能外设进行了解了解各个接口分别是什么第二天对IDO-EVB3562-V1进行基础测试SOCRockChip RK35621、烧录固件IDO_EVB3562_V1B_Android13_LVDS1280×800_240411R2、测试主要用ADB、LVDS屏幕和调试串口Debug UART进行辅助测试3、补充调试串口Debug UARTBootROM → Bootloader如 U-Boot→ Linux 内核 → 文件系统依次执行每个阶段都会通过这个串口打印日志1、测试环境准备首先将板子连接上LVDS屏幕的屏幕接口选择驱动电压我选择3.3v连接好屏幕背光座和屏幕的TP接着winr输入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再进行冲突测试看优先级是否网口WIFI4G/5G上网优先级3、串口测试本次测了四个串口uart4uart9uart6uart8前两个是ttl后两个是rs2323.1、ttlttl的测试通过USB转TTL模块和串口调试助手进行测试先将USB转TTL模块和板子与主机连接好进入adb shell输入microcom -s 9600 -X /dev/ttyS4后面那个是串口的设备节点接着进入串口调试助手输入对应波特率选择设备接着就可以进行测试3.2、rs232通过官网文档找到设备RS232节点EVB3562为/dev/ttyS6和/dev/ttyS8使用回环测试将两个串口的tx接rxrx接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读取ADC5、固件固件”实际上是一个完整的系统镜像包它包含了让硬件启动和运行所需的所有软件层固件 ≈引导程序 内核 根文件系统 分区表的打包体每次使用一块新的核心板时都需要先烧录固件我使用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.需要完整的Loader2.跨系统升级需要完全擦除设备在烧写5.2、固件内部结构以 Rockchip Android 为例组件说明对应文件分区1. Loader / SPL一级引导程序初始化 DDR 时钟、存储控制器从闪存加载下一级MiniLoaderAll.bin2. U-Boot二级引导程序初始化外设、显示、启动内核uboot.img3. Trusted Firmware (ATF)ARM 可信固件提供安全监控模式调用trust.img4. 内核 (Kernel)Linux/Android 内核镜像包含驱动、调度器、文件系统支持boot.img内含 kernel ramdisk DTB5. 设备树 (DTB)硬件描述文件告诉内核板子上有哪些外设、引脚功能、时钟等通常打包在boot.img或单独的dtbo.img6. 根文件系统 (Rootfs)系统启动后挂载的根目录包含/system,/vendor,/data等分区system.img,vendor.img,oem.img等7. 用户数据分区出厂预置的用户空间首次开机会被复制到/datauserdata.img8. 其他参数分区表、环境变量、开机 Logo、恢复模式等parameter.txt,misc.img,logo.img,recovery.img我通过RKDevToll解包该固件得到文件名说明MiniLoaderAll.bin一级引导加载器SPL初始化 DDR 和存储加载 U-Bootparameter.txt分区表配置定义了各分区的起始地址、大小和名称uboot.imgU-Boot 二级引导程序镜像boot.img内核 ramdisk 设备树DTB用于启动系统dtbo.img设备树叠加层Device Tree Overlay用于动态调整硬件配置recovery.img恢复模式系统镜像包含独立的 kernel ramdiskmisc.imgmisc 分区用于控制启动模式如进入 recoverysuper.imgAndroid 动态分区镜像内部包含system、vendor、product、odm等逻辑分区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进行测试SOCRockChip 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 bs16k count128k写速率测试(2G)dd if/dev/zero of/storage/E07E-415A0/test.txt bs16k count128k方向作用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/ttyS74、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.2M.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。除了 SSDM.2 接口也常用于安装 Wi-Fi/蓝牙无线网卡尺寸更小通常为 2230。很多工业主板或树莓派 CM4 的扩展底板上也会用 M.2 槽来挂载硬盘或 AI 算力卡。6、GPIO#输出 # 设置 GPIO0_D1 输出高电平状态 gpioset gpiochip0 251 # 设置 GPIO0_D1 输出低电平状态 gpioset gpiochip0 250 #输入 # 获取 GPIO0_D1 输入电平状态 gpioget gpiochip0 25其中25是GPIO序号然后用万用表测gpio电平7、串口通信7.1、UARTUART 不是一种硬件而是一种通信约定它解决的是“一个比特一个比特如何打包”的问题。本质一种异步串行通信协议没有独立的时钟线双方约定相同的波特率如 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、RS232TTL 用 0V 和几伏的正电压来表示RS232 用正负十几伏的电压来表示而且逻辑是反的。RS232 就是给两台设备之间拉一根“专用电话线”只能你和我通话距离不远但够直接。工作方式它用电线上的电压高低来表示 0 和 1。比如电压是正的几伏表示 0电压是负的-几伏表示 1。这就像两个人拿对讲机按下说话时灯亮代表 0松开时灯灭代表 1对方看灯就知道你在说什么很简单直接。特点比较点TTL 串口RS232 串口电压0V ~ 3.3V 或 0V ~ 5V3V 到 15V和-3V 到 -15V常见 ±12V逻辑定义0V 左右 逻辑0Vcc3.3V/5V 逻辑1正电压3V ~ 15V 逻辑0负电压-3V ~ -15V 逻辑1注意是反的空闲状态高电平Vcc负电压逻辑1连接线TX, RX, GND最少3根TX, RX, GNDDB9头里常用2,3,5脚距离板级几厘米到几十厘米可达15米左右抗干扰差因为电压低且单端对地稍好因为电压摆幅大能否直连绝对不能直接连 RS232会烧毁芯片必须通过MAX232 之类芯片转换才能接 TTL 设备典型场景单片机连接蓝牙模块、GPS模块、串口屏电脑背后老式 COM 口连调制解调器、工控仪表7.4、RS485RS485 就是给一群设备拉一根“公共广播线”大家都能接在这条线上轮流说话传得远抗干扰强。它没有固定形状的接头通常就是两根普通的双绞线像网线里面那种两根拧在一起的线一红一黑或者标着A 和 B。工作方式它不靠电压的绝对值而是靠两根线之间的电压差来表示 0 和 1。就像跷跷板这样做的好处假设外面有电磁干扰两根线靠得很近又拧在一起受到的干扰几乎一样差值却基本不变所以不容易出错。这就是它抗干扰强、能传很远的秘密。特点如何给特定设备发信息所有设备都在静默“监听” - 主机发出“寻址呼叫” - 从机“对号入座”只有被点名的才应答 - 目标从机接管总线做出回应7.5、ModbusModbus 是一种主从架构的通信协议主要用于工业设备之间交换数据。它规定了数据怎么打包、谁问谁答、问的格式是什么Modbus 的核心规则一条总线上只有一个主机主设备比如 PLC 或电脑其他都是从机从设备比如传感器、仪表。从机从不主动说话只有主机点到它的地址它才能回答。数据打包格式功能码决定了“干什么”8、GDBGDBGNU Debugger是 Linux/Unix 下最常用的命令行调试器用于调试 C/C 程序。它可以让你在程序运行时暂停、查看变量、设置断点、单步执行、查看调用栈等是排查崩溃、逻辑错误、内存泄漏的核心工具。指令简写作用gdb ./program启动 GDB 并加载程序gdb ./program core调试 core dump 文件runr运行程序break mainb main在main函数设置断点break file.c:50在 file.c 的第 50 行设置断点continuec继续执行直到下一个断点nextn单步执行不进入函数内部steps单步执行会进入函数内部print varp var打印变量var的值info localsi loc显示当前函数的局部变量backtracebt查看函数调用栈frame nf n切换到栈帧 n0 为当前listl显示当前附近的源代码quitq退出 GDB