易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux设备 (转)

5.3.2  设备类型分类
纵览linux/drivers目录,大概还有35个以上的子目录,每个子目录基本上就代表了一种设备驱动,有atm、block、char、misc、input、net、usb、sound、video等。这里只描述在嵌入式系统里面用得最为广泛的3种设备。
1.字符设备(char device)
字符设备是Linux最简单的设备,可以像文件一样访问。初始化字符设备时,它的设备驱动程序向Linux登记,并在字符设备向量表中增加一个device_struct数据结构条目,这个设备的主设备标识符用做这个向量表的索引。一个设备的主设备标识符是固定的。chrdevs向量表中的每一个条目,一个device_struct数据结构,包括两个元素:一个登记设备驱动程序名称的指针和一个指向一组文件操作的指针。可以参考的代码是include/linux/ major.h。
一般来说像鼠标、串口、键盘等设备都属于字符设备。
2.块设备(block device)
块设备是文件系统的物质基础,它也可以像文件一样被访问。Linux用blkdevs向量表维护已经登记的块设备文件。它像chrdevs向量表一样,使用设备的主设备号作为索引。它的条目也是device_struct数据结构。与字符设备不同的是,块设备分为SCSI类和IDE类。向Linux内核登记并向核心提供文件操作。一种块设备类的设备驱动程序向这种类提供和类相关的接口。可以参考的代码是fs/devices.c。
每一个块设备驱动程序必须提供普通的文件操作接口和对于buffer cache的接口。每一个块设备驱动程序填充blk_dev向量表中的blk_dev_struct数据结构。此向量表的索引是设备的主设备号。其中blk_dev_struct数据结构包括一个请求例程的地址和一个指针,指向一个request数据结构的列表,每一个都表达buffer cache向设备读/写一块数据的一个请求。
可以参考的源代码是drivers/block/ll_rw_blk.c和include/linux/blkdev.h。
当buffer cache从一个已登记的设备读/写一块数据,或者希望读、写一块数据到其他位置时,就在blk_dev_struct中增加一个request数据结构。每个request数据结构都有一个指向一个或多个buffer_head数据结构的指针,每一个都是读/写一块数据的请求。如果buffer_head数据结构被锁定(buffer_cache),可能会有一个进程在等待这个缓冲区的阻塞进程完成。每一个request数据结构都是从all_request表中分配的。如果request增加到空的request列表中,就调用驱动程序的request函数处理这个request队列,否则驱动程序只是简单地处理request队列中的每一个请求。
块设备驱动程序和字符


相关文档:

解惑—Linux中的地址空间(一)转载

有这么一系列的问题,是否在困扰着你:用户程序编译连接形成的地址空间在什么范围内?内核编译后地址空间在什么范围内?要对外设进行访问,I/O的地址空间又是什么样的?
先回答第一个问题。Linux最常见的可执行文件格式为elf(Executable and Linkable Format)。在elf格式的可执行代码中,ld总是从0x8000000开始安排程序的& ......

Linux USB驱动框架分析上

初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了。好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发。但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货。当然,还会顺带提一下其他的驱动程序写法。
&n ......

Linux内核中用于同步的几种机制集中起来分析

Linux内核中用于同步的几种机制集中起来分析,强调了它们之间在实现和使用上的不同。
  同步通常是为了达到多线程协同的目的而设计的一种机制,通常包含异步信号机制和互斥机制作为其实现的底层。在Linux 2.4内核中也有相应的技术实现,包括信号量、自旋锁、原子操作和等待队列,其中原子操作和等待队列又是实现信号量的 ......

Linux查看硬件信息命令

Linux查看硬件信息命令
1.查看CPU信息
cat /proc/cpuinfo
2.查看内存信息
cat /proc/meminfo
free
vmstat
3.查看硬盘信息
fdisk -l
df -lh
4.查看内核版本信息
cat /proc/version
uname -r
lsb_release -a
5.查看文件占用空间
du
6.查看系统信息
dmesg
7.查看端口信息
netstat
8.查看32位还是64位
ge ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号