全志V3S嵌入式驱动开发(软、硬件调试方法总结)

news2024/12/24 8:33:13

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        v3s开发板本身是比较小巧的,ddr也是嵌入在soc里面的,电路设计也不复杂,因此很受电子爱好者的喜欢。不过大部分朋友一般都是自己把电路板设计出来,然后烧入别人的镜像测试的。这样虽然也有一定的可玩行,不过还是建议大家可以自己多多熟悉嵌入式软件方面的内容,这样或许更有乐趣的多。下面结合近一段的调试经历,总结一下linux+soc调试的经验。

1、soc电源十分重要

        soc上面电源很多,比如一颗soc,就可能有3.3v、2.5v、1.8v、1.2v等多种规格的电压。好一点的soc,厂家会搭配一个pmu。如果没有pmu,也会用ea3036这样的芯片,做一个简单的电源管理电路。实在没有办法了,才会选用不同的dcdc,调制不同的电压,这些都是可以的。

        电源是电路的基础,没有电源一切都无从谈起。如果板子不工作了,我们的第一个反应往往也是用万用表查一下电压,看看哪里短路了,哪里断路了,这些都是常用测试的方法。毕竟没有电源,信号的有无、信号的质量,这些都无从谈起。

2、晶振

        v3s板子上面有三个晶振。两个是soc的,一个是wifi电路的。其中soc的两个晶振用途也各不相同,一个是作为倍频pll使用,一个是作为rtc使用。相比较而言,后者的精度更高一点。而wifi模块一般也会要求搭一个晶振模块。除了电源之外,晶振也是比较容易出问题的地方。倒不是晶振电路有多难,主要是在电商网站上面很容易买到假的晶振,这个也是经常发生的现象。解决的办法就是去正规旗舰店购买,贵一点,但好歹是真的。

        有过嵌入式开发经验的朋友都知道,电源、晶振、复位、输入、输出,这是系统boot起来的5个基本条件。电源前面已经谈过,复位比较简单,输入输出可以用按键和点灯代替,所以这里如果搞定了晶振,用示波器测出了晶振的信号,那么整个最小电路基本就ok了。

3、基于sd卡开发linux

        目前主要的soc基本都支持micro sd卡启动。当然,除了micro sd卡,他们也支持spi-nor、spi-nand、usb、jtag等启动方法。整体来说,micro sd卡调试是最方便的。在最初一行代码没有的时候,就可以把uboot编译生成的bin文件用ubuntu的dd命令写入到micro sd卡上,这是非常便捷的方法。

        此外,micro sd卡还有很多其他的优势。比如,micro sd卡很大,一般来说,它要比spi-nor、spi-nand、emmc大得多,最小的都有8g、16g。因此哪怕最终发布嵌入式系统的时候,我们不用micro sd卡启动,但是在开发的时候,最好还是用micro sd卡,毕竟太方便了。它也不需要jtag工具,有一个虚拟机,有一个usb的读卡器,这样就可以进行linux开发了,从uboot到kernel、rootfs、app,就没有它不能干的。

        等micro sd卡port好linux、rootfs之后,就可以慢慢引入spi-nor、spi-nand驱动,直到生成支持spi-nor、spi-nand的uboot和image,这个时候再从flash启动uboot和linux系统,开发过程就会容易很多。

        不同的boot方式,就是uboot是不一样的,linux和rootfs基本差不多的。所以sd卡boot方式下,如果搞定了大部分驱动和应用软件开发,那么产品只要简单切换到spi-nor、spi-nand、emmc启动就可以了。

4、不要把所有的驱动都放在zImage

        所有的驱动都放到zImage,一个最大的坏处就是,这个zImage会越来越大。这样就要求我们在后期移植spi-nor、spi-nand的时候,需要不停调整image的布局。dtb留多大,zImage留多大,rootfs留多大等等,一个大小变了,其他就要跟着改变,很麻烦,关键是还比较容易出错。所以,关于内核功能和驱动这一部分,可以把不常用的驱动、或者比较大的驱动放在文件系统里面,或者挂载到外面存储设备,等rootfs后面起来之后,动态加载,这也是可以的。

