漫游嵌入式
码龄8年
关注
提问 私信
  • 博客:560,167
    社区:3,886
    动态:763
    564,816
    总访问量
  • 209
    原创
  • 49,838
    排名
  • 10,341
    粉丝

个人简介:一名从事半导体行业的嵌入式Linux学徒;内核贡献者;热衷于底层原理;佛系更新笔记中。。。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:江苏省
  • 加入CSDN时间: 2017-03-30
博客简介:

Muggle的博客

博客描述:
热爱嵌入式Linux
查看详细资料
  • 原力等级
    领奖
    当前等级
    7
    当前总分
    3,522
    当月
    19
个人成就
  • 嵌入式领域优质创作者
  • 博客专家认证
  • 获得363次点赞
  • 内容获得75次评论
  • 获得1,769次收藏
  • 代码片获得900次分享
创作历程
  • 9篇
    2024年
  • 22篇
    2023年
  • 79篇
    2022年
  • 40篇
    2021年
  • 15篇
    2020年
  • 25篇
    2019年
  • 20篇
    2018年
成就勋章
TA的专栏
  • Linux图形驱动与桌面
    付费
    37篇
  • i.MX8平台开发分享
    24篇
  • 嵌入式开发乱七八糟
    6篇
  • 深入理解uboot源代码
    22篇
  • PCI Express Technology
  • 嵌入式Linux实战开发教程
    40篇
  • 《ARMv8架构初学者指南》
    23篇
TA的推广
兴趣领域 设置
  • 硬件开发
    驱动开发arm开发
  • 操作系统
    linux
每日推荐
不荒废现在,不畏惧未来! 努力努力努力!

如果你也是嵌入式Linux爱好者,欢迎关注

漫游嵌入式

20200408175643227.gif
Linux/嵌入式/ARM 爱好者

CSDN推荐专栏

【Linux图形驱动与桌面】专栏
【Linux内核精选笔记】专栏

未完工区域

创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

180人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 关注/订阅/互动
  • 资源
  • 课程
  • 收藏
搜TA的内容
搜索 取消

i.MX8MP平台开发分享(TMU驱动及用户接口篇)

TMU的设备树定义了温度校准数据的存储位置。#thermal1;温控的thermal-zones有两个thermal, 分别对应两个TMU。可以看到设备树定义了温度范围,但是这个范围目前的驱动代码会被驱动覆盖。
原创
发布博客 2024.06.05 ·
1040 阅读 ·
9 点赞 ·
0 评论 ·
6 收藏

i.MX8MP平台开发分享(CSU控制器篇)

ATF中的CSU配置如下,OCARM和OCRAM_S被配置为了安全等级2,非锁定状态。) 来管理所有不直接支持安全(如 CPU 内核)的主/从设备的安全。CSU的描述请参考Security Reference Manual。
原创
发布博客 2024.06.05 ·
295 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

i.MX8MP平台开发分享(RDC软件配置篇)

Uboot中已经将RDC的配置写入到了OCRAM中,NXP在ATF中预设了SIP服务,SIP服务下有厂商自定义的smc命令ID。例如下面的DDR、GPC、SRC和HAB的smc回调函数。在SRC中断处理函数中,对于SRC_M4_START指令,先读取OCRAM中的配置,然后初始化RDC。
原创
发布博客 2024.06.05 ·
590 阅读 ·
5 点赞 ·
0 评论 ·
1 收藏

i.MX8MP平台开发分享(TMU功能介绍篇)

温度监控单元(TMU)监控并报告来自一个或多个芯片上远程温度测量点的温度。温度测量范围:-40至105°C。监控功能:单点或多点监控超出范围指示高/低温度范围监控即时和平均温度监控可编程低通滤波的平均温度监控可编程的正常和临界监控阈值报告功能:即时和平均温度报告TMU能够访问芯片上的两个温度测量点。主探头位于ANAMIX内部,而远程探头位于ARM核心附近。TMU监控这些位置,并在超过设定阈值时发出报警。上限和下限温度范围持续被捕获。
原创
发布博客 2024.06.04 ·
327 阅读 ·
5 点赞 ·
0 评论 ·
3 收藏

i.MX8MP平台开发分享(MU功能介绍篇)

消息传递单元(MU)模块通过 MU 接口传递消息(如数据、状态和控制),使 SoC 中的两个处理器能够进行通信和协调。MU 还能让一个处理器使用中断向另一个处理器发出信号。由于 MU 管理处理器之间的信息传递,因此 MU 使用不同的时钟(来自不同外设总线的每一端)。因此,MU 必须同步从一侧到另一侧的访问。MU 使用两组匹配寄存器(面向处理器 A,面向处理器 B)实现同步。
原创
发布博客 2024.06.04 ·
486 阅读 ·
3 点赞 ·
0 评论 ·
5 收藏

