万物互联之系统架构篇
文章平均质量分 90
探讨分享万物互联端到端全域架构、嵌入式系统整体架构、芯片、体系结构、uboot、操作系统、中间件等基础系统组件
HiveIOE
个人愿景:万物互联、万物感知和万物智能场景下,嵌入式设备如何去打破科研和工业化的gap
展开
-
嵌入式系统那些事——aarch64 backtrace嵌入式汇编实现
在aarch64嵌入式应用开发中,经常会遇到段错误(segmentation fault),但是通常情况下系统报错后直接退出,没有异常调用打印信息,定位出错原因十分困难。经确认,该问题是由于没有设置捕获段错误,并调用backtrace打印异常调用栈,笔者实现该异常捕获处理方案后,发现仍然没有异常调用栈输出。经进一步定位发现,该嵌入式设备上使用的glibc库版本过低,并不支持aarch64的backtrace功能。 笔者找到glibc的最新开源版本glibc2.36(2022年8月发布),其原创 2023-02-10 22:03:28 · 803 阅读 · 0 评论 -
嵌入式系统那些事—脚本语言tcl
tcl脚本语言在嵌入式开发,通信设备开发调试中经常被用到。它是一种跟shell语言类似的解释型语言,不需要编译就可以运行,语法简单,作为程序员可以在几小时或者几天内就可以熟练掌握,但是它网络功能强大,又是开源免费的,因此在日常的网络设备调试,自动化测试,复现定位概率性问题中被广泛使用。参考文献【1】【2】的两个链接是tcl脚本的基本语法学习路径,笔者将其中重要的语法点总结如下图所示。图中上半部分是tcl的特点,下半部分是从文件和函数的视角对各个知识点的归类。原创 2022-09-04 12:51:54 · 2699 阅读 · 0 评论 -
嵌入式架构那些事--浅谈嵌入式多态
在我们的嵌入式c开发中经常会面对这样的一类需求,因为对接的设备支持的协议不同,自身的设备需要兼容这些协议,因此需要业务支持不同的协议解析方式,比如有的协议用tlv的数据格式,有的用xml的格式,有些又用json这样的格式,面对如此多差异化的需求,我们该如何解决呢?一种常见的做法是将协议解析和逻辑实现做到一起,每种协议对应一套代码,这种实现方式简单,没有什么设计可言,就是撸代码。但是每当对接一种新的协议就要从头开发,这种重复造轮子的方式非常初级,代码的可扩展性也非常差,有没有一种更高级一点的方法呢?答案是有的原创 2022-05-28 16:55:44 · 400 阅读 · 0 评论 -
嵌入式系统那些事-arm运行时文件解读
前面笔者从arm的指令集开始,依次解读了文件视角下的arm汇编文件、arm elf文件,其目的是帮助读者系统地了解arm体系结构下指令转换和执行过程。本文是文件视角主题下的最后一篇文章,将对arm运行时的文件进行解读,即被加载后的代码如何被一步一步执行的。这个部分的核心是函数调用栈,尽管系统已经帮我们做了这件事,但是了解其内部的机制和原理,对我们来说仍然是很有裨益的,特别是解决一些踩内存的问题,可以让我们抽丝剥茧,找到问题根源,而不是靠猜测碰运气。本文将详述函数调用栈的基本原理,...原创 2022-05-26 22:18:59 · 1048 阅读 · 0 评论 -
嵌入式系统那些事-文件视角下的arm elf解读
这篇文章笔者继续文件视角下的arm elf的解读,elf(Executable Linkable Format)是在linux下使用的一种可执行文件格式,我们的arm架构上通常都是部署的linux系统,因此elf文件也是跟arm架构强相关的一种文件格式。通过对其进行解读,可以帮助我们了解这样的一个文件是如何生成的,内部的结构是怎样的,如何在嵌入式的arm设备上加载运行起来,从而加深对整个系统运行机制的理解。原创 2022-05-03 09:55:49 · 1360 阅读 · 0 评论 -
嵌入式系统那些事-xilinx multiboot番外篇
前面我们通过文件视角解读了arm体系结构的指令集和汇编,在开启解读elf文件之前,我们先来看一下一个bin文件是如何升级到嵌入式设备上,然后加载运行的。特别是如果在升级的过程中出现断电等异常情况,导致flash中的程序不可执行时,有什么样的手段可以保证系统可以起来。本文先去简单介绍了一个升级流程,然后以xilinx multiboot实现双区备份为例,帮助读者理解保障系统可靠性的方案。原创 2022-04-25 23:04:05 · 2219 阅读 · 0 评论 -
嵌入式系统那些事-文件视角下的arm汇编
0 背景 上一篇文章我们从指令集的视角解读arm架构,本篇从指令集组成的汇编文件入手对arm架构进行解读。汇编是跟体系结构强相关的一种编程语言,现在实际开发中比较少用汇编直接进行开发,更多的是在定位诸如踩内存等问题时,才会进行反汇编操作,此时就需要知道简单的arm架构下的汇编文件结构和语法,才能更快地抓住汇编文件中的关键信息。本文首先从文件的视角,列举出汇编文件中重要的元素和应用场景;然后从整个文件转化流程的视角,总结了哪些文件可以转成汇编语言,转化后的差异在哪里,得到基本的arm汇编文件...原创 2022-04-13 21:56:21 · 2477 阅读 · 1 评论 -
嵌入式系统那些事-文件视角下的arm指令集
arm架构是7层架构中第一个软件层次,向下它决定了芯片的设计,向上它为其他的层次提供软件编程的基础平台,在整个架构中扮演着举足轻重的角色。笔者从工程实践入手,结合自己的经验,从不同的视角对整个的arm体系结构进行总结。本文是文件视角下的arm体系结构的开篇-指令集,本文是文件视角下的arm体系结构的开篇-指令集,在文件视角下,arm体系端到端的文件笔者归结为指令集、汇编文件、elf文件和运行时文件4个不同形态,笔者将一一解读。原创 2022-03-18 22:13:04 · 7134 阅读 · 2 评论 -
嵌入式系统那些事-第一阶段引导启动
上一篇文章用一张图的方式综述了smp系统的端到端启动流程[1],本文将详细介绍一下第一阶段的引导启动过程,这个阶段主要完成cpu,flash,ddr和外部管脚的初始化,为下一阶段的代码的执行环境做准备。通常情况下这部分是cpu内部实现的,通过汇编语言编写,不需要过多关注,但是有些需求,比如双区备份启动,就需要对该部分代码进行修改,因此有必要理一下这部分流程。本文先通过一张图的方式将关键流程节点进行了论述,然后通过举例xilinx芯片的引导过程加深对其的理解。原创 2022-02-16 22:22:49 · 2163 阅读 · 0 评论 -
嵌入式系统那些事-一张图秒懂系统启动流程
本文将端到端的梳理一下嵌入式系统的启动流程,通过对该流程的梳理,可以全面了解嵌入式系统各层的初始化过程。另外在笔者的嵌入式通信设备开发经验中,新开发一块板子或者产品,有两个重要的软件里程碑:一个是板子能够正常启动,另外一个就是能够通流(即业务是正常);只要完成了上面两个基础功能,基本上工作任务也就完成了80%,剩下的就是不断优化的过程了。最后在笔者工作中也有30%以上的问题是跟启动过程有关的,如启动性能、单板起不来、断链、异常复位,快速定位问题首要的是清楚启动流程。基于以上原因有了此文。原创 2022-01-26 22:26:42 · 10483 阅读 · 0 评论 -
嵌入式系统那些事-先导篇
笔者从毕业至今已经8年有余,所以想将先前的工作和实践经验总结一下,帮助自己系统化地梳理知识结构,找出知识的盲点。为何选择《嵌入式系统那些事》这个主题,首先笔者8年多一直在嵌入式领域耕耘,从mcu到arm芯片开发,从裸机开发到操作系统上的开发,从底层的驱动开发到应用层的开发,从toc的消费类产品到tob的通信产品,笔者都有所涉猎,但是发现这些知识都是零散地存在,没有形成一张网,于是笔者想通过这种形式织一张网出来。原创 2022-01-13 22:01:57 · 1577 阅读 · 0 评论