天桥陨石分享 http://blog.sciencenet.cn/u/chrujun 让地球物理仪器飞起来

博文

LINUX下字符设备、块设备和网络接口

已有 12334 次阅读 2010-6-6 01:10 |个人分类:地球物理及仪器|系统分类:科研笔记| Linux, 字符设备, 块设备, 网络接口, 驱动程序

LINUX下字符设备、块设备和网络接口

仇洁婷,陈儒军

       1)块设备
块设备以数据块的形式存放数据,如NAND Flash以页为单位存储数据,并采用mount方式挂载块设备。块设备还需通过建立Flash文件系统,如YAFFSJFFS等,用于规范文件和目录在存储介质上的组织。这类型的设备已经在Linux内核中加载,不需要再做移植。
       2)网络设备
网络设备是面向数据包的接收和发送而设计的。它并不对应于文件系统(/dev目录下)的节点,而是由系统分配一个唯一的名字(如eth0)。
Linux-2.6.21中,对本系统的DM9161网络芯片有很好的支持,但是本系统网络芯片DM9161的中断引脚MDINTR#ARMPB29相连。而在Linux-2.6.21内核中,网络驱动定义的中断引脚是PC4MDINTR是用于反应网络的连接状态,当网络断开或连接时,都会产生一个中断响应。因此需要对该管脚定义其进行修改。
       /linux-2.6.21/arch/arm/mach-at91/board-dk.c文件中,修改dk_eth_data结构体对phy_irq_pin元素的定义。将
       .phy_irq_pin = AT91_PIN_PC4,
       改为.phy_irq_pin       = AT91_PIN_PB29
       最后由at91_add_device_eth(&dk_eth_data);将其加入网络驱动中。
       3)字符设备
       字符设备指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位。除了网络设备外,字符设备和块设备都是通过文件系统的系统调用接口open()close()write()read()等函数既可以访问,应用程序可以通过打开设备文件(如UART0设备:/dev/ttyS0)来访问该设备。
编写Linux驱动程序,是为了尽可能发挥硬件的作用以提高性能,但其难点不是在于对硬件的具体操作,而是需要了解清楚现有驱动程序的框架,并在这个框架中找到修改的位置,加入与设计相关的硬件。
可将编写Linux字符设备驱动程序的流程总结如下:
Ø 查看原理图、数据手册,了解设备的操作方法;
Ø 在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始;
Ø 实现驱动程序的初始化:比如想让内核注册这个驱动程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序;
Ø 设计所要实现的操作:比如openclosereadwriteioctl等函数;
Ø 实现中断服务(中断并不是每个设备驱动所必须的);
Ø 编译该驱动程序到内核中,或者用insmod命令加载;
Ø 测试驱动程序。
在本系统中,用到的字符设备驱动程序主要有:
1UART串口驱动程序
2SPI串口外围设备驱动程序
3RTC实时时钟驱动程序
4LM75温度传感器驱动程序
5USB驱动程序
6SSC高速同步串行驱动程序
Linux2.6内核对上述前5个驱动程序都有源代码,只需要根据硬件需求进行相应的修改。但是没有对AT91RM9200芯片的SSC接口驱动程序的支持,需要自行编写相应的驱动程序。


https://blog.sciencenet.cn/blog-39626-332581.html

上一篇:Linux设备驱动移植概述
下一篇:UART串口驱动程序移植
收藏 IP: .*| 热度|

5 申瑞杰 侯成亚 孙静宇 姚红春 邓景华

发表评论 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 01:54

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部