i.MX8MP平台开发分享(GPC控制器篇)

整体来说,i.MX8MP中的电源是由General Power Controller (GPC) 来控制的。GPC可以提供各种电源模式的控制,如低功耗模式、深度睡眠模式等等。GPC包含两个模块,一个是系统模式控制器(SMC),控制系统的电源模式;另一个是电源门控控制器(PGC),控制模块的电源开关。详细信息请参考RM。本文重点分析其中的PGC(Power Gating Controller )。如下图所示,每个模块都有单独的PGC进行控制,从而实现对单个模块的电源开关功能。
原创
发布博客 2024.06.03 ·
1612 阅读 ·
45 点赞 ·
0 评论 ·
25 收藏

i.MX8MP平台开发分享(RDC资源分配控制器篇)

RDC 允许将外设和存储器分配到一个或多个域,而每个总线主站或内核则被置于多个域中的一个。否则,权限将不受限制。当软件或 DMA 尝试访问外设或内存时,相应的总线事务包括 DID 以及其他总线控制信息,如读取、写入和特权模式。对于该设备,请参考下表确定支持域的存储器、每个存储器的区域数、区域分辨率、存储器区域寄存器组的标识号,以及访问存储器区域寄存器组的 RDC 寄存器地址。下面是Uboot中关于RDC配置,此配置会存储到ocram指定位置,由ATF读取并写入RDC控制器,将对应模块的控制权移动到M7。
原创
发布博客 2024.06.03 ·
1160 阅读 ·
27 点赞 ·
0 评论 ·
17 收藏

i.MX8MP平台开发分享(SRC复位控制器篇)

复位控制器负责生成系统内部的各个复位信号和启动参数锁存。系统整体上电和复位的流程这里不再详细描述,可以参考手册。本文重点描述复位控制器对于内部子模块的复位控制,以及如何在代码中实现复位功能。下面是复位控制器(System Reset Controller)的设备树,其中定义了寄存器起始地址和中断信号,对应的驱动为。#reset1;对于复位驱动来说,需要实现以下几点功能接入Linux中的platform驱动。
原创
发布博客 2024.05.31 ·
478 阅读 ·
9 点赞 ·
0 评论 ·
4 收藏

我的创作纪念日

同时,通过文章进行技术交流也是一个重要的动力,我希望通过文字与更多的技术爱好者进行思想碰撞,互相学习,共同进步。我的文章获得了许多赞、评论和阅读量,让我感受到自己的努力得到了认可。同时,我也结识了很多志同道合的同行,通过交流学习,拓展了自己的视野和知识面。粉丝的关注和支持是我继续创作的重要动力,让我更加坚定了分享的信念。职业规划上,我希望能成为一名技术专家,能够在更高层次上解决复杂的问题,并为行业的发展贡献自己的力量。创作规划上,我希望能通过更多的优质内容,影响和帮助更多的开发者。
原创
发布博客 2024.05.31 ·
218 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

【精读Uboot】Uboot跳转内核

在进入ATF后,ATF与OP-TEE共同协作,转而跳转到处于非安全上下文的U-Boot中(ATF->Uboot)。在Uboot阶段会重新从汇编开始执行,不一样的是里面的函数不再是SPL阶段使用的,而是中定义的。SPL阶段的主要目的是使能芯片的核心器件,而中定义的函数是为了初始化Uboot的驱动框架。
原创
发布博客 2023.09.08 ·
977 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

【精读Uboot】SPL阶段的board_init_r详细分析

对于i.MX平台上的SPL来说,其不会直接跳转到Uboot,而是在SPL阶段借助BOOTROM跳转到ATF,然后再通过ATF跳转到Uboot。会初始化设备相关的硬件,最后进入为镜像跳转做准备。下面是调用的核心函数流程,接下来我们会对其中的函数进行详细分析。
原创
发布博客 2023.09.08 ·
1395 阅读 ·
0 点赞 ·
0 评论 ·
7 收藏

【精读Uboot】its文件语法

