驱动学习
文章平均质量分 86
tangsun999
这个作者很懒,什么都没留下…
展开
-
理解“统一编址与独立编址、I/O端口与I/O内存”
引言: 从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内存、硬盘,鼠标、键盘,显示器…… 对于CPU而言,如果它要发数据到某个设备,其实是发到对应转载 2015-01-10 14:18:15 · 973 阅读 · 0 评论 -
51单片机程序执行流程(STARTUP.A51)
2013-06-05 11:21 3856人阅读 评论(6)收藏 举报keil 版本:uVision 4 单片机是没有上操作系统的东西,在keil中编写的代码都是裸机代码,深入编写裸机代码有助于了解硬件的特性。 若不是硬件特性已定的情况之下的其它流程都是代码作祟。忽然想到来探探51单片机的执行流程。这个念头起源于最初见到每个51程序里面的主函数转载 2015-05-09 20:47:55 · 7927 阅读 · 1 评论 -
NOR Flash擦写和原理分析
NOR Flash擦写和原理分析1. NOR FLASH 的简单介绍NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行(这意味着存储在NOR FLASH上的程序不需要复制到RAM就可以直接运行).这点和NAND FLASH不一样.因此,在嵌入式系统中,NOR FLASH很适合作为转载 2015-04-25 15:32:18 · 6139 阅读 · 0 评论 -
Nand Flash和Nor Flash相关知识
Flash根据内部存储结构的不同分为两种:Norflash和Nand flash。 Norflash使用方便,易于连接,可以在芯片上直接运行代码,稳定性出色,传输速率高,在小容量时有很高的性价比。像访问SDRAM一样,按照数据/地址总线直接访问, 可写的次数较少,速度也慢,由于其读时序类似于SRAM,读地址是线性结构,这使其很适合应于嵌入式系统中作为 FLASH ROM。 Nan原创 2015-04-21 16:02:46 · 636 阅读 · 0 评论 -
Linux设备驱动--块设备(二)之相关结构体
上回最后面介绍了相关数据结构,下面再详细介绍块设备对象结构 block_device内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区。如果该结构代表一个分区,则其成员bd_part指向设备的分区结构。如果该结构代表设备,则其成员bd_disk指向设备的通用硬盘结构gendisk当用户打开块设备文件时,内核创建结构block_device实例,设备转载 2015-04-20 19:03:48 · 372 阅读 · 0 评论 -
NAND flash和NOR flash的区别
NAND flash和NOR flash的区别一、NAND flash和NOR flash的性能比较flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。由于擦除NO原创 2015-04-22 20:22:00 · 442 阅读 · 0 评论 -
io端口与io内存详解
(一)地址的概念1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32bits地址线的x86原创 2015-04-24 16:47:28 · 13438 阅读 · 3 评论 -
Linux设备驱动--块设备(一)之概念和框架
基本概念 块设备(blockdevice)--- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。字符设备(Character device)---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所转载 2015-04-20 19:04:45 · 320 阅读 · 0 评论 -
writeb(), writew(), writel(),readb(), readw(), readl() 宏函数
writeb(), writew(), writel() 宏函数功能 :往内存映射的 I/O 空间上写数据。writeb() I/O 上写入 8 位数据 (1字节)writew() I/O 上写入 16 位数据 (2字节)wirtel() I/O 上写入 32 位数据 (4字节)原型 :引用#include void writeb转载 2015-04-24 11:31:15 · 783 阅读 · 0 评论 -
linux内存操作--ioremap和mmap学习笔记
最近在做视频输出相关的东西,对于预留给framebuffer的内存使用不是很清楚,现在找到一些资料整理一下,以备使用。if (想看使用方法) goto 使用方法;对于一个系统来讲,会有很多的外设,那么这些外设的管理都是通过CPU完成。那么CPU在这个过程中是如何找到外设的呢?尽管在一个系统中会有诸多的外设,在每个外设的接口电路中会有多个端口。但是如果系统能够每个端口都被赋予一转载 2015-04-24 17:13:02 · 780 阅读 · 0 评论 -
Linux设备驱动--块设备(四)之“自造请求”
前面, 我们已经讨论了内核所作的在队列中优化请求顺序的工作; 这个工作包括排列请求和, 或许, 甚至延迟队列来允许一个预期的请求到达. 这些技术在处理一个真正的旋转的磁盘驱动器时有助于系统的性能. 但是, 许多面向块的设备, 例如闪存阵列, 用于数字相机的存储卡的读取器、u盘等, 并且 RAM 盘真正地有随机存取的性能, 包含从高级的请求队列逻辑中获益. 其他设备, 例如软件 RAID 阵列或者被转载 2015-04-20 19:42:41 · 531 阅读 · 0 评论 -
Linux设备驱动--块设备(三)之程序设计
块设备驱动注册与注销块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为:int register_blkdev(unsigned int major, const char *name);major 参数是块设备要使用的主设备号,name为设备名,它会在/proc/devices中被显示。 如果major为0转载 2015-04-20 19:19:12 · 431 阅读 · 0 评论 -
Linux驱动基础开发2
Linux 设备驱动基本概念学习linux设备驱动首先我们必须明确以下几个概念,为我们接下来学习linux驱动打下坚实的基础:应用程序、库、内核、驱动程序的关系设备类型设备文件、主设备号与从设备号驱动程序与应用程序的区别用户态与内核态Linux驱动程序功能一、应用程序、库、内核、驱动程序的关系 1)应用程序调转载 2015-03-20 08:58:44 · 461 阅读 · 0 评论 -
Linux驱动基础开发3
Linux 驱动开发前奏(模块编程)一、linux内核模块简介 linux内核整体结构非常庞大,其包含的组件也非常多。我们怎么把需要的部分都包含在内核中呢? 一种办法是把所有的需要的功能都编译到内核中。这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,不得不重新编译内核,工作效率会非常的低,同时如果编译的模块不是很完善,转载 2015-03-20 09:09:53 · 349 阅读 · 0 评论 -
Linux驱动基础开发1
Linux 设备驱动概述目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer): 主要利用C库函数和Linux API进行应用软件的编写; 从事这方面的开发工作,主要需要学习:符合linux posix标准的API函数及系统调用,linux的多任务编程技巧:多进转载 2015-03-20 08:49:30 · 435 阅读 · 0 评论 -
Linux驱动基础开发4
Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢?转载 2015-03-20 09:25:08 · 475 阅读 · 0 评论 -
Linux之module_param()函数学习
一.module_param1.为什么引入 在用户态下编程可以通过main()来传递命令行参数,而编写一个内核模块则可通过module_param()来传递命令行参数. 2. module_param宏是Linux 2.6内核中新增的,该宏被定义在include/linux/moduleparam.h文件中,具体定义如下: /* Helper functions: type转载 2015-01-12 15:38:18 · 455 阅读 · 0 评论 -
存储器简介(RAM/ROM/FLASH/NVRAM)
memory内存RAM(Random Access Memory)随机存储器。掉电后数据会消失SRAM((Static RAM)写入的数据不会消失,直到下次写入或掉电。常用于CPU的一级缓存、二级缓存。价格昂贵。DRAM(Dynamic RAM)写入的数据不能长期保持,必须在一定时间内进行刷新才能保持。常用作内存。价格低于SRAMSDRAM(Synchron转载 2015-04-22 16:00:04 · 1575 阅读 · 0 评论