
linux-设备驱动
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Uboot之一 ~~~ 板级的移植
刚开始做Uboot的移植,发现移植的任务量也是很大的。所以把每个主要的阶段分成一块,希望自己能坚持着写完。实验环境:win7 + Ubuntu10.04交叉编译器:arm-linux-gcc-4.3.2开发板:TQ2440 首先,分析Uboot已经支持的开发板,选择出于硬件配置最接近的开发板。首选MCU(微控制单元,micor control unit,集成了外围器件)相同的开原创 2011-11-07 17:28:16 · 946 阅读 · 0 评论 -
原子操作
原子操作,顾名思义,就是说像原子一样不可再细分.一个操作是原子操作,意思就是说这个操作是以原子的方式被执行,要一口气执行完,执行过程不能够被OS的其他行为打断,是一个整体的过程,在其执行过程中,OS的其它行为是插不进来的。在linux中提供了两种形式的原子操作:一种是对整数进行的操作一种是对单独的位进行操作原创 2012-05-21 20:46:31 · 710 阅读 · 0 评论 -
poll机制分析(韦东山)
poll机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析sys_poll,即可理解poll机转载 2012-05-21 20:48:23 · 1843 阅读 · 2 评论 -
应用程序和内核模块的区别
1.应用程序是从头到尾执行单个任务;模块却只是预先注册自己以便服务于将来的某个请求, 其中,函数init_module(模块的入口)的任务是为以后调用模块函数预先做准备,函数cleanup_module(模块的第二入口)是在模块卸载时调用。2.应用程序可以调用它未定义的函数,因为在连接过程能够解析外部引用从而使用适当的函数库; 模块仅仅被连接到内核,因此它仅能调用有内核导出的函数(原创 2012-05-21 20:47:03 · 2057 阅读 · 0 评论 -
免锁算法----原子变量
原子变量完整的锁机制对一个简单的整数来讲显得浪费。内核提供了一种原子的整数类型,称为atomic_t,定义在。原子变量操作是非常快的, 因为它们在任何可能时编译成一条单个机器指令。以下是其接口函数: void atomic_set(atomic_t *v, int i); /*设置原子变量 v 为整数值 i.*/atomic_t v = ATOMIC_INIT(0); /*编原创 2012-05-21 20:46:07 · 988 阅读 · 0 评论 -
IO端口与IO内存
IO端口访问的一种方式是直接使用IO端口操作函数,步骤:申请,操作,释放。IO端口访问的另一种方式是将IO端口映射为内存进行访问。步骤:申请,ioport_map,操作,ioport_unmap,释放。IO内存的访问步骤:申请,ioremap,操作,iounmap,释放。将设备地址映射到用户空间:void *mmapmunmap原创 2012-05-21 20:45:37 · 639 阅读 · 0 评论 -
Completion
completion是一种轻量级的机制,它允许一个线程告诉另一个线程某个工作已经完成。completion的典型应用是模块退出时的内核线程终止。代码必须包含。使用的代码如下: 1.创建completion DECLARE_COMPLETION(my_completion);/* 创建completion(声明+初始化) */ 如果必须动态的创建和初原创 2012-05-21 20:43:08 · 818 阅读 · 0 评论 -
cdev_alloc和cdev_init
内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj; // 每个 cdev都是一个 kobjectstruct module *owner; //指向实现驱动的模块const struct file_op转载 2012-03-30 21:27:19 · 2819 阅读 · 0 评论 -
Uboot之四下载sdram运行,ok。
1.首先上图,本人经过一周左右的时间,参考网上众多资料,主要参考《uboot1.1.6到TQ2440的文档》,首次修改成功uboot-2010.06。。2,这部分大致说明需要修改的文件及所在位置,至于为什么这样修改,以及需要查看的相关手册,不在叙述。修改SDRAM的配置# vi board/samsung/Nissa2440/lowlevel_init.S 54 #defin原创 2012-03-07 17:15:14 · 1384 阅读 · 0 评论 -
ROM、RAM、DRAM、SRAM、FLASH.....的区别?
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常转载 2012-03-06 16:36:15 · 675 阅读 · 0 评论 -
Uboot之三 ~~~CPU的配置
预备知识:理解跳转指令b和ldr,其形式如下:b step1 //B 是最简单的分支。一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的地址,从那里继续执行。 注意存储在分支指令中的实际的值是相对当前的 R15(PC) 的值的一个偏移量,而不是一个绝对地址。原创 2011-11-07 22:22:35 · 1392 阅读 · 0 评论 -
Uboot之二 ~~~ Uboot.lds的分析
嵌入式linux系统主要有两部分组成:linux内核和linux根文件系统。而linux内核镜像不具备自启动,因为内核镜像的起始地址没有异常向量表,还有内核镜像的起始函数需要r0,r1,r3这3个寄存器初始化相应的值。所以,linux内核镜像需要被动加载,而完成此任务的就是bootloader。bootloader起始可以分为boot和loader两部分:在boot阶段完成的任务有:1原创 2011-11-07 20:17:50 · 945 阅读 · 0 评论 -
linux_ioctl与内核交换数据
1. 前言 使用ioctl系统调用是用户空间向内核交换数据的常用方法之一,从ioctl这个名称上看,本意是针对I/O设备进行的控制操作,但实际并不限制是真正的I/O设备,可以是任何一个内核设备即可。2. 基本过程 在内核空间中ioctl是很多内核操作结构的一个成员函数,如文件操作结构struct file_operations(include/linux/fs.h)、协转载 2012-05-21 20:47:47 · 1214 阅读 · 0 评论