linux设备驱动
control_tech
电子科学与技术专业, 2年单片机开发,2年嵌入式开发,熟悉ARM体系结构,熟悉linux下驱动程序开发和相关应用程序开发。
熟悉TCP/IP协议栈,linux下的网络编程。
在多款cpu下开发过产品,移植和编写过驱动,如pxa270,at9261,sigma8655,s3c2440, s3c2410,VT8430等
展开
-
使用 watchdog 构建高可用性的 Linux 系统及应用
Linux 在不同领域如电信、终端便携设备等得到广泛应用,不同领域的应用对 Linux系统也提出相应的需求。Carrier Grade Linux 是 OSDL(Open Source Development Lab)发布的电信级 Linux 的标准,在系统可用性这部分指出 Linux 必须支持 watchdog 机制。Linux 内核从 1.3.51 版本开使提供硬件、软件 watchdog 驱转载 2010-01-19 11:27:00 · 357 阅读 · 0 评论 -
Framebuffer, 原理
上一篇文章居然加精了。现在继续将自己收集的一些资料和工作中的心得总结贴出来,我很多工作可能和大家没多大的通用性,所以只能挑有限的一些文章。如果有同学是做音视频编解码或图像处理的,可以交流下,我现在业余做这个。上年做过fb的驱动,收集了不少这方面的文章,不过建议大家还是要多看内核驱动代码,read the fucking code是真理。代码为主,其他为辅。首先第一篇是《Framebuffer原理、转载 2010-05-05 15:47:00 · 1242 阅读 · 0 评论 -
linux下 s3c2440 lcd驱动移植详解
1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 2. S3C2440内部LCD控制器结构图:我们根据数据手册来描述一下这个集成在S3C2440内部的LCD控制原创 2010-06-30 18:50:00 · 4170 阅读 · 1 评论 -
S3C2440 平台的spi ad7888驱动程序
首先定义一个struct ad7888 {struct cdev cdev;struct spi_device *spi;struct semaphore lock;};来描述我的设备附加信息先理下逻辑:[1]module_init(spi_ad7888_init); [2]static int __init spi_ad7888_init(void) {}(在这个函数里应实现 初始化主设备原创 2010-05-07 17:05:00 · 861 阅读 · 0 评论 -
linux-2.6.26下开发marvell 88w8686 wifi驱动
最近在做基于2440+linux下,开发marvell 88w8686驱动 ,因为三月、硬件设计是spi接口,所以我从marvell 官方网站下载SPI 接口的驱动程序src_gspi8686.tar.bz2, 此驱动程序是基于PXA270的,所以需要自己移植到2440平台上,主要有如下工作要做:1.将src_gspi8686 下的 io 文件夹下的gspi.c和gspi.h 这两个文件修改,针对各个具体函数,按照2440 SPI 的时序来编写SPI 驱动2.修改Makefile编译修改过的代码,编译原创 2010-07-06 14:57:00 · 4884 阅读 · 15 评论 -
采用AT88SC系列芯片进行系统加密的原理
简述:机顶盒系统中存在个性化的加密芯片,该加密芯片与CPU进行交互认证,从而控制机顶盒的软件流程,实现系统的防拷贝。该加密芯片内部配置数据基本无法获取,与CPU间通信采用密文方式。安全性较好。机顶盒主程序在启动或运行过程中可以随时唤醒加密认证任务。完成机顶盒产品中芯片(ID)的确认。加密认证任务通过发送一个认证指令,查找加密芯片的存在。下面将利用本加密芯片进行产品加密的最安全模式的原理原创 2010-05-14 09:15:00 · 4070 阅读 · 4 评论 -
加密存储芯片AT88SC1616的原理和应用技术
摘要:从加密存储芯片AT88SC1616内部结构出发,详细介绍该芯片的功能、特点和基本工作原理;给出通用的硬件接口电路和软件编程实现;讨论AT88SC1616在单处机与嵌入式系统中的应用。 关键词:加密存储芯片 AT88SC1616 I2C总线 嵌入式系统随着嵌入式产品性能的日益提高,嵌入式系统在消费类电子、汽车、工业控制和通信等行业迅速普及;但由于嵌入式系统开发成本高、研发周期长,使得关转载 2010-05-14 18:39:00 · 1193 阅读 · 1 评论 -
高手博客
chenzhufly.cublog.cn 打开链接 2007-12-19 09:18 刘洋打开链接 2008-09-13 23:19 章鱼的窝打开链接 2007-09-16 14:29 ly44770的博客打开链接 2007-09-13 21:12 NOR Flash - FLASH原创 2010-05-15 14:59:00 · 560 阅读 · 0 评论 -
S3C2440上 MMC/SD卡驱动实例开发讲解(一)
一、开发环境主 机:VMWare--Fedora 9开发板:Mini2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2二、MMC/SD介绍及SDI主机控制器 首先我们来理清几个概念:MMC:(Multi Media Card)由西门子公司和首推CF的SanDisk于1997年推出的多媒体记忆卡标准。SD:(Secure Digital Memory Card)由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制的新一转载 2010-07-16 23:50:00 · 1006 阅读 · 0 评论 -
SM501显卡驱动的移植(linux.2.6.18)
<br />本文从三个方面说明一下SM501显卡驱动在2440+2.6.18环境下的移植:<br />1 硬件情况。<br />2 移植过程<br />3 驱动测试<br />一、硬件情况:<br />第一次接触到显卡编程,有点不太适应。SM501的Datasheet写的太简略,个人觉得有用的基本上就是两个方面:<br />1 内存映射模式。<br />2440与SM501连接模式为2440作为HOST有独立的SDRAM,SM501除了可以访问HOSTSDRAM外,还拥有8MB的本地内存转载 2010-06-23 18:00:00 · 565 阅读 · 0 评论 -
PCI、PCI-X、PCI-E区别
PCI、PCI-X、PCI-E区别一、PCI总线PCI总线标准是由PCISIG于1992年开发的,已经有超过8年的历史。 PCI的总带宽=33MHz×32BIT/8=133MB/S。二、PCI-X总线PCI-X是在增加了电源管理功能和热插拔技术的PCI V2.2版本的基础上,将PCI的总带宽由133MB/S增至1.066GB/s。同时它还采用了分离实务即多任务的设计,允许一个正在向转载 2012-01-11 13:29:22 · 457 阅读 · 0 评论 -
S3C2440 LCD驱动(FrameBuffer)实例开发讲解
1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 2. S3C2440内部LCD控制器结构图:我们根据数据手册来描述一下这个集成在S3C2440内部的原创 2010-06-30 18:06:00 · 165 阅读 · 0 评论 -
Linux驱动开发必看:详解神秘内核
Linux驱动开发必看:详解神秘内核 在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念。我们将学习内核定时器、同步机制以及内存分配方法。不过,我们还是得从头开始这次探索之旅。因此,本章要先浏览一下内核发出的启动信息,然后再逐个讲解一些有意思的点。 2.1 启动过转载 2010-04-04 10:27:00 · 1449 阅读 · 0 评论 -
中断与软中断
在分析linux内核的中断,软中断时,先应该明确这样一个派生关系:irq ==> softirq ==> tasklet ==> bottom half ==> task queue----------------------------------------------|==> timer中断是最初的原动力。分时系统依赖于时钟中断来定时重新调度可以运行的程序。外设通过中断来通知cpu处转载 2010-01-19 11:37:00 · 517 阅读 · 0 评论 -
bus,device,driver三者关系
bus,device,driver三者关系bus:总线作为主机和外设的连接通道,有些总线是比较规范的,形成了很多协议。如PCI,USB,1394,IIC等。任何设备都可以选择合适的总线连接到主机。当然主机也可能就是CPU本身。内存也是通过BUS连接到主机的,可内存使用的总线不是外设总线,因此和内存使用相同类型的总线的设备,谈及BUS比较含糊。一块网卡在嵌入式开发中,直接通过内存总线接入到CPU转载 2010-01-19 14:07:00 · 226 阅读 · 0 评论 -
pxa270 GPIO pins configuration and usage
IntroductionAs part of my work at 8D Technologies, I am responsible for maintaining the ARM linux kernel we use on our boards. This involves writing drivers for our hardware, debugging problems原创 2009-12-19 10:22:00 · 895 阅读 · 0 评论 -
SPI设备的驱动 —— 基于多路mcp2515 can控制器
原文:http://blog.chinaunix.net/u1/48790/showart_726816.html今天折腾了一天的SPI设备的驱动加载,甚至动用了逻辑分析仪来查看spi总线的波形,主要包括两个SPI设备,at45db321d和mcp2515,一个是串行的dataflash,一个是can总线设备芯片。前者对于我们来说非常重要,我们可以借转载 2009-12-19 10:25:00 · 1778 阅读 · 0 评论 -
如何坚持嵌入式学习
嵌入式学习是一个漫长的过程,如果你的兴趣不在于嵌入式,而只是为了某些目的而学习,那学习对你来说就是一件枯燥的事情。那么,我们该怎么才能坚持下来,我想你可以每天都读读关于一些令人振奋的名言警句,来提高自己的热情,比如我每日必默读一遍爱迪生的名言:“无论什么时候,不管遇到什么情况,我绝不允许自己有一点点灰心丧气。” 你也试试吧,也许效果不错呢? 而在学习或者转载 2010-02-27 18:06:00 · 468 阅读 · 2 评论 -
在PXA270下 移植mcp2515驱动(两路can)
今天把mcp2515的can总线驱动移植到pxa270上,总体看起来不是很复杂,但也碰到了不少挫折,最终还是解决了,也没算白忙活。为了能够记住做过的驱动,以及便于日后查看,便记了下来,也方便遇到此类问题的朋友,尽快得到答案。mcp2515.c文件已经写好了吧,网上可以下载的很多。可以在各种平台下移植,它是基于平台设备的驱动,基本不用改动,只要根据 原原创 2009-12-20 22:24:00 · 985 阅读 · 0 评论 -
从DM9000驱动看platform device与driver的关系(转)
原文:http://blog.csdn.net/lights_joy/archive/2009/06/08/4251003.aspx 内核中的platform driver机制需要将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform device提供的标准接口进行申请并使用。这样可以提高驱动和资源管理的独转载 2009-12-18 20:32:00 · 501 阅读 · 0 评论 -
8250 driver
一:前言 前一段时间自己实践了一下8250 芯片串口驱动的编写。今天就在此基础上分析一下 linux kernel 自带的串口驱动。毕竟只有对比专业的驱动代码才能更好的进步 , 同以往一样,基于 linux kernel2.6.25. 相应驱动代码位于: linux- 2.6.25/drivers/serial/8250.c 。 二:8250 串口驱动初始化 相应的初始化函数为 se原创 2010-03-23 18:23:00 · 940 阅读 · 0 评论 -
linux 设备驱动注册 register_chrdev_region 和 register_chrdev
内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; // 指向散列冲突链表中的下一个元素的指针 原创 2010-04-01 14:02:00 · 1945 阅读 · 0 评论 -
IS_ERR()宏是什么意思
IS_ERR()有一些妙处。内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来。所幸的是,内核返回的指针一般是指向页面的边界(4K边界),即ptr & 0xfff == 0这样ptr的值不可能落在(0xfffff000,0xffffffff)之间,而一般内核的出错代码也是一个小负数,在-1000到0之间,转变成unsigned long,正好在(0xfffff000,原创 2010-04-16 12:38:00 · 804 阅读 · 0 评论