自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(193)
  • 收藏
  • 关注

原创 devm_pwm_get获取不到pwm资源

所以要使用devm_pwm_get获取pwmchip资源,需要类似的add过程。

2024-05-21 23:05:04 217

原创 linux 内核驱动 -- reboot -f 导致内核死机 而 reboot则不会引起问题

内核异常问题

2024-05-06 11:32:31 194

原创 问题记录:交换两行printf -打印结果不同

windowsIAR工具链:todoSTM32。

2024-04-24 14:11:14 799

原创 arm64 - 系统调用

群里做网络的小伙伴问了一个问题,他在wifi驱动的某个函数里加了dump stack,然后插入驱动,发现调用栈是这样的,为什么呢?

2024-04-08 16:19:58 358 1

原创 ARM - 调试学

ARM架构 – debug学习 - someone的文章 - 知乎。

2024-04-06 21:40:48 164

原创 uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败

pinctrl设置引脚复用失败,没有调用到controller中的set_groups_function函数。

2024-03-20 15:38:07 1091

原创 linux -- I2C设备驱动 -- MS32006(低压5V多通道电机驱动器)

MS32006 是一款多通道电机驱动芯片, 其中包含两路步进电机驱动, 一路直流电机驱动;每个通道的电流最高电流1.0A;支持两相四线与四相五线步进电机。芯片采用 I2C 的通信接口控制模式, 兼容 3.3V/5V 的标准工业接口。MS32006 总共集成了两路步进电机驱动器与一路直流电机驱动器, 通过 I2C 总线去控制电机的转动。步进电机控制器可以选择全步进或者 1/2 的步进模式, 系统上一般用来做为小云台 X,Y 轴的运动控制。

2024-03-19 14:45:49 747

原创 linux -- 并发 -- 并发来源与简单的解决并发的手段

当多个执行路径并发执行时,确保对共享资源的访问安全是驱动程序员不得不面对的问题互斥:对资源的排他性访问同步:对进程执行的先后顺序做出妥善的安排一些概念:临界区:对共享的资源进行访问的代码片段称为临界区并发源:导致出现多个执行路径的因素称为并发源。

2024-02-01 13:34:07 899

原创 链接 - 重定位

链接脚本的输出段格式描述:链接脚本输出段格式一个输出段有两个地址:VA和LMA,分别是虚拟地址和加载器地址虚拟存储地址,是运行时段所在的地址,可以理解为运行地址。加载存储器地址是加载时段所在的地址,可以理解为加载地址。如果没有用AT显式指定LMA,那么LMA=VA,加载地址等于虚拟地址。

2024-01-31 10:23:03 852

原创 linux -- per-CPU变量

per-CPU变量是一种存在与每个CPU本地的变量,对于每一种per-CPU变量,每个CPU在本地都有一份它的副本。

2024-01-30 23:11:56 505

原创 linux --中断管理 -- irq的自动探测机制

如果一个设备的驱动程序无法确定它说管理的设备的软件中断号irq,此时设备驱动程序可以使用irq的来获取其正在使用的irq。使用自动探测机制的条件探测前,驱动的设备关联到了某个irq,但是因为设备驱动程序还不清楚是哪个irq,因此无法调用request_irq来向该irq安装中断处理例程,所以对应irq的action为空,下面是一个设备驱动程序的使用示例:probe_irq_on和probe_irq_off是内核为驱动程序员设计的两个自动探测的接口函数。

2024-01-30 19:11:06 440

原创 linux -- 中断管理 -- softirq机制

linux内核软中断

2024-01-30 18:46:08 907

原创 linux -- 内存管理 -- 虚拟内存的管理

vmalloc

2024-01-29 20:06:55 894

原创 linux -- 内存管理 -- SLAB分配器

slab

2024-01-29 16:44:20 1059

原创 linux -- 内存管理 -- 页面分配器

分配并使用内存,是内核程序与驱动程序中非常重要的一环。内存分配函数都依赖于内核中一个非常复杂而重要的组件 - 内存管理。linux驱动程序不可避免要与内核中的内存管理模块打交道。linux内存管理可以总体上分为两大块:一是对物理内存的管理,二是对虚拟内存的管理。

2024-01-26 15:27:10 609

原创 armv8 - GIC-V2 中断控制器

GIC-V2

2024-01-25 17:00:03 1019

原创 Hylicos - MINI2440 - 中断控制

中断是一种异步异常,CPU需要处理很多来自设备的中断请求,而CPU引出的line只有IRQ线和FIQ线,所以就得引入中断控制器帮助CPU搞清楚是中断的来源。MINI2440的中断控制器,可以接受来自60个中断源的请求。提供这些中断源的是内部外设,如DMA 控制器、 UART、IIC 等等。在这些中断源中,UARTn、AC97 和EINTn 中断对于中断控制器而言是“或”关系。当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T 内核的FIQ 或IRQ。

2024-01-22 19:59:32 904

原创 linux内核压缩生成过程

在客户使用我司芯片,选择内核自解压算法为XZ和LZMA后,发现解压时长变得非常慢,约40S。我们拿到了一块rk3288 fire-fly的板子,也将其内核配置为XZ压缩,经过测试,RK的板子做XZ的解压只需要2s,对比我司的表现,RK速度非常之快。

2024-01-22 11:12:49 939

原创 四相八拍电机 --- linux驱动

四相八拍电机驱动

2023-12-29 18:49:52 885

原创 vscode使用remote ssh到server上 - Node进程吃满CPU

