- 博客(55)
- 收藏
- 关注
原创 嵌入式系统内核镜像相关(十七)
本文是嵌入式Linux驱动开发系列教程的总结篇,对比分析了不同驱动开发框架的异同点。文章首先回顾了整个系列16篇教程的内容概要,涵盖了从硬件开发到驱动移植的完整流程。重点对比了字符设备驱动的基本框架,以LED驱动为例展示了核心代码结构,包括设备注册、文件操作接口实现(open/write/release)、模块初始化/退出函数等。该系列教程得到了野火和Alinx开源教程的支持,涉及设备树解析、U-Boot驱动、多种外设驱动开发框架等内容,为嵌入式Linux驱动开发提供了系统性的学习路径。
2025-07-20 14:22:15
1238
原创 嵌入式系统内核镜像相关(十六)
本文主要介绍了中断控制器相关设备树绑定的移植工作。重点分析了个若干键档,包interrupts.txt和xilinx,intc.txt。 interrupts.txt详细说明了中断客户端节点和中断控制器节点的配置方法,包括interrupt-parent、interrupts和interrupts-extended属性的使用,以及单/双单元格中断说明符格式。 xilinx,intc.txt则专门介绍Xilinx中断控制器的特性,包括必需属性(如compatible、reg、xlnx参数)和可选属性
2025-07-18 20:08:06
425
原创 嵌入式系统内核镜像相关(十四)
本文介绍了块设备驱动与DMA驱动的关键概念和实现方法。块设备驱动主要用于支持批量数据读写,针对Flash等设备的特殊需求(如写入前需擦除扇区)进行优化。内核通过ll_rw_block()和submit_bh()等函数实现块设备访问流程,采用电梯算法优化读写顺序。块设备框架的核心步骤包括分配gendisk结构体、创建请求队列、设置参数并注册设备。文中还提供了内存模拟块设备的驱动代码示例,涵盖结构体定义、操作函数集实现和队列处理逻辑。该驱动通过自旋锁保护共享资源,使用memcpy完成数据读写操作,展示了块设备驱
2025-07-06 20:10:59
858
原创 嵌入式系统内核镜像相关(十三)
本文摘要: 文章介绍了将alinx驱动移植到璞致开发板的实现过程,重点在于平台设备(platform)驱动的移植。通过修改设备树定义和驱动代码,成功实现了GPIO LED灯的控制功能。设备树部分定义了GPIO相关寄存器的地址映射,驱动模块则通过platform机制获取硬件资源,完成GPIO初始化、虚拟地址映射和字符设备注册。移植的关键在于正确配置LED控制相关的寄存器地址,包括方向寄存器、使能寄存器和数据寄存器等。最终实现了通过文件操作接口控制LED开关的功能。
2025-07-06 15:19:33
606
原创 嵌入式系统内核镜像相关(十二)
摘要:本文详细介绍了嵌入式系统驱动开发和操作系统镜像编译的规范化流程。首先阐述了从制作操作系统镜像到驱动模块开发的完整步骤,包括Petaliux工具链的使用方法。针对驱动修改后的重新编译流程,提供了distclean和do_cleansstate等清理命令的使用说明。重点解决了GPIO输入驱动移植的关键技术难点,通过GPIO_DATA_0寄存器替代gpio_get_value函数,实现了按键状态检测功能。文中还给出了设备树配置和驱动测试程序的实现细节,为嵌入式Linux驱动开发提供了实用的技术参考。
2025-07-05 11:13:55
1049
原创 嵌入式系统内核镜像相关(十一)
本篇逐步完成的驱动开发教程并将其移植到璞致开发板上,对移植过程中的重点和遇到的问题展开介绍。这个中规中矩,走了一遍流程!但值得提及的点是该节引入了,也就是使用替代了上一章所使用的。是提供的一个工具,用于嵌入式系统中,相当于简化版的。它的作用是在系统启动和热插拔或动态加载驱动程序时,自动创建设备节点。在文件系统中的目录下的设备节点都是由创建的。和的区别:(1) 是命令行工具,用于手动创建设备文件(字符设备或块设备)。用户可以指定设备文件的类型(字符设备或块设备)、主设备号和次设备号。(2) 是守护进程,用
2025-07-04 13:38:23
1030
1
原创 嵌入式系统内核镜像相关(十)
本文补全嵌入式系统内核镜像相关(二)中提到的驱动开发和测试流程,并且也进一步探索存在的问题,并进行了额外的思考和推敲。对alinx教程中与我开发板不符的点进行详细描述,并深度思考一些从未被教程提到的问题。此外,这次开发将Vivado最小ps子系统、Vitis SDK上的和驱动开发结合在一起,相互辅助判断驱动开发的bug究竟出在哪里,尽管怎么遇到bug和怎么解决bug的过程我并没有展开,但从上文我怎么改进中可窥一角。
2025-07-02 20:15:31
1045
原创 嵌入式系统内核镜像相关(九)
本文讲解基于petalinux开发驱动过程中的一些要点和流程,以及学习开发框架。设备驱动的特点:设备驱动是具有独立功能的程序,它可以被单独编译,但不能独立运行,在运行时它被链接到内核作为内核的一部分在内核空间运行。非常核心的开发注意要点:编译内核模块的编译器必须与待运行的内核版本一致,否则可能导致无法运行。首先,需要知道内核版本,并准备好该版本的内核源码,使用交叉编译工具编译内核源码。其次,依赖编译的内核源码编译驱动模块以及设备树文件。最终将驱动模块和设备树拷贝到开发板上运行。编译内核->
2025-06-29 11:04:03
1061
原创 嵌入式系统内核镜像相关(七)
分析上一篇没分析完的内容。剩下的内容就是:二、各个节点的分析2.5 axi_ethernet_0节点看了内的设备树,如下。可以说是和一点关系都没有!没办法只能根据关键词盲猜!文档中以下4个是有概率相关的!直接机翻,如下:以下属性适用于以太网控制器:注意事项:以下文档中所有的“phy*”属性都是以太网特定的。对于通用PHY的“phys”属性,请参阅。以太网控制器的子节点通常是通过MDIO总线连接的各个PHY设备(有时MDIO总线控制器是分开的)。它们在与本目录相同的文件中描述。对于非MDIO PH
2025-06-23 23:24:19
1298
原创 嵌入式系统内核镜像相关(六)
虽然我在《嵌入式系统内核镜像相关(四)》中翻译了《Devicetree Specification Release v0.4》,但具体到设备树代码,光靠这本书似乎难以支持我完全看懂。列举几个疑问:1、《Devicetree Specification Release v0.4》提到了和“model”,如下图。看了不少例子,大多都有,但没有“model”。怎么确定哪些属性名称是被需要的,以及应当修改成什么值?哪些节点是被需要写入设备树代码中的?
2025-06-23 21:41:58
870
原创 嵌入式系统内核镜像相关(五)
介绍U-Boot和驱动相关的内容。U-Boot是一个开源的通用引导加载器,Xilinx提供了一个位于的仓库,其中包含了在Xilinx板上运行的U-Boot。U-Boot?目前眼熟的命令可能也就是tftpboot,在时出现过!U-Boot提供了两条指令引导启动镜像,booti命令用于引导传统的U-Boot镜像或新的多组件镜像(FIT格式)。bootm命令则用于在引导前重新定位镜像,使其地址可能与内核看到的地址不同,并会修改设备树以指示内核ramdisk镜像在内存中的位置。具体可以参考官网的信息。
2025-06-14 14:11:29
543
原创 嵌入式系统内核镜像相关(四)
这一篇主要翻译设备树语法,参考devicetree官网的《Devicetree Specification直接机翻了!若读者发现翻译错误,请不吝指出,感激不尽!因为只是私人翻译学习使用,所以还请不要用于商业用途。为了初始化和启动计算机系统,各种软件组件相互作用。固件(Firmware)可能会执行系统硬件的低级初始化,然后将控制权交给软件,如操作系统(Operating System)、引导加载程序(Bootloader)或虚拟机监视器(Hypervisor)。
2025-06-14 10:00:55
491
原创 嵌入式系统内核镜像相关(三)
这一篇主要负责解释清楚Petalinux内的组件,尤其是Yocto和BusyBox。因为第二篇发现了不少需要解释的坑,此外,既然已经在用Petalinux了,没有理由只限于会技术工的操作,对整体框架的了解也是有必要的。在解释过程中,会通过实际项目相互印证。看BitBake的官方文档。我就不对整个文档进行阅读了,搞清楚它是什么、有什么作用以及历史沿革就行!我就机翻了,偷个懒!BitBake是一个通用的任务执行引擎,能够高效并行运行shell和Python任务,同时处理复杂的任务依赖关系。是BitBake。
2025-06-11 20:39:51
1180
原创 嵌入式系统内核镜像相关(二)
演示从开始到裸机开发、镜像和驱动测试的完整例子。配置情况说明:默认读者有驱动的基本知识了,驱动分为字符设备驱动、块设备驱动和网络设备驱动,这里只以字符设备驱动作为例子,目标是使能10个基于GPIO MIO的LED灯控制。多提一嘴,可以用通过一路做到镜像,没记错的话,解压应该可以得到文件或者文件。不过,我并不打算这么干,还是折腾一下比较有意思!1、怎么修改设备树的链接,以GPIO Driver为例。这个链接导向xilinx-wiki,wiki大法好!2、关于设备树的语法可以参考ePAPR文档,适用于Powe
2025-06-11 10:52:30
527
原创 嵌入式系统内核镜像相关(一)
因工作需要,对移植os和开发驱动做了些研究,以Xilinx的镜像制作工具Petalinux为例,其中版本为2019.1。本文对中间过程的输出内容进行分析。这次总结,比2年前使用petalinux时更为深入。具体来说,包括了对启动方式和启动流程的认识以及上机启动后的输出解读。不过,现在自我感觉对petalinux整个配置过程的了解还有很多缺陷,缺陷在于并不清楚的其他黑盒操作会对menuconfig和Kconfig等文件带来的影响是什么样的?扫了一眼Kconfig,发现并不能完全对应menuconfig和。
2025-06-09 14:17:03
977
原创 Vortex GPGPU的github流程跑通与功能模块波形探索(四)
跟着前面那篇最后留下的几个问题接着把输出波形文件和csv文件的输入、输出搞明白!对上一篇遗留的几个任务进行了回答,顺带梳理了2种log的差异,为后续继续解读rtl代码做了大量准备工作。后面就一点一点慢慢看吧,任重而道远!
2025-06-02 22:34:06
1117
5
原创 Vortex GPGPU的github流程跑通与功能模块波形探索(三)
尽管通过如下命令分别产生了vcd波形文件和逐条指令的csv# 导出vcd波形文件# 导出逐条指令的csv文件但在看波形前,还是先确认文件和文件分别哪个源文件通过什么样的选项限制得到波形文件。此处简单尝试ramulator# 下载ramulator# 编译make -j8根据官网的描述(直接照搬官网原文的直接翻译了):在2023年8月发布了一个更新版本的Ramulator,称为。更易于使用、扩展和修改。它还支持当时的最新DRAM标准(例如,DDR5LPDDR5HBM3GDDR6Ramulator。
2025-05-20 22:03:23
1585
原创 Vortex GPGPU的github流程跑通与功能模块波形探索(二)
昨天另辟蹊径地去探索了子模块的波形仿真,但找朋友唠嗑发现有可以直接生成vcd格式波形文件的方式。遂,写下此篇,简单记录下。不过今天测试完,发现看子模块波形还是有点不方便,得把引脚拉出来才能看到子模块波形。尽管多少还是有点不方便,但起码有个例子可以参考了。傻了,信号都在里面。还是打算再琢磨琢磨子模块直接导出波形。接下来就结合波形分析模块代码和功能吧!
2024-10-02 15:15:27
2710
4
原创 Vortex GPGPU的github流程跑通与功能模块波形探索
文章目录前言一、跟着官方文档走一遍二、cache子模块的波形仿真2.1 必要的文件内容解释2.2 cache子模块波形仿真——目前环境没啥问题了,就vcd因为配置问题出不来总结前言看了那么久的verilog代码和文档,但还是没怎么接触过Vortex GPGPU全流程跑通与功能模块的波形显示。这一节就开始尝试探索这块内容。一、跟着官方文档走一遍已经有博客做了流程尝试,看了是通过容器保存运行环境的,我呢,还是老老实实按照流程走!主要还是参考这个文档:https://github.com/vorte
2024-10-01 13:48:46
2006
3
原创 Vortex GPGPU的硬件代码分析(Cache篇4)
Vortex GPGPU的硬件设计和代码结构分析前面也分析了Vortex GPGPU中关于Cache设计的一部分代码:1、Vortex GPGPU的硬件代码分析(Cache篇1)2、Vortex GPGPU的硬件代码分析(Cache篇2)3、Vortex GPGPU的硬件代码分析(Cache篇3)在Cache篇3中我们详细分析了对Cache访问,从接收对Cache的访问request开始,到访问Cache内的各个bank,随后将应答信号gather。
2024-08-12 20:31:46
1043
原创 Vortex GPGPU的硬件代码分析(Cache篇3)
前面已经分析了Vortex GPGPU的硬件设计和代码结构分析前面也分析了中关于Cache设计的一部分代码:1、Vortex GPGPU的硬件代码分析(Cache篇1)2、Vortex GPGPU的硬件代码分析(Cache篇2)本文接着分析代码详细讲解了模块中的功能,并大致梳理了对bank访问的请求-应答流程。
2024-08-09 22:35:56
1220
3
原创 Vortex GPGPU的硬件代码分析(Cache篇2)
上一篇的Vortex GPGPU的硬件代码分析(Cache篇1)已经分析了代码的一部分,主要包括参数、变量和接口。这一篇接着分析的代码。本文接着对展开介绍,并对涉及的模块做出了解释。
2024-07-14 22:30:10
1597
4
原创 Vortex GPGPU的硬件代码分析(Cache篇1)
本文开始分析的RTL代码了。按照架构来看,我们首先分析cache设计。在GPGPU Core的设计中,cache出现在ICache中,图示并没有表明是否存在DCache,但作者给出的另一张slide里面现时由DCache。此外,在Core之上的ProcessorCluster和Socket中也存在L3L2和L1,如下:一些必要的Cache首先代码通过宏定义及参数计算部分地址选择部分其他地址转换宏和性能计数器宏。首先是宏定义及参数计算部分(以下的line其实就是cache line,数字8是为了计算。
2024-07-11 00:15:30
1559
原创 Vortex GPGPU的硬件架构和代码结构分析
这次开始针对进行架构分析、硬件代码分析、仿真代码分析和运行时代码分析。github,其中vortex包含源码和必要的.md文件,其中包含作者在MICRO顶会上汇报的slide本系列文章首先参考了知乎帖子,在略微深入了解之后就觉得这可能是学习GPGPU系统工作的好机会。同时也为下一个研究工作做准备工作。本文简单回顾GPU和CPU之间的集成方式,GPU和GPGPU之间的差异,同时根据经典书籍展开GPU的基本知识,并与VMIPS进行对比。
2024-07-08 21:32:40
4491
6
原创 瞎谈指令集和寄存器读写来驱动硬件
其实很早以前就想对这个话题展开来聊聊,但是对体系结构的理解也仅仅限于《量化体系结构》这一书,对底层实现也仅仅局限于做过RISC-V RV32I基本指令子集的CPU设计。此外实践深度远远不足以支撑我站在系统的角度考虑问题!因此怕讲了出现太多错误,被技术老炮们炮轰。现在之所以敢壮起胆子来谈这个话题有3点原因和1点动机!1、过去三年时间内读了不少架构类、嵌入开发和操作系统类的书籍,或多或少已经对系统有了大致但还是有点朦胧的了解。由于曾经接触过超级demo的CPU设计,所以对指令集的印象也相对深刻!
2024-07-02 12:28:47
1805
原创 几个排序器的verilog及其资源占用、延时分析
因为课题需要,调研了几个快速排序方法,并手写或者改进了若干待测试对象,包括记分板型冒泡排序(这个是别人的)、插入排序(这个是我写的)、双调排序(这个我改了又改,可能还会接着改进)、堆排序(这个是别人的)。以上都在7035开发板上测试了资源。除了堆排序截了时序图之外,其他几个我就直接给代码,外加资源占用情况和延迟(这个延迟是给定例子的延迟)。不介绍原理了,默认都懂!书写、修改、调试不易,请大家多多惠存~
2024-05-15 22:36:24
1835
5
原创 NVDLA用户态驱动代码整理二
本系列内容力求将nvdla的用户态驱动整理清楚,如果有分析不对的请指出。前面已经花了不少章节详细解释NVDLA内核态驱动代码,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA内核态驱动代码整理六NVDLA内核态驱动代码整理七NVDLA内核态驱动代码整理八NVDLA内核态驱动代码整理汇总篇欢迎阅读硬件信号和架构分析系列文章1:NVDLA内核态驱动代码整理三。
2023-12-11 22:44:51
1200
原创 NVDLA的SDK代码整理二
带着上一篇的问题我们来到了本篇。1 、怎么确定哪些寄存器是需要的?2 、寄存器的取值?3 、开发板如果迁移以后,怎么去迁移寄存器?带着三个问题写了这篇水文,按照道理来说,写这篇博客需要大量测试经验,但我是为了先看懂整个框架再去测试,同时逐步提出我的问题与试探性解决问题,为之后可能遇到的问题做个铺垫。后续经验充足了,会另写几篇博客来叙述到底怎么进行寄存器的管理!
2023-12-10 10:40:06
598
原创 NVDLA的SDK代码整理一
这里主要借鉴这位大佬开放的代码,当然,NVDLA官方也开放了一些代码。我分析sdk的内容将会多提点有意思的东西!在中其实透露了细节。;;;;;check;;;mem;无因此答案破解,那我们需要看看这些函数都在哪些文件中用到?可以在............所以接下来最重要的就是寄存器到底是什么含义?以及我们是否有比较简单的方法去看懂寄存器?这个不是本篇的内容,留在下一篇!
2023-12-04 18:12:50
1112
原创 NVDLA用户态驱动代码整理一
本系列内容力求将nvdla的用户态驱动整理清楚,如果有分析不对的请指出。前面已经花了不少章节详细解释NVDLA内核态驱动代码,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA内核态驱动代码整理六NVDLA内核态驱动代码整理七NVDLA内核态驱动代码整理八NVDLA内核态驱动代码整理汇总篇欢迎阅读硬件信号和架构分析系列文章1:NVDLA内核态驱动代码整理三。
2023-11-20 11:18:11
236
原创 NVDLA内核态驱动代码整理汇总篇
本系列内容力求将nvdla的内核态驱动整理清楚,如果有分析不对的请指出。前面已经分析了一大块代码了,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA内核态驱动代码整理六NVDLA内核态驱动代码整理七NVDLA内核态驱动代码整理八欢迎阅读硬件信号和架构分析系列文章1:NVDLA内核态驱动代码整理三NVDLA硬件信号和架构设计整理一。
2023-11-20 10:01:11
854
原创 NVDLA内核态驱动代码整理八
本系列内容力求将nvdla的内核态驱动整理清楚,如果有分析不对的请指出。前面已经分析了一大块代码了,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA内核态驱动代码整理六NVDLA内核态驱动代码整理七欢迎阅读硬件信号和架构分析系列文章1:NVDLA内核态驱动代码整理三NVDLA硬件信号和架构设计整理一NVDLA硬件信号和架构设计整理二。
2023-11-19 21:50:03
395
原创 NVDLA内核态驱动代码整理七
本系列内容力求将nvdla的内核态驱动整理清楚,如果有分析不对的请指出。前面已经分析了一大块代码了,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA内核态驱动代码整理六欢迎阅读硬件信号和架构分析系列文章1:NVDLA内核态驱动代码整理三NVDLA硬件信号和架构设计整理一NVDLA硬件信号和架构设计整理二NVDLA硬件信号和架构设计整理三本章分析。
2023-11-17 20:03:03
406
原创 NVDLA硬件信号和架构设计整理三
本系列内容力求将nvdla的硬件设计和架构分析理清楚,如果有分析不对的请指出。架构分析系列文章,链接分别如下:NVDLA内核态驱动代码整理三NVDLA硬件信号和架构设计整理一NVDLA硬件信号和架构设计整理二欢迎持续关注我对内核态代码的解读,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA内核态驱动代码整理六NVDLA内核态驱动代码整理三note。
2023-11-17 10:49:47
900
原创 NVDLA硬件信号和架构设计整理二
本系列内容力求将nvdla的硬件设计和架构分析理清楚,如果有分析不对的请指出。前面已经分析了一篇信号和寄存器的文章,NVDLA硬件信号和架构设计整理一欢迎持续关注我对内核态代码的解读,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA内核态驱动代码整理六其中系列文章3有大量关系架构部分的介绍。NVDLA内核态驱动代码整理三note。
2023-11-16 18:33:59
1514
1
原创 NVDLA内核态驱动代码整理六
本系列内容力求将nvdla的内核态驱动整理清楚,如果有分析不对的请指出。前面已经分析了一大块代码了,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA内核态驱动代码整理五NVDLA硬件信号和架构设计整理一本章是分析nvdla_core_callbacks.c代码第四部分。函数原型功能将local_task的任务地址数量和任务具体内容的指针handles,其中。
2023-11-12 08:37:58
364
原创 NVDLA内核态驱动代码整理五
本系列内容力求将nvdla的内核态驱动整理清楚,如果有分析不对的请指出。前面已经分析了一大块代码了,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA内核态驱动代码整理四NVDLA硬件信号和架构设计整理一本章是分析nvdla_core_callbacks.c代码第三部分。结构体功能包含重要的变量,首先是,用于drm存储管理和分配的结构体;其次是*kvaddr:这是一个指针成员,通常用于存储内核虚拟地址。
2023-11-10 17:10:49
1350
2
原创 NVDLA内核态驱动代码整理四
本系列内容力求将nvdla的内核态驱动整理清楚,如果有分析不对的请指出。前面已经分析了一大块代码了,链接分别如下:NVDLA内核态驱动代码整理一NVDLA内核态驱动代码整理二NVDLA内核态驱动代码整理三NVDLA硬件信号和架构设计整理一本章是分析nvdla_core_callbacks.c代码第二部分。结构体功能包含重要的变量,首先是,用于drm存储管理和分配的结构体;其次是*kvaddr:这是一个指针成员,通常用于存储内核虚拟地址。
2023-11-10 11:33:16
805
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