5、基于u盘的用户程序调试

        说完了zImage,下面就是用户程序。不是所有嵌入式最终都可以接受micro sd卡启动的,毕竟如果是运动的嵌入式设备、或者工业设备,这个micro sd卡还是存在一定的风险的。但是spi-nor和spi-nand又比较小,空间也不大,这就是一个问题,调试会很不方便。比如,spi-nor一般也就32MB,而spi-nand则为128M,可大一点的文件就会占据很大的空间。

        所以这个时候,一个比较好的方法,就是把程序、动态库和配置文件copy到u盘上。等嵌入式起来之后,把u盘mount到/mnt目录,这样就可以继续后面的测试了。

ount /dev/sda1 /mnt
cd /mnt/v3s

        中间依赖的动态库如果也在u盘上面,那么LD_LIBRARY_PATH也要做修改,

export LD_LIBRARY_PATH=/mnt/v3s/tslib/lib:$LD_LIBRARY_PATH

        windows的很多文件系统,比如fat可能不支持软链接这种形式。其实也没有关系,直接cp文件,换一个文件名就可以了,比如像这样,

cp libts.so.0.10.4 libts.so.0

        做好了这些准备,u盘上有一些配置文件的话,那么涉及到的环境变量也需要修改一下,

export TSLIB_CONFFILE=/mnt/v3s/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/mnt/v3s/tslib/lib/ts

        做到了上面这些内容,基本上u盘上面的程序也可以正常运行了,使用还是很方便的。下图就是利用u盘上的ts_calibrate进行标定的过程打印,

6、勤用对比法看驱动问题

        实际开发的时候,我们经常遇到这样一个问题。那就是相同的驱动,升级了内核之后,之前好的功能就不行了,这个时候就要勤用对比法,看看之前的配置是什么,现在的配置是什么,两者有什么差别。比如之前wifi驱动的问题,关于配置这块,如果用对比法,其实很容易看出区别的。因为kernel 5.2.y是这么配置的,

         而之前kernel 4.14.y却是这么配置的,

         对比下,这样就比较方便比较看出来,真正有区别的地方,就是中间红框有没有选中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对话小红书剑寒:如何跨方向技术融合,全局优化打造更智能的音视频系统?...

编者按:在 AI 时代,随着 ChatGPT 掀起技术狂潮,构建更智能的音视频系统已经成为音视频领域从业者的共同目标。 然而,音视频系统的智能化,每个从业者对其都有自己独特的视角和理解,正如“一千个人眼中有一千…

华为官宣2024年推出面向商用的5.5G全套网络设备

2023年6月29日华为董事、ICT产品与解决方案总裁杨超斌在2023 MWC上海展5G Advanced论坛上宣布,2024年,华为将会推出面向商用的5.5G全套网络设备。这也标志着ICT行业即将迈入5.5G时代。 经过四年的高速发展,5G建设已经取得了丰硕的成果。目前…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册7

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

MySql的操作跟命令

概述 仅仅为了加强记忆,废话不说,直接上正文。 快速开始 创建数据库。 进入MySql客户端,输入root用户的密码 Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server vers…

第3章 创建项目并初始化业务数据(过程记录)

项目声明和依赖 ECommerceRecommendSystem [pom.xml] 公用的声明、依赖、插件 properties 声明 log4g:处理日志的框架(日志的具体实现)sel4g:简单日志门面(简单日志的接口)mongodb-spark:Mong…

Python 元类实现ORM

目录 ORM概念 __new__、__init__、__call__的介绍 通过元类简单实现ORM中的insert功能 抽取到基类中 ORM概念 ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于 SQL 的关系模型数据库结构中去。这样&am…

隔断推拉门滑动不畅常见的原因和解决方法

隔断推拉门滑动不畅常见的原因和解决方法如下: 1. 滑轨污秽:如果滑轨上有灰尘、油垢或杂物积聚,会影响推拉门的滑动效果。解决方法是定期清洁滑轨,使用吸尘器或刷子清除污垢,并用湿布擦拭干净。 2. 滑轨损坏&#xff1…

