自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内核符号表

内核开发技巧

2024-09-27 19:32:55 78

原创 内核启动时减少log的方式

内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。

2024-09-09 14:56:51 895

原创 计算机组成与设计 - 1.7 功耗墙 - 1.8 单处理器向多处理器的转变 - 1.9 基准

25 年间 1ntel x86 八代微处理器的时钟频率和功耗。奔腾 4 处理器时钟频率和功耗提高很大 ,但是性能提升不大。Prescott 发热问题导致奔腾 4 处理器的生产线被放弃。Core 2 生产线恢复使用低时钟频率的简单流水线和片上多处理器。Core i5 采用同样的流水线功耗提供了能够冷却的极限,在后PC时代,能量是真正关键的资源,对于个人移动设备来说,电池寿命比性能更关键。设计者要尽量降低功耗。评价功耗时,使用能耗,比使用功耗,更加科学。能耗的单位是。

2024-08-26 18:38:22 1050

原创 计算机组成与设计 - 1.6 性能

一般来说,关于性能,我们主要考虑两个方面:1. 响应时间: 也叫执行时间,从开始一个任务到该任务完成的时间2. 吞吐率:也叫带宽,单位时间内完成的任务数量个人计算机更加关注响应时间,数据中心一般关注吞吐率多一些。将计算机中的处理器更换为更高频率的型号,既能减少其响应时间,也能增大其吞吐率。增加多个处理器分别处理任务,如搜索web,可以增大其吞吐率。当需要处理更多任务时,系统软件可以让后续的请求排队,多个任务可以同时在多个处理器上执行,增加了吞吐率的同时也减少了响应时间。

2024-08-26 16:50:36 911

原创 linux内核下通过仿真器读取用户空间内存属性

仿真器:DSTREAMIDE: DS-5。

2024-07-25 14:32:49 279

原创 eMMC规范 - 寻址/信息寄存器/总线协议/时序图/速度模式

e•MMC 规范的早期实现(至 v4.1 的版本)是采用 32-bit 域实现字节寻址的。这种寻址机制允许最大 2 GB 的 e•MMC 容量。为了支持更大的容量,寻址机制升级到支持扇区寻址( 512B 扇区)。对所有容量大于2 GB 的设备应使用扇区地址。要确定所用的寻址模式,主机应读取 OCR 寄存器的 bit [30:29]

2024-07-12 20:55:38 805

原创 mmc相关知识以及dw_mci驱动的一些解析

MMC

2024-07-11 14:40:37 1161

原创 MMC初始化过程

2024-07-05 21:28:00 132

原创 LINUX中使用DT_MACHINE_START/MACHINE_START宏

DTS

2024-06-12 21:17:46 1225

原创 devm_pwm_get获取不到pwm资源

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

2024-05-21 23:05:04 378

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

内核异常问题

2024-05-06 11:32:31 387

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

windowsIAR工具链:todoSTM32。

2024-04-24 14:11:14 838

原创 arm64 - 系统调用

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

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

原创 ARM - 调试学

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

2024-04-06 21:40:48 188

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

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

2024-03-20 15:38:07 1177

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

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

2024-03-19 14:45:49 1111

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

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

2024-02-01 13:34:07 986

原创 链接 - 重定位

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

2024-01-31 10:23:03 965

原创 linux -- per-CPU变量

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

2024-01-30 23:11:56 623

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

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

2024-01-30 19:11:06 489

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

linux内核软中断

2024-01-30 18:46:08 959

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

vmalloc

2024-01-29 20:06:55 945

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

slab

2024-01-29 16:44:20 1116

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

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

2024-01-26 15:27:10 727

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

GIC-V2

2024-01-25 17:00:03 1286

原创 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 921

原创 linux内核压缩生成过程

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

2024-01-22 11:12:49 1011

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

四相八拍电机驱动

2023-12-29 18:49:52 1895

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

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

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

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

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

2023-11-29 15:09:38 1599

原创 ARM PMU

Performence monitors

2023-11-13 16:36:14 901

原创 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 147

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

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

2023-09-24 19:27:19 208

原创 汇编层面的函数调用

2023-09-24 16:34:41 99

原创 uart ymodem转换器源码

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

2023-09-12 21:26:37 303

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

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

2023-08-22 21:55:20 66

原创 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 416

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

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

2023-07-29 18:29:14 294

原创 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 1833

原创 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 563

空空如也

空空如也

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

TA关注的人

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