
linux嵌入式
坠尘
这个作者很懒,什么都没留下…
展开
-
linux NAND驱动之四:6410上的NAND读写流程
MTD对NAND芯片的读写主要分三部分: A、struct mtd_info中的读写函数,如read,write_oob等,这是MTD原始设备层与FLASH硬件层之间的接口; B、struct nand_ecc_ctrl中的读写函数,如read_page_raw,write_page等,主要用来做一些与ecc有关的操作; C转载 2012-04-16 15:38:48 · 1986 阅读 · 0 评论 -
linux NAND驱动之三:6410平台上的NAND驱动加载
1,platform_driver 的定义和注册 在s3c_nand.c中,static struct platform_driver s3c6410_nand_driver = { .probe = s3c6410_nand_probe, .remove = s3c_nand_remove,转载 2012-04-16 15:14:28 · 1722 阅读 · 0 评论 -
linux NAND驱动之六:NAND驱动的probe流程
由前面的说明可知,我们在要对NAND 芯片进行实际操作前已经为struct mtd_info 、struct mtd_partition 和struct nand_chip 这三个结构体分配好了内存,接下来就要为它们做一些初始化工作。 其中,我们需要为struct mtd_info 所做的初始化工作并不多,因为MTD Core 会在稍后为它做很多初始化工作(这些工作在nand_scan_tail这转载 2012-04-16 15:40:44 · 1741 阅读 · 0 评论 -
linux NAND驱动之一:内核中的NAND代码布局
在Linux 内核中,MTD 源代码放在/driver/mtd 目录中,该目录中包含chips 、devices 、maps 、nand 、onenand 和ubi 六个子目录。其中只有nand 和onenand 目录中的代码才与NAND 驱动相关,不过nand 目录中的代码比较通用,而onenand 目录中的代码相对于nand 中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash芯片转载 2012-04-16 15:10:19 · 1784 阅读 · 0 评论 -
关于linux的音频驱动(二)
3. 关于sep4020_audio_write函数:这个是整个驱动的核心,也是难点,牵涉了dma操作,buffer ring的思想,linux中信号量的思想。一下内容读起来会有点吃力,请好好理解代码●关于dma:对dma的操作,在这里使用了一个buffer ring的思想,这里我们来看一下建立dma缓冲环的代码来理解这种buffer ring:static int a转载 2012-04-16 14:32:09 · 1769 阅读 · 0 评论 -
linux NAND驱动之二:NAND存储原理
在我们开始NAND 驱动编写之前,至少应该知道:数据在NAND 中是怎样存储的,以及以怎样的方式从NAND 中读写数据的。 1,NAND 的存储结构和操作方式 这方面的资料可以从任意一种NAND 的datasheet 中得到,而且事实上,大多数的NAND datasheet 都大同小异,所不同的大概只是该NAND 芯片转载 2012-04-16 15:13:47 · 1824 阅读 · 0 评论 -
基于linux2.6.16的nand驱动开发(二)
第二部分:具体的Nand Flash驱动搞清楚了MTD,内核,nandflash设备驱动的关系后,现在就是如何编写针对我们这款处理器的驱动,首先介绍一下nandflash结构struct nand_chip●. struct nand_chip { void __iomem *IO_ADDR_R; //这是nandflash的读写寄存器,对于我们的芯片是转载 2012-04-16 14:16:10 · 490 阅读 · 0 评论 -
Jaguar.Yuan 的Linux驱动之行——Platform驱动框架介绍(二)
二、 platform_device与驱动的联系下面这个结构 体,对于移植过系统的来说已经不陌生了,而系统也正是通过这个结构体加载相关驱动,下面这个结构体只列出比较的几个驱动程序,其实系统中远不只如此。static structplatform_device *smdk2410_devices[] __initdata = {&s3c_device_lcd,&s3c_d转载 2012-04-12 10:32:12 · 700 阅读 · 0 评论 -
Jaguar.Yuan 的Linux驱动之行——Platform驱动框架介绍(一)
在进行正式的大型驱动之前,有必要先看一点基础的结构,而这些结构在前面的较为简单的驱动程序中已经出现,所以这里有必要单独抽时间来看看,加强学习。至于后面所讲到的大型驱动,除USB外有单独的框架,其它驱动也不外乎是总线、设备这些基本方法的应用,实现更为复杂的功能。一、 Platform_device和Platform_driverplatform总线是Linux内核中的一个虚拟总线,它转载 2012-04-12 10:29:46 · 992 阅读 · 0 评论 -
linux platform 驱动模型分析
linux platform 驱动模型分析一. 概述 platform设备和驱动与linux设备模型密切相关。platform在linux设备模型中,其实就是一种虚拟总线没有对应的硬件结构。它的主要作用就是管理系统的外设资源,比如io内存,中断信号线。现在大多数处理器芯片都是soc,如s3c2440,它包括处理器内核(arm920t)和系统的外设(lcd接口,nandflash接口等转载 2012-04-01 14:30:52 · 556 阅读 · 0 评论 -
linux 等待队列
Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个list_head类型的域作为"连接件"。它通过一个双链表和把等待tast的头,和等待的进程列表链接起来。从上图可以清晰看到。所转载 2012-03-16 15:20:53 · 538 阅读 · 0 评论 -
写一个块设备驱动 14
第 14章 +---------------------------------------------------+| 写一个块设备驱动 | +---------------------------------------------------+ | 作者:赵磊转载 2012-03-30 15:22:53 · 579 阅读 · 0 评论 -
基于linux2.6.16的nand驱动开发(三)
第三部分:根据sep4020编写具体nand驱动sep4020是一款非常好优秀的arm720T芯片,以下介绍一下sep4020的nand驱动编写 1. sep4020的nand控制器只支持dma搬运,这也是考虑到一般对nand进行读写都是一页一页的,所以利用dma可以有效的提高效率。DMA也带了一个比较重要的问题,DMA的源和目的需要用实地址,因为DMA不走cpu,在这转载 2012-04-16 14:20:24 · 635 阅读 · 0 评论 -
基于linux2.6.16的nand驱动开发(一)
花了近三个星期,终于和阿虚一起将sep4020上的nand驱动给搞定了。 第一部分:MTD首先是花了好几天来了解nand以及在linux下nand的开发,在linux中使用了一个mtd层来作为具体的硬件设备驱动和上层文件系统的桥梁。.mtd给出了系统中所有mtd设备(nand,nor,diskonchip)的统一组织方式。使用mtd层的好处有:●1.我们要做mtd设备的驱动模块转载 2012-04-16 14:12:45 · 631 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(五)
“小王,告诉你一个好消息,最难理解的部分不知不觉中已经讲完了,今天的课程就简单多了,而且最重要的是咱们的Linux设备驱动核心理论课也差不多了…”“最难的部分?已经讲完了?我咋没感觉呢..你讲的真是太好了,太通俗易懂了,太..”小王调皮的说。“切,就你嘴甜,我还不知道你啊,小脑筋..”我白了小王一样。 那么今天呢?今天就讲讲IO内存静态映射。在将Linux移植到目标电路板中,通常会转载 2012-04-20 10:25:01 · 1862 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(一)
“小王,今天咱们开始讲有关内存和I/O访问的内容,心里先要有点低,这部分内容还是有点烦,有点难的哦”说着话,我心里都没底,怕吓着小王,不瞒你说,当时看这部分,我可是没少费劲。“哦,那咋办,不能不学是不?没事,有小涛哥在,俺就不怕”小王信心十足的说。“哦!看不出来,还让你来安慰我了”看着小王这充满信心的样子,我也没啥顾虑了。好了,深吸一口气,开始今天的课程。 我们知道,在X86中,有转载 2012-04-20 10:21:15 · 1871 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(六)
“小王,再告诉你一个好消息,今天是咱们设备驱动程序核心基础理论的最后一节课了,战斗就已经到了最后一刻了,开心不”我眉飞色舞的对小王说。“嗯,开心,我挣扎许久了,终于结束了,只是..”小王伤感的说“只是我觉得怎么能一下就没了呢, 心里空荡荡的”.“没关系的…”看着小王噘着嘴调皮而又可爱的样子,我也心软了”核心的理论是讲完了,但你不是没动过手吗,还有很多路要走呢..我还舍…”我一把蒙住自己的嘴转载 2012-04-20 10:27:04 · 2009 阅读 · 0 评论 -
Linux内核开发之中断与时钟(一)
“小王,醒醒,开始上课了,今天咱们开始讲中断,这可是高级东西,错过不补哈”我使劲推着睡梦中的小王。“嗯?感情好啊,快点,快点”小王一听有新东西讲,像打了鸡血似的兴奋,连我都怀疑起她是不是性格中喜新厌旧。不管那么多了,我讲我的,她厌她的… 啥叫中断?就是指cpu在执行过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU有返回原程序被中断的位置并继转载 2012-04-20 09:40:22 · 1887 阅读 · 0 评论 -
Linux对I/O端口资源的管理(ZZ)
几乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。 有些体系结构的CPU(如,转载 2012-04-19 16:40:44 · 1616 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(二)
“小涛哥,咱们说Linux设备驱动程序说了那么久,怎么从来不说实际设备呢,顶多就说了下内存,总感觉驱动程序是和设备分离的,怎么关联起来..”小王思索着。“不错,这也正是这次讲课的内容,设备I/O端口与I/O内存的访问”我啊,禁不住拍拍她的头。 对于一块实际的设备而言,通常会提供一组寄存器来用于控制设备,读写设备和获取设备状态,也就是我们常说的控制寄存器,数据寄存器和状态寄存器。这些寄存器转载 2012-04-20 10:22:12 · 1839 阅读 · 0 评论 -
Linux内核开发之中断与时钟(四)
“小王,小王,今天可是这一章节最后一节了,知识点咱们前边都讲过了,今天主要是给你用前边的东西讲一个实际例子---秒字符设备驱动程序” 这个驱动程序会在被打开的时候初始化一个定时器并将其添加到内核定时器链表中,每秒输出一次当前的jiffies,这意味着,定时器处理函数中每次都要修改新的expires。不多说了,看代码分析:#include …//必要的系统头文件#define SECO转载 2012-04-20 09:57:03 · 1684 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(四)
时间:晚上7点地点:寝室中..“小王,今天就不多话了,接着昨天没讲完的,不然连不起来了,都..”我催促着。 上节讲到kmalloc()申请的内存若要被映射到用户空间可以通过mem_map_reserve()设置为保留后进行。具体怎么操作呢,给你一个模版吧:// 内核模块加载函数int __init kmalloc_map_init(void){ ../申请设备号,转载 2012-04-20 10:24:19 · 1878 阅读 · 0 评论 -
Linux内核开发之内存与I/O访问(三)
“小王,不瞒你说,我现在是悲喜交加啊,悲的是:这最后一章,我讲的是胆颤心惊(以前自己都没学好,现在也算还账了),喜的是每讲一张,我知道离结束就近了一点,赶快把这个东西过掉,进入下一环节,那又是我牛皮吹破天的时代了”看着小王期盼和怀疑的眼神,我,昔日的风采也不见了。“没事的,小涛哥,其实说真的,不是我安慰你哈,从开始我什么都不懂,到现在我也算个入门级的高手了,都是你一手带过来的,我已经对你推崇备转载 2012-04-20 10:23:14 · 1825 阅读 · 0 评论 -
Linux内核开发之中断与时钟(三)
晚上7点10分.. “小涛哥,这章不是叫Linux设备驱动程序之中断与时钟,前边你讲了中断,还给了我很多模版,我都看懂了,这次是不是要开始讲时钟了..”“真聪明,越来越喜欢你这聪明的样子了,说的不错,今天就要开始一个新的模块--内核时钟”我很少夸人,为啥今天夸她呢了,呵呵. 定时器,意思大家都明白,我就不说了,要是不明白,把它想成个闹钟总可以吧.. 定时器分为硬件和软件定时器,转载 2012-04-20 09:50:21 · 1645 阅读 · 0 评论 -
Linux内核开发之中断与时钟(二)
“小涛哥,快醒醒,快醒醒..”小王使劲推着睡梦中的我,“你不是说今天要讲昨天有关的典型模板实例吗…”“啊?小姐啊,现在才早上8点,还让人睡觉不,别吵”我一头钻进被子里说。“不管,谁让你昨天不说完,还卖个小关子,害我昨天晚上都没睡好,想了一晚上…”我揉揉蒙蒙的眼说:“行,权当看在你渴求的心情上,但只此一次,下不为例,我还想好好睡懒觉呢..”昨天我们讲了有关中断方面的东西,鉴于小王你不转载 2012-04-20 09:46:10 · 1593 阅读 · 0 评论 -
Linux对I/O端口资源的管理(ZZ)
几乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。 有些体系结构的CPU(如,转载 2012-04-19 16:55:45 · 1595 阅读 · 0 评论 -
linux NAND驱动之五:NAND驱动中probe和nand_chip结构体
在基于MTD 的NAND driver 的probe 函数中,主要可以分为两部分内容,其一是与很多外设driver 类似的一些工作,如申请地址,中断,DMA 等资源,kzalloc 及初始化一些结构体,分配DMA 用的内存等等;其二就是与MTD 相关的一些特定的工作,在这里我们将只描述第二部分内容。(1)probe 函数中与MTD 相关的结构体 在probe 函数中,我们需要为三转载 2012-04-16 15:40:03 · 1909 阅读 · 0 评论 -
写一个块设备驱动 9
第 9章 +---------------------------------------------------+ | 写一个块设备驱动 | +---------------------------------------------------+ | 作者:赵磊转载 2012-03-30 15:17:53 · 628 阅读 · 0 评论 -
写一个块设备驱动 7
第 7章 +---------------------------------------------------+ | 写一个块设备驱动 | +---------------------------------------------------+ | 作者:赵磊转载 2012-03-30 15:16:08 · 476 阅读 · 0 评论 -
写一个块设备驱动 2
第 2章 +---------------------------------------------------+| 写一个块设备驱动 | +---------------------------------------------------+ | 作者:赵磊转载 2012-03-30 15:07:41 · 564 阅读 · 0 评论 -
如何编写linux下nand flash驱动-2
【Nand Flash引脚(Pin)的说明】图3.Nand Flash引脚功能说明上图是常见的Nand Flash所拥有的引脚(Pin)所对应的功能,简单翻译如下:1. I/O0 ~ I/O7:用于输入地址/数据/命令,输出数据2. CLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能3.转载 2012-03-30 13:37:05 · 601 阅读 · 0 评论 -
基于MTD的NAND驱动开发(三)
五、NAND驱动中的probe函数 对于很多嵌入式Linux的外设driver来说,probe函数将是我们遇到的第一个与具体硬件打交道,同时也相对复杂的函数。而且根据我的经验,对于很多外设的driver来说,只要能成功实现probe函数,那基本上完成这个外设的driver也就成功了一多半,基于MTD的NAND driver就是一个典型的例子。稍后就可以看到,在NAND driver的pro转载 2012-03-29 14:46:37 · 468 阅读 · 0 评论 -
基于MTD的NAND驱动开发(二)
四、基于MTD的NAND驱动架构 1、platform_device和platform_driver的定义和注册 对于我们的NAND driver,以下是一个典型的例子: static struct platform_driver caorr_nand_driver = { .driver = {转载 2012-03-29 14:45:27 · 492 阅读 · 0 评论 -
基于MTD的NAND驱动开发(一)
○、说明 大约用了两个礼拜不到的时间为公司的IPcamera系统写了基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该驱动的支持下跑cramfs和jffs2文件系统,另外,该驱动也可以同时支持small page(每页512 Byte)和big page(每页2048 Byte)两种NAND芯片。在此整理一下与NAND驱动相关的概念,结构体,驱动框架和流程,同时转载 2012-03-29 14:43:59 · 560 阅读 · 0 评论 -
基于MTD的NAND驱动开发(完)
六、NAND驱动中的坏块管理 由于NAND Flash的现有工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,因此在NAND芯片出厂的时候,厂家只能保证block 0不是坏块,对于其它block,则均有可能存在坏块,而且NAND芯片在使用的过程中也很容易产生坏块。因此,我们在读写NAND FLASH 的时候,需要检测坏块,同时还需在NAND驱动中加入坏块管理的功能转载 2012-03-29 14:47:47 · 603 阅读 · 0 评论 -
UBOOT中NAND操作
loadb 20000000 //(1)nand erase 0x100000 0x200000 //(2)nand write 0x20000000 0x100000 0x200000-//(3)nand read 0x20000000 0x100000 0x200000-//(4)tftp 0x802000转载 2012-02-23 17:07:21 · 829 阅读 · 0 评论 -
在Ubuntu Linux环境下将硬盘格式化为NTFS分区
在Ubuntu Linux环境下将硬盘格式化为NTFS分区:安装ntfsprogs 1.sudo apt-get install ntfsprogs使用下面命令中任何一个格式化 sudo mkfs -t ntfs /dev/sdb1或sudo mkfs.ntfs /dev/sdb1 或sudo mkntfs /dev/sdb1如果需要转载 2012-02-03 16:43:59 · 9547 阅读 · 0 评论 -
V4L2 编程
V4L2编程1.定义V4L2(VideoFor Linux Two)是内核提供给应用程序访问音、视频驱动的统一接口。 2.工作流程:打开设备->检查和设置设备属性->设置帧格式->设置一种输入输出方法(缓冲区管理)->循环获取数据->关闭设备。 3.设备的打开和关闭: #include int open(const char*device_name, i转载 2011-12-23 09:38:12 · 596 阅读 · 0 评论 -
关于Linux的视频编程(v4l2编程)
前言:目前正在忙于ARM平台的Linux应用程序的开发(其实是刚刚起步学习啦)。底层的东西不用考虑了,开发板子提供了NAND Bootloader,和Linux 2.6的源码,而且都编译好了。自己编译的bootloader可以用,但是Linux编译后,文件很大,暂且就用人家编译的系统,先专心写应用程序 吧。。正文:要做的任务是,把一块板子上的摄像头采集的图像和声卡采集的声音(貌似很啰嗦转载 2011-12-23 10:19:42 · 560 阅读 · 0 评论 -
基于V4L2的视频驱动开发
V4L2是V4L的升级版本,为linux下视频设备程序提供了一套接口规范。包括一套数据结构和底层V4L2驱动接口。1、常用的结构体在内核目录include/linux/videodev2.h中定义struct v4l2_requestbuffers //申请帧缓冲,对应命令VIDIOC_REQBUFS struct v4l2_capability转载 2011-12-21 14:23:06 · 578 阅读 · 0 评论