![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式基础
文章平均质量分 86
aFakeProgramer
Adaptive AUTOSAR的技术专家,AUTOSAR中国官方培训讲师,具备深厚的汽车行业知识和以太网通信技能。SOME/IP、IPC、DDS、DoIP、TSN和SOA架构,MQTT,加密,操作系统,v2x,以及c++和Python编程语言。
If you cant explain it simply, you don't understand it well enough.
Fake it till you make it.
编程无他,唯手熟尔。 --白天求生存,晚上求发展。
展开
-
QNX与Linux差异一览
首先,QNX系统没有tcpdump工具(文档中是有的,实际在环境中并没有),真是非常可惜,Linux系统支持tcpdump,支持libpcap库所提供的相关特性。而对QNX系统交叉编译时,首先需要调用qnxxxx_env脚本初始化环境,必须要显示的用-l c指定c库的链接,同时需要指定std的语言,同时QNX系统支持qcc和gcc两套编译器,亲测均可生成在QNX系统上运行的可执行文件。QNX系统根目录下有debug、dev、etc、lib、opt、proc、bin、sbin、tmp、usr、var目录。转载 2024-04-11 09:55:24 · 1090 阅读 · 1 评论 -
Linux 黑话解释:什么是 POSIX?
与其说 POSIX 是一个东西,不如说是一个标签。想象一下,有一个盒子,上面贴着标签:POSIX,而盒子里是一个标准。该标准由 POSIX 所关注的规则和指令集组成。POSIX是可移植操作系统接口Portable Operating System Interface 的缩写。它是一个 IEEE 1003.1 标准,其定义了应用程序(以及命令行 Shell 和实用程序接口)和 UNIX 操作系统之间的语言接口。当 UNIX 程序从一个 UNIX 平台移植到另一个平台时,遵守该标准可以确保其兼容性。转载 2024-04-08 13:49:46 · 160 阅读 · 0 评论 -
在 GitHub 上下载了一个 C++ 工程,并且该工程包含了 CMakeLists.txt 文件,该如何编译这个工程呢?
是你工程中生成的可执行文件的名称。根据你的工程,你需要替换它为实际的可执行文件名。如果你在 GitHub 上下载了一个 C++ 工程,并且该工程包含了。请注意,上述步骤中的。原创 2024-02-28 13:51:31 · 727 阅读 · 0 评论 -
Linux的 .bashrc 有什么作用?
CSDN博客. https://blog.csdn.net/Heyyellman/article/details/111565781.-CSDN博客. https://blog.csdn.net/Heyyellman/article/details/111565781.每次你启动一个新的终端时,.bashrc文件就会被执行,加载你设置的环境变量,别名,函数等。例如,你可以用别名来缩短常用的命令,用函数来组合多个命令,用bash提示符来显示你想要的信息,甚至用颜色和图标来美化你的终端。原创 2024-01-26 10:58:08 · 2185 阅读 · 0 评论 -
在Linux中查看进程的状态
在Linux中,您可以使用ps命令来查看进程的状态。ps命令可以显示当前运行的进程的相关信息,包括进程的PID、状态、CPU和内存占用等。ps命令有很多参数,可以用来控制显示的格式和内容。如果您想了解更多关于Linux进程的知识,您可以点击以下链接:(1) Linux中进程的六种状态_进程sleep状态-CSDN博客. https://blog.csdn.net/qq_49613557/article/details/120294908.转载 2024-01-26 10:36:43 · 1850 阅读 · 0 评论 -
浅谈可重入函数与不可重入函数
所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。也可以这样理解,重入即表示重复进入首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外。转载 2024-01-26 09:26:23 · 35 阅读 · 0 评论 -
Linux系统中的bash 进程和init进程还有systemd进程分别有什么作用,他们之间有什么联系?
根据Linux惯例,字母d是守护进程(daemon)的缩写systemd的含义是它要守护整个系统。systemd是为了解决initd的缺点问题而诞生的, 它为系统的启动和管理提供了一套完整的解决方案。使用systemd就不再需要initd了,它成了系统的第一个进程(PID= 1),其它进程都是它的子进程。systemd初始化进程服务采用并发启动机制,开机速度得到了很大的提升。可以用命令命令 查看systemd的版本。systemd。原创 2024-01-24 09:18:37 · 1825 阅读 · 0 评论 -
Linux启动流程 梳理| 思维导图 | 流程图 | 值得收藏
Linux启动流程总的来说可以分成三个阶段Linux启动流程总的来说可以分成三个阶段Linux启动流程图第一步:上电在 x86 系统中,将 1M 空间最上面的 0xF0000 到 0xFFFFF 这 64K 映射给 ROM。当电脑刚加电的时候,会做一些重置的工作,将 CS 设置为 0xFFFF,将 IP 设置为 0x0000,所以第一条指令就会指向 0xFFFF0,正是在 ROM 的范围内。在这里,有一个 JMP 命令会跳到 ROM 中做初始化工作的代码,于是,BIOS 开始进行初始化的工作。转载 2024-01-22 09:35:51 · 200 阅读 · 0 评论 -
为什么MCU一般跑RTOS,SoC一般跑嵌入式Linux?
MCU(Microcontroller Unit)和SoC(System on a Chip)是两种不同的嵌入式系统,它们通常运行不同类型的操作系统,具体取决于其应用场景和硬件资源。转载 2024-01-22 09:27:46 · 305 阅读 · 0 评论 -
Hypervisor 和Docker 还有Qemu有什么区别与联系?
Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层,可以让多个操作系统和应用共享硬件资源,也叫做虚拟机监视器(VMM)¹。Hypervisor有两种类型:Type I和Type II²。Type I 直接运行在硬件上,例如KVM,Xen,Hyper-V等。Type II 运行在一个已有的操作系统上,例如VMware Workstation,VirtualBox等。原创 2024-01-22 09:06:32 · 1101 阅读 · 0 评论 -
QEMU架构浅析
特别是缓冲区溢出攻击等内存损坏漏洞,这些漏洞利用威胁代理(例如后门)提供的特殊代码覆盖易受攻击的应用程序代码,如果已经被覆盖的代码已经被运行(并因此被缓存),出了正常运行的会导致漏洞攻击利用外,更多的时候则会导致TCG运行和翻译失败,从而导致程序复现异常或崩溃。因此,对于技术人员来说,了解QEMU是一项艰巨的任务。,本质上,KVM是管理虚拟硬件设备的驱动,该驱动使用字符设备/dev/kvm(由KVM本身创建)作为管理接口,主要负责vCPU的创建、虚拟内存的分配、vCPU寄存器的读写以及vCPU的运行。转载 2024-01-19 21:17:14 · 245 阅读 · 0 评论 -
TDA4 Linux BSP ,SD卡制作
Operation Finished 看到这个,就说明你的BSP拷贝到SD卡搞好了。下面为制作SD卡和拷贝BSP的log。原创 2024-01-15 18:24:51 · 982 阅读 · 0 评论 -
How to build and deploy Linux BSP on S32V234EVB board with Host Ubuntu 20.04
repo syncmetameta-pokymeta-oemeta-gnomemeta-perl+#if!+#endifmetameta-pokymeta-oemeta-gnomemeta-perlmetameta-pokymeta-oemeta-gnomemeta-perlmetameta-pokymeta-oemeta-gnomemeta-perli < pad;i++)++#endif++i)++#endif。原创 2024-01-11 17:19:55 · 1068 阅读 · 0 评论 -
S32V234 Linux yocto开发环境搭建
一、主机环境主机: Ubuntu 16.04.5 64bitS32V bsp infomation:Bsp version:auto_yocto_bsp_19.0 ;Linux Kernel version: 4.13.34 ;Yocto Project version: 2.1 ;开发板SBC-S32V234官网资料:https://www.nxp.com/design/development-boards/automotive-development-platforms/s32v-mpu-platfor原创 2022-06-15 16:57:01 · 1405 阅读 · 0 评论 -
详解三大编译器:gcc、llvm 和 clang
回顾 GCC 的历史,虽然它取得了巨大的成功,但开发 GCC 的初衷是提供一款免费的开源编译器,仅此而已。可后来随着 GCC 支持了越来越多的语言,GCC 架构的问题也逐渐暴露出来。但 GCC 到底有什么问题呢?LLVM 的优点也正是 GCC 的缺点。传统编译器工作的时候前端负责解析源代码,检查语法错误,并将其翻译为抽象的语法树(Abstract Syntax Tree)。优化器对这一中间代码进行优化,试图使代码更高效。转载 2023-12-12 17:04:51 · 3077 阅读 · 0 评论 -
保护嵌入式系统的要素2—信任根 (RoT)
信任根应该是基于硬件且不可变的,信任根不能被篡改,然后允许系统检测以后加载的软件是否可以信任。信任根是一个不可变的过程或身份,用作信任链中的第一个实体。换句话说,嵌入式开发人员的信任根是一个不可更改的身份和最小的软件集,可以成功地验证自己并促进系统上的安全操作。在为我们的产品选择微控制器时,我们必须确保我们可以永久“burn-in”信任根使用的重要信息,例如公司私钥,一旦进入微控制器,我们不希望这些信息是可变的。使用供应商建立的信任根,我们可以使用现有的信任根将我们的信任根转移到设备。转载 2023-10-11 14:03:33 · 115 阅读 · 0 评论 -
53页PPT,看懂IPv6/IPv6+
转载 2023-10-09 11:21:02 · 101 阅读 · 0 评论 -
QNX入门-简介、开源代码、框架文档
通过一个透明的开发过程,QNX的软件设计师将公布开发计划,新的源码,以及出错修改,并对开发进程进行监控。进行了隔离,内核和各种驱动、协议栈在同一个地址空间,应用程序在单独空间。,”Dan Dodge,QNX软件系统公司首席执行官说,“所有的商业开发者以及爱好者,都将史无前例地接触我们的软件中的‘皇冠上的珠宝’,并以此为基础来创造下一代的计算机技术革新。QNX 内核自身开销小、上下文切换快,在同样的硬件条件下给实时应用留下更大的余地,因而它在实时控制、通信、多媒体信息处理等对时间敏感的应用领域大有用武之地。转载 2023-10-06 16:32:06 · 3817 阅读 · 0 评论 -
40 个简单又有效的 Linux Shell 脚本示例
历史上,shell 一直是类 Unix 系统的本地命令行解释器。它已被证明是 Unix 的主要功能之一,并发展成为一个全新的主题。Linux 提供了各种功能强大的 shell,包括 Bash、Zsh、Tcsh 和 Ksh。这些外壳最令人惊讶的特性之一是其可编程性。创建简单而有效的 Linux shell 脚本来处理日常工作非常容易。转载 2023-10-05 16:59:39 · 218 阅读 · 0 评论 -
让你遥遥领先的7个编程习惯
我和很多杰出的软件工程师们一起工作过,他们有的来自FAANG之类的大公司,有的来自正处于创业阶段的小公司。这些工程师中有人自主创业,也有人在大型科技公司领导了数十亿美元的项目。在我与他们一起工作的时间里,我注意到他们绝大部分人的一些共通的编程和工作习惯。我想,或许正是这些习惯让他们成为了行业金字塔中最顶尖的那1%。工程是为了解决问题而诞生的。最好的工程师将代码视为达到目的的手段。虽然写代码是一种乐趣,但没有目的地写代码是没有意义的。代码应该用于为用户设计解决方案。某种意义上,编程是一种创造性的追求。转载 2023-10-05 16:53:46 · 74 阅读 · 0 评论 -
CMake 学习笔记
是一个根据。原创 2023-09-23 20:49:51 · 277 阅读 · 0 评论 -
一文搞懂 CPU 使用率
用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。转载 2023-09-12 11:24:47 · 3483 阅读 · 0 评论 -
AUTOSAR基础篇之OS(下)
如之前文章所示,AUTOSAR OS作为一实时操作系统,那么就需要在预定的时间内完成特定的任务,但有时由于某些原因导致超时错误,OS必须采用有效的方式来预防超时任务的发生,而这类措施则可以称为时间保护。根据调度规则,若在同一核上多个任务被同时调度,即这些任务均处于就绪状态,那么高优先级任务会被率先执行,如图中的Core0上的任务T2,Core1上的任务T3以及Core2上的任务T5,三个任务同时进入运行状态,各个内核上的任务独立运行,互不干扰,其优先级并没有相互影响。转载 2023-09-04 09:44:30 · 308 阅读 · 0 评论 -
AUTOSAR基础篇之OS(上)
当前TaskC处于运行状态,激活TaskA与TaskB分别进入就绪状态,由于TaskA优先级高于TaskB,所以TaskA抢占内核运行, 但是由于Resource1仍被TaskC暂用,而TaskA无法访问到共享资源Resource1,则被迫进入到等待状态,TaskB开始运行。不过幸运的是AUTOSAR OS采用上述的优先级天花板模式来避免任务优先级反转以及死锁问题的发生,即资源的上限优先级必须高于所有该资源的任务以及中断的优先级,但是应低于不访问该资源的任务的最低优先级。转载 2023-09-04 09:38:28 · 599 阅读 · 0 评论 -
一些关于线程的可重入和不可重入的知识
线程安全:简单来说线程安全就是多个线程并发同一段代码时,不会出现不同的结果,我们就可以说该线程是安全的;线程不安全:说完了线程安全,线程不安全的问题就很好解释,如果多线程并发执行时会产生不同的结果,则该线程就是不安全的。线程安全产生的原因:大多是因为对全局变量和静态变量的操作。转载 2023-09-01 18:01:03 · 493 阅读 · 0 评论 -
一些关于异构SOC IPC核间通信的知识
共享内存在IPC方案中,一个核可以将数据写入共享内存,Mailbox可以将内存指针传递到另一个核上,另一个核可以拿到内存指针后,直接从共享内存读取数据,这个过程不需要经过数据的拷贝,因此非常高效,适合大数据量的传输。(2) Jacinto™︎ 7核间通信解决方案 - 嵌入式处理 - 技术文章 - E2E™ 设计支持. https://e2echina.ti.com/blogs_/b/the_process/posts/jacinto-7.,它可以让不同的核之间互相发送中断信号,类似于邮箱的工作方式。原创 2023-09-01 17:47:10 · 1238 阅读 · 0 评论 -
十分钟了解RTOS!
任务或 ISR 将信息传递给另一个任务,这称为任务间通信,用于发送和接收消息的服务通常由内核提供。如此多的供应商,困难在于选择合适的RTOS。在抢占式内核中,当一个事件使高优先级的任务就绪时,当前任务立即挂起,较高优先级的任务获得CPU控制权。如果ISR使更高优先级的任务就绪,则被中断的任务挂起,恢复执行新的更高优先级的任务。是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系 统作出快速响应,并控制所有实时任务协调一致运行的操作系统。转载 2023-08-17 14:56:49 · 432 阅读 · 0 评论 -
53 张图详解防火墙的 55 个知识点
防火墙( Firewall )是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。后来这个词语引入到了网络中,把从外向内的网络入侵行为看做是火灾,防止这种入侵的策略叫做防火墙。后来,防火墙不但用于防范外网,例如:对企业内网的 DoS 攻击或非法访问等,也开始防范从内部网络向互联网泄露信息、把内部网络作为攻击跳板等行为。硬件防火墙可以实现CIA的机密性完整性可用性( Availability )这三种类型的对应策略。小企业会在局域网和互联网的边界部署防火墙。代理服务器是应用网关防火墙的一种。转载 2023-08-14 10:03:46 · 263 阅读 · 0 评论 -
TCP连接的最大数据包大小 ——Maximum Packet Size for a TCP Connection
传输控制协议(TCP)是在连接的网络上发送文件或消息的有用协议。每个文件在发送网络上被分割成数据包。数据包在到达接收网络时合并。TCP数据包的最大大小是64K(65535字节)。通常,数据包大小受到网络资源的最大传输单元(MTU)的限制。MTU是网络硬件设置的数据传输限制的最大大小。数据包大小不应超过MTU。在本教程中,我们将尝试解释这些术语背后的概念,并探索它们的各个方面。翻译 2023-08-11 13:00:59 · 5413 阅读 · 0 评论 -
五分钟扫盲:进程与线程基础必知
举个例子,QQ 和 Chrome 浏览器是两个进程,Chrome 进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。所谓进程的上下文切换,就是说各个进程之间是共享 CPU 资源的,不可能一个进程永远占用着 CPU 资源,不同的时候进程之间需要切换,使得不同的进程被分配 CPU 资源,这个过程就是进程的上下文切换,转载 2023-08-11 11:30:04 · 51 阅读 · 0 评论 -
多核异构处理器A核与M核通信过程
例如,ARM的big.LITTLE架构就采用了基于共享内存的通信方式,让高性能的big核和低功耗的LITTLE核可以共享同一块DDR内存,并通过缓存一致性协议来保证数据的正确性。例如,Linux系统中的RPMsg框架就是一种基于消息传递的通信方式,它允许本地处理器与系统上可用的远程处理器通信,基于virtio框架实现了基于不同通道的通信。例如,STM32MP1系列芯片中的IPCC外设就是一种基于中断或信号量的通信方式,它提供了六个双向通道信号,用于处理器间的数据交换的通知。原创 2023-08-10 16:36:49 · 1292 阅读 · 0 评论 -
软硬件共同定义:超异构开放生态
单服务器的宏系统复杂度,以及超大规模的云和边缘计算,使得“二八定律”在系统中普遍存在,因此,可以把:相对确定的任务沉淀到基础设施层,相对弹性的沉淀到弹性加速部分,其他继续放在CPU(CPU兜底)。GPU平台实现后,可以持续演绎新的领域新的场景。异构的引擎架构越来越多,必须构建高效的、标准的、开放的接口和架构体系,才能构建一致性的宏架构(多种架构组合)平台,才能避免场景覆盖的碎片化。超异构计算,不是简单的集成,而是把更多的异构计算整合重构,各类型处理器间充分的、灵活的数据交互,形成统一的超异构计算宏系统。转载 2023-08-05 18:25:25 · 219 阅读 · 1 评论 -
【cmake】make install/strip:减小目标占用的空间大小
上面列出的方法中,推荐使用 3.1 和 3.2。因为这两个命令只会对目标(target)产生影响,并且,只有在 CMAKE_BUILD_TYPE 为 Release 时才会产生作用,即 cmake -DCMAKE_BUILD_TYPE=Release …add_custom_command() 命令中 E N V S T R I P 为 s t r i p 程序( ENV{STRIP} 为 strip 程序( ENVSTRIP为strip程序(ENV{var} 用于访问系统变量 var)。转载 2023-08-01 16:31:34 · 782 阅读 · 0 评论 -
Could not find compiler set in environment variable CC:
在编译px4 1.10.2版本时发现qt无法正常打开CMakeList,显示Could not find compiler set in environment variable CC:XXXXXXXXXXXXXXXX(CC环境变量包含的路径)原文链接:https://blog.csdn.net/hypersonicss/article/details/117692465。检查了CC变量发现路径无误,依然修改后依然无法正常打开,在终端也无法Cmake …然后就可以正常编译了。转载 2023-08-01 14:18:40 · 1923 阅读 · 1 评论 -
什么是异构计算? 核间通信简介
是异构计算技术使得如此多不同类型的计算核心可以高效协同。异构多核处理器:由多个不同类型的处理器核组成(S32G/S32V/R-Car),不同类型可以指Cortex核的类型不同,或者不同架构的核,可以是A核+M核或者是ARM核+DSP核。有了优秀的异构计算架构组成的芯片,还需要能够高效协调异构芯片中不同类型计算核心的软件架构才能让自动驾驶如虎添翼。1、通信粒度的大小:通信数据块越大,传送所需时间越多,数据块越小,传送时间越小但是增加核间通信次数和核间通信过程中控制交互过程的耗时,从而增加核间通信的时间开销。转载 2023-07-31 16:26:29 · 1829 阅读 · 0 评论 -
芯片架构初识
Arm是高级精简指令集的简称,是一个32位的精简指令集处理器架构。结构说明:ALU:它有两个操作数锁存器、加法器、逻辑功能、结果以及零检测逻辑构成。桶形移位寄存器:ARM采用了32&TImes;32位的桶形移位寄存器,这样可以使在左移右移n位、环移n位和算术右移n位等都可以一次完成。高速乘法器:乘法器一般采用“加一移位”的方法来实现乘法。ARM为了提高运算速度,则采用两位乘法的方法,根据乘数的2位来实现“加一移位”运算;ARM高速乘法器采用32&TImes;转载 2023-07-31 16:15:15 · 1584 阅读 · 0 评论 -
nlohmann json简单用法,C++使用json, json与string转换使用笔记
/地址:https://github.com/nlohmann/json, 需要引用的头文件位置:single_include/nlohmann/json.hpp。//parse的第二个参数是回调函数指针,可以为空,第三个参数指示是否抛出异常,可以改为false,然后使用前增加判断。//需要引用的头文件,在使用时,将这个文件加入到工程中即可,只添加这一个文件就行。1. //为了避免匹配失败导致程序异常,需要修改为。3. //提前判断字符串是否能转成json。//异常处理(重要)原创 2023-07-31 10:52:32 · 979 阅读 · 0 评论 -
c++代码运行有哪些动态行为?
动态行为是指在运行时才能确定的行为,而不是在编译时就已经确定的行为。原创 2023-07-28 11:06:18 · 228 阅读 · 0 评论 -
如何在 Ubuntu 上用 Yocto 创建你自己的嵌入式 Linux 发行版
Yocto 的目标是为嵌入式软硬件开发商创建自己的 Linux 发行版。本文我们将会创建一个可以运行在 QEMU 上的最小化的 Linux,并且在 QEMU 上实际运行。下面的截图展示了构建脚本的解析过程。同时也显示了用来构建你的新的基于 yocto 的发行版的构建系统的细节。下面展示了新发行版的登录界面,同时也显示了使用的 yocto 项目的版本号。为运行新的基于 Yocto 的 Linux 发行版的 qemu 打开一个新屏幕。本文的目标是理解使用 Yocto 创建新的 Linux 发行版的过程。转载 2023-06-27 11:29:38 · 271 阅读 · 0 评论 -
Yocto编译系统介绍
其次是一个可用的Linux系统包含引导模块、内核、文件系统,以及很多必要的应用程序,如果手动编译上述的这些东西(LFS就是一个例子),需要花费很大的力气而且容易出错,而使用OpenEmbeded只需要几个简单的命令即可自动完成整个构建的过程。有时,当您创建一个新的配方来构建新的软件时,它会毫无问题地构建。认为是Yocto中一个组件,作为一个独立的开源项目开发yocto项目,多数作为一个参考项目(实际上我们下载的yocto project构建系统的时候,实际上就是下载一个poky的发行版)。转载 2023-06-27 11:24:45 · 7846 阅读 · 0 评论