前面我们分析了SPL汇编的执行过程,在SPL之后就要进入另一个loader加载镜像了。在正式分析跳转流程之前,我们需要搞清楚在我们平时下载的这个镜像是如何组成的。在编译完Uboot、optee和ATF之后,会产生bl31.bin和tee.bin。首先将ddr的固件和拼接为,这个bin文件就是SPL部分。其余的bin文件需要组装为一个含uboot.bin的文件,然后将这俩个bin组装起来,加上IVT等头信息就得到了最终可用的。
原创
发布博客 2023.09.08 ·
1476 阅读 ·
3 点赞 ·
0 评论 ·
8 收藏

【精读Uboot】异常向量的设置

对于ARM64而言,exception是指cpu的某些异常状态或者一些系统的事件(可能来自外部,也可能来自内部),这些状态或者事件可以导致cpu去执行一些预先设定的,具有更高执行权利(EL3)的异常处理程序(也叫exception handler)。在_start.S中,我们将vectors的地址设置进了了vbar_el3寄存器,也就让芯片知道了异常发生时,应该跳转到这个地址执行异常处理。的方式存储,这会将栈指针(sp)向下递减16字节,然后将寄存器的值存储到新的栈位置。标签,进入异常处理程序的第二部分。
原创
发布博客 2023.09.08 ·
795 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

【精读Uboot】反汇编分析SPL的_main函数

典型的Uboot启动分为两个阶段,bootrom->->ATF->OPTEE(可选)->Uboot。其中SPL为BL2ATF为BL31OPTEE为BL32Uboot为BL33。其中bootrom是固化在芯片内部的代码,负责从各种外(sdcard、mmc、flash)中加载spl到芯片内部的SRAM;SPL的主要工作是初始化板载的DRAM和核心硬件;Uboot最主要的功能就是加载启动kernel。
原创
发布博客 2023.09.08 ·
634 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

计算Yocto中LIC_FILES_CHKSUM的md5值

使用以下网站:
原创
发布博客 2023.05.27 ·
1926 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

i.MX8MP平台开发分享(gicv3篇)-- gic_handle_irq如何跳转到自定义的中断线程处理函数

在处理完中断后,处理器会将相应的IAR寄存器更新为0来确认该中断已被处理。该寄存器允许内核结束中断处理并通知 GICv3 中断控制器中的相应中断已被处理完毕,以允许下一个中断在该中断的后面立即传递到 CPU。当某个CPU请求中断处理时,GICv3控制器将相应的中断号和目标CPU的信息填充到ICR_ELx寄存器中,然后发出中断信号,目标CPU将从中断服务例程(ISR)中处理该中断。其中,ICR_EL1用于处理EL1级别的中断,ICR_EL2用于处理EL2级别的中断,ICR_EL3用于处理EL3级别的中断。
原创
发布博客 2023.04.13 ·
1329 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

i.MX8MP平台开发分享(gicv3篇)-- set_handle_irq及中断路由过程分析

来退出异常,恢复刚才保存的通用寄存器,执行 ERET 来恢复 PC 和 PSTATE。如果是el0,则使用ret_to_user返回用户态,el1是ret_to_kernel返回内核态。在__primary_switched函数中使用msr指令将vectors异常向量表的。在发生中断异常后,内核就会切入到这个中断处理函数中.arm64所有的异常向量存储在一下所示的vectors中。在这个函数中,会跳转到具体的。存储和清除EL0/1中的通用寄存器。这个函数,然后跳转到这个函数。这个函数的功能很简单,将。
原创
发布博客 2023.04.13 ·
876 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

i.MX8MP平台开发分享(gicv3篇)-- irq_domain_create_tree分析

默认采用radix mapping的方式维护资源。注册进irq域中,并返回这个注册的。根据irq控制器的设备树节点和。在gicv3驱动中,
原创
发布博客 2023.04.09 ·
280 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

i.MX8MP平台开发分享(gicv3篇)-- gic_init_bases流程纵览及中断数量计算

对于SPI类型,数量等于GIC_LINE_NR - 32,其中GIC_LINE_NR。如何计算出中断数量?GICD_TYPER寄存器如下。对于Extended SPIs,
原创
发布博客 2023.04.06 ·
421 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

i.MX8MP平台开发分享(gicv3篇)-- dts定义及gic_of_init函数

dts中gic的节点定义如下,中断控制器基地址为0x38800000,GIC Distributor interface寄存器大小为0x10000,GIC Redistributors寄存器大小为后续的0xc0000。这里的interrupt-cells描述了dts中如何使用标记中断,这个值为3,意味着我们通过三个参数来描述中断,分别是中断类型、中断号、中断触发标志。首先映射Distributor和Redistributor基地址,gic_init_bases作为核心函数负责初始化中断控制器。
原创
发布博客 2023.04.04 ·
259 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多