Git---分支管理

文章目录 前言一、理解分支二、创建分支三、切换分支四、合并分支五、删除分支六、合并冲突七、分支管理策略八、分支策略九、bug分支十、删除临时分支总结 前言 本篇博客开始介绍Git的杀手级功能之一 : 分支.分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习C的时候,另…

MySQL学习基础篇(六)---多表查询

MySQL学习基础篇(六)—多表查询 对于多表查询的理解: 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是…

浅析EasyCVR视频技术与AR实景智能管理平台在智慧厂区中的应用

一、背景分析 新型智慧厂区是运用人工智能、大数据、物联网和设备监控技术加强厂区安保和信息管理。通过先进技术,保障厂区生产运营安全,同时减少生产线上的人工干预、及时正确地采集各类生产数据,以及合理的生产计划编排与生产进度&#xff…

线性规划的对偶问题(The Dual of LP)

线性规划的对偶问题(The Dual of LP) 对偶理论是线性规划中最重要的理论之一,是深入了 解线性规划问题结构的重要理论基础。同时,由于问题提 出本身所具有的经济意义,使得它成为对线性规划问题系 统进行经济分析和敏感…

原生 js点击空白处 关闭遮罩层(关闭某个div)

如图所示 点击空白处关闭此div document.addEventListener(click, function(e) {//监听页面点击事件var screenDoc document.querySelector(.controlHead);//需要关闭的divvar control document.querySelector(.control);//设置的按钮if (screenDoc && !screenDoc.co…

基于TF-IDF+Tensorflow+pyQT+孪生神经网络的智能聊天机器人(深度学习)含全部工程源码及模型+训练数据集

目录 前言总体设计系统整体结构图系统流程图孪生神经网络结构图 运行环境Python 环境TensorFlow 环境 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 模型应用 系统测试1. 训练准确率2. 测试效果3. 模型应用 工程源代码下载其它资料下载 前言 本项目利用TF-IDF&…

【Docker、Dockerfile】使用Dockerfile创建镜像并运行容器

创建SpringBoot项目 创建一个Springboot的Java项目,然后打包成可运行的Jar 编写Dockerfile文件 在项目文件夹下创建Dockerfile文件,内容如下 # 定义用于构建镜像的 JDK 版本参数,可以在构建过程中通过 --build-arg 选项传递给 docker bui…

如何用adb命令统计app冷启耗时

第一步:杀掉App,然后重启,过滤Displayed日志,找到App启动的第一个Activity; adb logcat | grep Displayed 第二步:再次杀掉App,使用adb shell am start命令来启动app: adb shell a…

podman容器的使用

podman 安装 如果你想在rhel系统中玩podman,必须是rhel8.2版本以上。podman版本是1.9.3。从centos8.2开始默认情况下,除了最小化安装之外,系统都会默认安装podman。 如果你使用rhel8.2以上的版本,那么就直接安装podman就可以了。…

关于多grib文件合并以及netcdf和grib的方法

前言 之前在使用WRF做敏感性试验时,曾修改初始场的grib文件,并涉及到多个grib文件合并的情况,下面介绍一些好用的工具处理netcdf和grib 1、 grib_copy 官网:https://confluence.ecmwf.int/display/ECC/grib_copy 在Linux系统上…

从零实现深度学习框架——Seq2Seq模型尝试优化

引言 本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 💡系列文章完整目录: 👉点此👈 要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽…

【操作系统核心概念】进程管理和进程调度

文章目录 前言1. 什么是操作系统2. 操作系统的定位3. 进程管理3.1 什么是进程/任务 (Process/Task)3.2 进程管理怎么做的3.3 进程控制块抽象PCB (Process Control Block)3.3.1 进程调度属性 4. 内存分配 ---- 内存管理 (Memory Manage)5. 进程间通信 (Inter Process Communicat…

带你看懂串口服务器

1、背景 串口服务器提供串口转网络功能,能够将RS-232/485/422串口转换成TCP/IP网络接口,实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即具备TCP/IP网络接口功能,连接网络进行数据通信,极大的扩…