我发现每次使用vscode的remote插件登陆到server后,就会出现node进程,不太清楚干什么用的,但是绝对和它有关。

2023-12-18 13:22:48 2857 2

原创 neovim -- 使用clangd以及coc.nvim阅读代码

Coc.nvim 是一个基于NodeJS 的适用于Vim8, Neovim 的Vim 智能补全插件。拥有完整的LSP 支持。配置、使用方式及插件系统的整体风格类似 VSCode。

2023-11-29 15:09:38 1058

原创 ARM PMU

Performence monitors

2023-11-13 16:36:14 698

原创 TrustZone以及ARMv8相关知识链接汇总

介绍TrustZone相关知识:https://blog.csdn.net/guyongqiangx/article/details/78020257ATF相关的 代码解析:https://blog.csdn.net/puyoupuyou/article/details/85046544Firmware Design: https://trustedfirmware-a.readthedocs.io/en/latest/design/firmware-design.html公司wiki:http:/

2023-10-18 17:26:25 132

原创 RISC-V函数调用约定 ABI

call和ret用的最多注意前戏 protogue。

2023-09-24 19:27:19 176

原创 汇编层面的函数调用

2023-09-24 16:34:41 87

原创 uart ymodem转换器源码

注:CRC校验用的是xmodem-crc,转换出的文件与IPOP的ymodem发送功能发到下位机的一致。

2023-09-12 21:26:37 254

转载 C++ new和delete的理解 --- 转载

因此,c++中用new申请堆空间与用malloc不同,前者自动检测堆空间是否申请成功。3 如果申请堆空间成功,就调用构造函数 并将堆空间首地址给xp指针。2 对申请到的堆空间首地址进行检查,防止申请失败,返回空指针。1 调用operator new申请堆空间。

2023-08-22 21:55:20 57

原创 TrustZone-A --- IO抽象层

fip_dev_connector是firmware image package类型的链接器,不同的存储设备都有不同的链接器,就本文章第一张图片中,那个目录下的所有文件中都有定义一个xxx_dev_connnector,以及对应的io_dev_funcs_t操作函数集,包括附带的register_io_dev_xxx函数,register_io_dev_fip这个函数不过是在io_storage.c中定义的。io_file_spec 用户访问类似文件的实体,比如Flash上的文件系统中的文件。

2023-08-14 21:13:50 321

原创 一个字符驱动示例 -- 微秒级别周期 反转GPIO

仅作为自我记录的一个demo。

2023-07-29 18:29:14 232

原创 Linux Kernel RTC驱动使用hwclock调试

如果系统中/dev下有多个rtc设备,那么运行hwclock命令时必须带上-f 指定使用哪个rtc设备,否则会报错hwclock: RTC_RD_TIME: Invalid argument或者hwclock: RTC_SET_TIME: Invalid argument。hwclock将会从rtc硬件(寄存器)中读取时间或往rtc硬件中写入时间,与rtc硬件息息相关。通过hwclock -r 读取RTC硬件时间检验是否等于系统时间。通过hwclock -s 从rtc读取时间设置给系统。

2023-06-01 14:58:02 1517

原创 Linux内核驱动 --- CCF框架 provider驱动的编写

复制上节内容中对Provider驱动编写流程的总结:1)分析硬件的clock tree,按照上面所描述的分类,将这些clock分类。3)对于不能由clock framework core处理的clock,需要在driver中使用struct of_device_id进行匹配,并在初始化时,调用OF模块,查找所有的DTS匹配项,并执行合适的regitser接口,注册clock。

2023-05-30 11:31:08 496

原创 Linux驱动开发 --- CCF时钟框架

linux内核的CCF时钟框架可以分为三层,每一层的职责以及彼此的关系如下图所示。

2023-05-17 22:17:42 910

原创 C基础 --- 因为整型提升导致的BUG

通常情况下,在对int类型的数值作运算时,CPU的运算速度是最快的。在x86上,32位算术运算的速度比16位算术运算的速度快一倍。C语言是一个注重 效率的语言,所以它会作整型提升,使得程序的运行速度尽可能地快。因此,你必须记住整型提升规则,以免发生一些整型溢出的问题。

2023-05-12 11:21:29 483

原创 Linux内核 --- 链表

【代码】Linux内核 --- 链表。

2023-04-05 19:19:33 91

原创 中断子系统 ---下半部softirq tasklet以及workqueue

上节主要讲了Linux内核do_IRQ函数中中irq_enter以及generic_handle_irq(irq)函数,这是中断上半部。这节要开始剖析中断下半部的实现原理内核用一个无符号整型**__sofitirq_pending**来表示当前正在等待被处理的softirq,每一种softirq在__softirq_pending中占据一位每个CPU有自己的__softirq_pending变量。

2023-04-02 00:05:50 259

原创 linux -- 中断管理 -- 中断管理以及PIC可编程中断控制器

中断理解

2023-03-10 23:33:12 1002

原创 Understanding The Linux Kernel --- Part2 Memory Addressing

LINUX KERNEL DEV

2023-03-02 20:39:29 346

原创 DMA驱动开发---认识DMA

DMA驱动开发

2023-02-03 17:22:51 10038 7

原创 操作系统接口&系统调用的实现

操作系统 系统调用的实现

2022-12-29 16:41:01 953

原创 HylicOS --- 内核级线程的创建与切换

内核级线程创建与切换

2022-12-18 17:11:01 186

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除