自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

赶紧十八丶

内核分析笔记

  • 博客(12)
  • 收藏
  • 关注

原创 mmc子系统框架

Linux kernel把mmc,sd以及sdio三者的驱动代码整合在一起,俗称mmc子系统。源码位于drivers/mmc下。其下有三个子目录,分别是:card、core、host,其中,card用于构建一个块设备作为上层与mmc子系统沟通的桥梁;core抽象了mmc,sd,sdio三者的通用操作;host则是各类平台上的host驱动代码,包括如TI Omap的omap_hsmmc,三星的s3cmci等。具体的SOC,会根据实际情况再次封装(比如rk3288采用新思designwave的IP),就重新封装

2022-04-20 11:51:49 2113 2

原创 IIC驱动

1. I2C体系结构分析1.1首先进入linux内核的driver/i2c目录下,如下图所示:其中重要的文件介绍如下:1)algos文件夹(algorithms)里面保存I2C的通信方面的算法2)busses文件夹里面保存I2C总线驱动相关的文件,比如i2c-omap.c、 i2c-versatile.c、 i2c-s3c2410.c等。3)chips文件夹里面保存I2C设备驱动相关的文件4)i2c-core.c这个文件实现了I2C核心的功能(I2C总线的初...

2021-11-17 11:48:23 2430

原创 第19课:nand flash驱动

1、参考自带的nand flash驱动,位于drivers/mtd/nand/s3c2410.c中1.1 为什么nand在mtd目录下?因为mtd(memory technology device存储技术设备)是用于访问memory设备(ROM、flash )的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。1.2首先来看s3c2410.c的入口函数:static int __init ...

2021-10-24 10:43:05 2464

原创 第18课:块设备驱动--用内存模拟磁盘

框架:app: open, read, write, "1.txt"---------------------------------------------------------------- 文件的读写文件系统: vfat, ext2, ext3, yaffs2, jffs2 (把文件的读写转换为扇区的读写)----------------------ll_rw_block------------------------...

2021-10-23 09:59:34 780

原创 字符驱动、输入子系统、platform总线、LCD驱动、USB驱动

大部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。这样他不需要初始化就能够直接使用。这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用的,这点大家务必要搞清楚。这点在我做过移植的处理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是这样的。在s3c

2021-10-09 11:08:49 2979 1

原创 驱动程序基石:异步通知

驱动程序基石:异步通知

2022-09-13 10:08:10 594 3

原创 驱动程序基石:POLL机制

Linux APP 系统调用,基本都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用 open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。对于系统调用 poll 或 select,它们对应的内核函数都是 sys_poll。分析sys_poll,即可理解 poll 机制。大致的调用流程如下所示:

2022-09-12 20:11:41 935

原创 块设备驱动框架的总结(flash为例)

整体框架:flash驱动的编写流程:

2022-04-16 09:23:34 354

原创 rockchip的adc按键驱动

设备树:adc-keys { compatible = "adc-keys"; io-channels = <&saradc 2>; //adc选用的是saradc通道2 io-channel-names = "buttons"; poll-interval = <100>; keyup-thr};

2022-04-12 21:09:44 3308

原创 rockchip的pwm驱动框架

首先看设备树的pwm节点:vi rk3399.dtsi:pwm0: pwm@ff420000 { compatible = "rockchip,rk3399-pwm", "rockchip,rk3288-pwm"; reg = <0x0 0xff420000 0x0 0x10>; #pwm-cells = <3>; pinctrl-names = "active"; pinctrl-0 = &lt

2022-04-12 20:22:28 813

原创 RTC实时时钟驱动

linux中的RTC驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c30.Linux-RTC驱动分析及使用 - 诺谦 - 博客园1.进入./drivers/rtc/rtc-s3c.c还是首先进入入口函数,如下图所示:这里注册了一个“s3c2410-rtc”名称的平台设备驱动而“s3c2410-rtc”的平台设备,在./arch/arm/plat-s3c24xx/dev.c里定义了,但在这没有注

2021-11-17 21:24:47 1455

原创 内存控制器(以位宽为16的NOR FLASH举例)

CPU 执行的指令:“ldr r0,[某个地址 A]”,ldr 是装载 4个字节,这是从这个地址里读取某个数据存到 r0 里去。A 地址的 1 字节数据。A+1 地址的 1 字节数据。A+2 地址的 1 字节数据。A+3 地址的 1 字节数据。即, ldr 是得到 4 个地址上的数据共4字节。“ ldb r0,[某个地址B]”, ldb是装载1个字节。对CPU来说一个地址对应的数据是 1 字节。B 地址的 1 字节数据。例1:Mov R1,#0Ldr R0,[R1]从R1把的地方

2021-11-15 21:40:16 988

空空如也

空空如也

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

TA关注的人

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