![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式系统
文章平均质量分 74
papaofdoudou
我的藏经阁
展开
-
llama3-70B体验
问题几个关于宇宙的问题,答案挺有意思的,很有启发性,记录一下:问题1:既然相对论认为时间是相对的,为何却说宇宙寿命有137亿年?问题2:对于黑洞来说,大爆炸是不是刚刚发生不久的事情?问题3:对于光来说,大爆炸是刚刚发生的事情么?普通PC的USB控制器都是通过PCIE扩展的么?原创 2024-06-16 10:09:21 · 284 阅读 · 0 评论 -
Linux内核对象引用计数和生命周期管理
int value;int pad;if(!data)2.如果对对象的引用不是临时的(pointer is not temporary),特别是对象会以指针引用的形式传递到异步上下文(另一个被处理器调度的独立线程),必须在传递这个指针引用之前,增加对对象的引用计数。调用kref_get增加引用计数前,如果上下文已经持有了一个引用计数,则kref_get过程不需要锁保护。int value;int pad;if(!原创 2023-11-20 22:29:59 · 398 阅读 · 0 评论 -
Linux内核关于休眠唤醒部分的主体流程逻辑分析
修改任务状态task_struct->state和入队操作,以及__schedule操作之间,通过就绪队列大自旋锁保证互斥。原创 2020-12-03 17:15:44 · 328 阅读 · 0 评论 -
linux系统几种固定的睡眠(休眠,调度,同步)模式
既然有休眠流程有固定的模式,就可以通过宏定义将这些模式定义出来,通过一个宏接口调用去实现,内和中已经将这些固定的休眠模式定义为wait_event_xxx宏家族,调用这些宏,可以一步到位,实现上述的宏逻辑:注意到condition条件检查被放在了设置任务state状态和进行实际休眠CMD中间,这是一种通用模式,和BARRIER的使用有关,在自己书写休眠过程时必须遵守。原创 2022-10-08 22:38:47 · 485 阅读 · 0 评论 -
LINUX系统如何从多核CPU中隔离核心处理专用用户任务?
需要说明的是,上述隔离cpu的方法仅仅对用户空间的进程有效,对内核的进程无效,所以即便用户态不创建绑定隔离CPU的dedicate 进程,被隔离的cpu也并不是完全空闲的,它可能会执行内核态的一些人物,当前CPU节点上的文件交换操作。原创 2024-03-14 08:28:14 · 566 阅读 · 0 评论 -
AMDGPU KFD Test 编译使用
是一个用于在ROCm软件堆栈中提供设备无关性的层。它是ROCm的一部分,允许不同的硬件平台(如AMD GPU和Intel CPU)使用相同的API进行计算。要安装现在可以开始构建和安装这将在目录下安装。可以看到编译出来了kfdtest程序。原创 2024-03-03 20:39:02 · 398 阅读 · 0 评论 -
mprotect/mlock使用demo
mlock起作用的过程分为两步,第一步,对于已经存在的VMA,将会调用mm_populate将其手动建立物理页面的映射。而对于未来分配的物理页面,则将会调用apply_mlockall_flags设置VM_LOCKED标志,设置此标志后,将来的MMAP函数将会调用__mm_populate分配页面。这样,在加入LRU的逻辑中,判断PageMlocked为真,将会把页面加入LRU_UNEVICTABLE list.所以,最终MLOCKD的效果显示在/proc/meminfo的unenvicible字段。原创 2021-10-14 12:37:29 · 185 阅读 · 0 评论 -
计算机体系结构的一些总结
广义上来说,按照不同层次的授权等级,可把芯片IP分类为指令集、IP核、芯片架构等。如果说指令集是一本“字典”,那么IP核提供了“段落”的写作方式,芯片架构则可被视作是“整篇文章的提纲”。芯片IP企业作为芯片设计企业的上游供应商,通常以授权的方式,向后者收取专利费用。而芯片设计企业通过购买不同层级的IP授权,可以设计出不同自研程度的芯片产品。原创 2021-02-05 14:02:53 · 1110 阅读 · 0 评论 -
文件共享传输的几种方式
Linux系统下可以通过open/create/socket/socketpair/pipe等系统调用创建文件描述符fds.之后可以基于创建的文件描述符进行IO操作,操作完毕之后执行close(fd)关闭文件描述符。原创 2023-12-05 14:57:32 · 959 阅读 · 0 评论 -
X86 SMAP(Supervisor Mode Access Prevention)机制引入的内核态访问用户态地址空间的问题分析
所以,内核直接访问用户态指针导致报告page fault错误的原因是直接访问用户态内存触发了SMAP保护,内核提供了配置和API接口关闭这种保护,而本文开头提到的几个宏定义能够安全将访问用户态内存的原因,也是由于在访问器件,关闭了SMAP保护。从普遍意义的角度来讲,内核态访问用户态地址空间是没有任何问题的,只是需要注意不同的架构下实现上会有微小差别,至少目前,没有看到其它架构有类似SMAP机制的实现。原创 2023-10-28 20:15:21 · 547 阅读 · 0 评论 -
华为、飞腾、海光、兆芯、龙芯、申威这六大国产CPU发展得怎么样?
国产 CPU 厂商主要有华为、飞腾、海光、兆芯、龙芯、申威这六家,它们拥有一个共同点,就是都采用了技术引进吸收再消化的模式,没有谁是完全平地起高楼的。CPU工作模型:指令集架构指令集架构(Instruction Set Architecture),又称指令集或指令集体系,是 计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集, 寄存器,寻址模式,存储体系,中断,异常处理以及外部 I/O。指令集架构包含一系列的 opcode 即操作码(机器语言),以及由特定处理器执行的基 本命令。原创 2023-05-24 22:33:31 · 7470 阅读 · 1 评论 -
Linux监测进程打开文件
分析问题过程中,追踪进程打开的文件可以在许多不同情况下有用,体现在以下几个方面:故障排除和调试: 当程序出现问题、崩溃或异常行为时,追踪进程打开的文件可以帮助找出问题的根本原因。这有助于快速定位错误,尤其是在访问文件时发生的错误。性能分析和优化: 了解进程打开了哪些文件可以帮助分析程序的性能问题。如果程序频繁打开和关闭文件,可能会导致性能下降。通过追踪文件操作,可以识别性能瓶颈,从而采取相应的优化措施。权限和安全审计: 在安全方面,追踪进程打开的文件可以帮助监控和审计系统上的文件访问。原创 2023-08-31 22:55:27 · 556 阅读 · 0 评论 -
LINUX页表切换(调度)在不同架构上的实现
Linux页目录存放在 struct mm_struct字段中,通过current->mm->pgd访问。下面分析不同架构下堆栈切换逻辑。原创 2023-08-29 07:45:57 · 81 阅读 · 0 评论 -
Synopsys EDA数字设计与仿真
参考如下文章安装Synopsys EDA开发工具Synopsys EDA工具的结构。原创 2023-08-14 22:44:07 · 685 阅读 · 0 评论 -
搭建Synopsys 数字IC IDE开发化境
6)这先点击 自定义硬件,内存我修改为4GB,处理器数量为2,核心为2。然后记得添加centos镜像,设置好点击关闭,回到上个页面,点击完成。5)磁盘空间我设置为50G,空间没有具体的要求,最好多留一些,方便后面安装更多的软件;4)我这里虚拟机取名为zlcao-eda,将安装路径修改到D盘,这里空间大,下一步;之后使用VMTOOLS完善系统,点击安装TOOLS,前面图中有显示,桌面刷出虚拟盘;8)我这里选择中文,默认选择英文也可以,看个人吧,然后点击继续;1)点击 创建新的虚拟机,默认勾选典型,下一步;原创 2023-08-12 23:56:48 · 200 阅读 · 0 评论 -
基于原子操作的无睡眠锁实现
原子操作是全芯片系统级工程,原子操作的路径可能需要经过多个IP环节,每个环节都需要支持原子操作的硬件基础设施,缺失任何一个环节将无法做到原子操作。比如,GPU设备如果需要原子访问HOST Memory,中间会经过GPU本身的L2->AXI总线->NOC->PCIe->Host Memory等环节,中间每个环节都需要支持原子操作,如果某个环节不支持,比如PCIE不支持发送原子访问包,则无法用HOST 内存实现原子操作。原创 2022-10-03 11:50:23 · 363 阅读 · 0 评论 -
dma-fence简析以及使用demo
dma fence是Linux中用于不同内核模块DMA同步操作的原语,常用于GPU Rending,display buffer等之间的同步,使用DMA FENCE可以减少在用户态的等待,让数据的同步在内核中进行,它是内核中一种比较常用的同步机制,本身的实现和使用并不复杂,其只有两种状态signaled和unsignaled。可能正是因为其本身的精简,在融入其他概念中时,在不同的环境下,赋予了dma-fence不同的含义。所以通常需要根据dma-fence的具体使用的情况来理解其含义。原创 2023-06-13 22:39:19 · 1802 阅读 · 2 评论 -
Verilator仿真环境搭建
Verilator是一种开源的Verilog/SystemVerilog仿真器,可用于编译代码以及代码在线检查,Verilator能够读取Verilog或者SystemVerilog文件,并进行lint checks(基于lint工具的语法检测),并最终将其转换成C++的源文件.cpp和.h。原创 2023-08-06 23:18:58 · 773 阅读 · 0 评论 -
关于处理器静态&动态内存屏障的原理和应用
barrier();r1 = y;barrier();r2 = x;编译为汇编指令.textrun1:.LFB0:ret.LFE0:run2:.LFB1:ret.LFE1:同样是movl指令,却代表这读和写两个意思,这一点和RISC处理器定义不太一样,无论是ARM,MIPS还是RISCV,读和写分别是两条不同的指令,ARM是ldr/str,MIPS是ld/sw,RISCV则和MIPS是同样的定义。原创 2022-11-01 23:18:10 · 371 阅读 · 2 评论 -
dhrystone和coremark测试比较
关于dhrystone测试,请参考博客比较coremark环境搭建。原创 2022-10-01 20:58:57 · 1857 阅读 · 1 评论 -
一种细粒度资源锁的内核模块实现
本实现参考内核模块中的lock_page/unlock_page以及wait_bit实现,以LOCK PAGE为例,struct page数据结构中的成员flags定义了一个标志位PG_locked,内核通常利用PG_locked来设置一个页锁,lock_page函数用于申请页锁,如果页锁被其他进程占用了,那么进程会睡眠等待。原创 2023-07-02 18:57:55 · 297 阅读 · 0 评论 -
一种多媒体框架中的零buffer拷贝实现机制
BUFFER管理是多媒体框架设计实现中的核心任务,在常见的多媒体框架,比如FFMPEG,GST等中,BUFFER管理的代码实现都是复杂且代码量非常大的部分。从某种意义上说,多媒体应用的核心在于BUFFER管理,一个高效易用的BUFFER管理框架不但可以提供友好的开发模型,而且还可以最大限度的挖掘VPU的计算能力,提高多媒体应用的效率。为什么可以通过零拷贝来优化多媒体框架?原创 2022-08-13 15:40:59 · 784 阅读 · 1 评论 -
关于内存颗粒的地址映射
通常情况下,在一种硬件体系结构下,一个存储单元只有一个物理地址,但是如果系统设计时兼容了多套寻址方式,则可能存在同一个存储单元存在多个物理地址的情况,将地址类型编码到地址中,硬件会根据编码后的物理地址驱动合适的地址翻译电路寻址到正确的存储单元。原创 2023-06-29 20:43:24 · 761 阅读 · 0 评论 -
Linux tracing之内核vsyscall&vdso机制分析
由于内核运行在受保护的地质空间上,Linux系统中的用户空间程序无法直接执行内核代码,不能直接调用内核空间中的函数,因此,应用程序以某种方式通知系统,告诉内核自己需要执行一function,希望系统系统切换到内核态,这样内核就可以代表应用程序在内核空间执行系统调用。这个道理就像机场的安检通道,旅客只能通过有限的几个通道进入,并且还要经过严格的安全检查。原创 2023-06-27 09:51:07 · 818 阅读 · 0 评论 -
Linux tracing之基于uprobe/kprobe的调试调优浅析
uprobe与krobe对应,动态附加到用户态调用函数的切入点称为uprobe,相比如kprobe 内核函数的稳定性,uprobe 的函数由开发者定义。uprobe是用户态的探针,它和kprobe是相对应的,kprobe是内核态的探针。uprobe需要制定用户态探针在执行文件中的位置,插入探针的原理和kprobe类似。下面是对uprobe使用方法的简单介绍。Makefile分别编译地址加载无关和地址相关两个版本的应用程序,分别抓取其PROBE结果。之后使用如下命令查看注册的EVENT事件。原创 2023-06-23 22:44:32 · 1258 阅读 · 0 评论 -
RISC-V semi-hosting原理以及实践
Newlibc,如上截图。Picolibc,fork from newlibc.但是更轻量。Arm CMSIS。如前面所谓分析,半主机主要是为了解决资源有限平台上的协同调试开发问题,glibc,musl libc等面向LINUX等大型应用场景的LIBC库不需要支持半主机,因为后者主要运行于RICH OS上,无需支持半主机机制。方便调试和开发。节省资源。快速开发和原型验证灵活,可移植性好。原创 2023-06-22 10:24:39 · 954 阅读 · 0 评论 -
Linux Buddy算法&系统分析
例如,LINUX内核设置的MAX_ORDER为11,最大有效取值为10.所以 pfn的低10位为0,也就是PFN必须按1原创 2023-05-16 07:37:33 · 297 阅读 · 0 评论 -
64/32位Linux系统的差异(地址空间布局,系统调用)对比分析
映射地址:可以看到,对应的地址0x7fd9b8c00000是PSE页,映射了10M,是PMD级的大页映射,也就是2M页面的映射。连续影射了5个PMD大页。这些大页的分配是在mmap后,执行memset(addr, 0x5a, ...)时通过page fault流程进行分配的,对应执行hugetlb_fault的执行流程。原创 2023-05-09 22:41:27 · 2011 阅读 · 0 评论 -
内核区间树的使用Demo
Linux内核区间树(interval tree)是一种用于高效存储和查询区间的数据结构,被广泛用于许多内核子系统中,例如文件系统,内存管理,虚拟化等等,在区间树中,每个节点都表示一个区间,并存储一个键值,。原创 2023-05-06 23:23:02 · 284 阅读 · 0 评论 -
代码重构的原则以及要考虑的问题(持续更新)
0.重复代码是万恶之源,消除重复代码。1.软件开发的时候会持续面对两类问题,重构和新功能开发,保证这两个行为的互斥性,在功能开发的时候,不要重构,通过升级测试用例衡量你的功能开发进度。在重构的时候,只管改变程序结构,不要添加新的功能,并锁定你的测试用例,重构的结果是在相同的用例集上对齐之前的测试结论,而不是让测试结果变得更好(更好,说明代码原本存在不确定性因素)或者更差(说明重构导致回归了)。原创 2023-04-04 21:01:52 · 922 阅读 · 0 评论 -
zlramfs模块实现
参考ramfs实现一个Linux ramfs内核模块,作为Linux文件系统分析的一个脚手架。编译:加载:/proc/filesystems查看文件系统注册信息:zlramfs的后端设备为NONE,说明这个文件系统不需要后端磁盘作为介质。原创 2023-04-02 20:12:23 · 197 阅读 · 0 评论 -
代码头文件的使用规则总结和头文件预处理分析
3.避免循环包含,当头文件A包含头文件B,而头文件B也包含头文件A时,就会产生循环包含的情况,这回导致编译错误,不过实际操作中如果完全避免循环依赖需要开发者对头文件的拓扑包含关系有非常清晰的了解,这通常是不可能做到的,所以技术上可以通过GUARD宏来解决头文件循环包含的关系.为了满足自举原则,头文件应该包含它所需要的所有类型定义,宏定义,常量等信息,同时不包含不必要的信息,头文件应该是独立的,可重用的,可以在不同的项目中使用.也可以与其它头文件组合使用.原创 2023-03-29 23:09:29 · 1002 阅读 · 0 评论 -
代码静态分析思维体操—扇入、扇出、圈复杂度
静态分析是一种检查代码的方法,无需执行程序。它提供了一种机制,可以审查代码结构、控制流和数据流,检测潜在的可移植性和可维护性问题,计算适当的软件质量测度。原创 2023-03-19 20:09:15 · 790 阅读 · 0 评论 -
Homebrew NFS Network File Sharing Environment
nfs server 优麒麟 OS作为NFS服务器:nfs client, ubuntu 22.04 作为NFS 客户端:网络拓扑结构,网关1安装在客厅,为了加强卧室信号,用一台小米路由器作为信号中继,拓扑结构如下:NFS Server路由信息,可见前两跳分别是两个网关。原创 2023-03-18 02:22:52 · 304 阅读 · 0 评论 -
Cache架构以及X86&ARM @Linux平台cache eviction功能测试
如果TLB失中,Page Table Walk(PTW)电路不走Cache,直接从物理内存中查找页表。一个8路组相联的高速缓存的结构示意图:组中有路,路中有组,一路中的行数等于组数,一组中的行数等于路数,缓存行是最小寻址单元。原创 2023-03-11 16:06:01 · 793 阅读 · 0 评论 -
Linux各种发行版介绍
Linux是一个开源操作系统,由一个纯利他的理想主义社区维护,这个社区本身没有一个闭环的商业逻辑,但通过各种Linux发行版,Linux内核成为了各种商业化服务器系统的OS技术底座。Linux已经被广泛应用在人们的日常生活工作用品中,比如手机,智能家居,汽车电子,可穿戴设备等等,只不过很多人并不知道自己使用的电子设备里面运行的是linux系统。看一组数据:1.90%的公有云应用在使用Linux系统。2.62%的嵌入式市场在使用Linux系统,其余的是RTOS和嵌入式裸机系统。3.99%的超级计算机在使用Li原创 2023-03-11 11:23:56 · 4965 阅读 · 1 评论 -
Linux发行版幽灵漏洞的backport
遇到一个问题,简要记录如下:base on ubuntu18.06 4.15内核,这版内核不支持一款intel的集成网卡,追踪内核代码的提交历史才发现,这款网卡是从linux-4.20才开始支持的,系统自带的这个Kernel版本不支持。如果不允许升级内核,面对这种问题,社区的做法是把新内核的特性cherrypick到老版本上,这种操作一般被叫做backport.把相关补丁从4.20打回到4.15.原创 2023-03-09 22:53:55 · 763 阅读 · 0 评论 -
PC性能分析工具(top/strace/sysstat/fuser/free/stress)命令实现与原理解析
Chrome浏览器是一个多进程多线程程序,随即选择一个进程,查看其各线程发生的PAGE FAULT的情况,可以看到,主线程发生了最多的PAGE FAULT,其它线程则根据业务情况,发生了数目不等的PAGE FAULT,有个别线程没有发生PAGE FAULT,和每个线程具体的业务有关。pidstat有一个很实用的功能,就是查看进程PAGE FAULT的发生频率,minflt/s表示普通的page fault,majflt/s表示要swap-in的page fault。原创 2023-03-05 18:10:24 · 489 阅读 · 0 评论 -
arm64架构分析
arm64架构分析此文分析基于arm官方文档ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profileARM Architecture Reference Manual Supplement ARMv8.1, for ARMv8-A architecture profile Errata marku...原创 2020-04-24 19:31:14 · 3903 阅读 · 1 评论 -
自然界中那些关于自然对数e 的有趣现象
E是连续,E是积累,E是因果,E是自然界无穷变化的个各类事物共同遵守的内部结构,e是自然的奥秘,它或许比PI更接近本质,潜藏的本质真相仍然有待人们去发现。原创 2023-03-04 11:45:01 · 347 阅读 · 0 评论