[摘至嵌入式linux设备驱动开发详解]

1.4 嵌入式linux驱动程序

1.4.1 嵌入式linux的内核空间和用户空间

目前,各种处理器都能防止资源的未经授权访问,包括嵌入式处理器。一般都是给CPU划分不同的操作模式。不同的模式有不同的作用,某些操作不允许在低级别模式使用。

内核态和用户态是在硬件上的习惯说法,两个状态分别对应处理器的两个不同操作模式。例如,ARM中的用户态对应usr模式,而内核态对应svc模式。内核态可以控制内存映射方式、特殊寄存器、中断和DMA等,而用户态则不可以。内核空间和用户空间是软件上的习惯说法,两个空间分别引用不同的地址映射。程序代码使用不同的地址空间。如果想直接通过指针把地址空间的数据地址传到内核是不可能的,需要先通过地址转换将用户态地址转换为内核态地址。

嵌入式linux利用系统调用和硬件中断来完成从用户空间到内核空间的控制转移。同时,嵌入式linux提供了一系列函数完成不同空间地址的转换,如get_user、put_user、copy_from_user、copy_to_user。

1.4.2 嵌入式linux的文件系统

操作系统最重要的两部分:进程管理和文件系统。linux从一开始就把外部设备全部当成文件处理。凡是可以产生或接受消息的都是文件。嵌入式中常用的文件系统都是普通linux文件系统的简化版,为了适应嵌入式的特点,包括有cramfs、romfs、jffs、jffs2等。

linux支持很多不同种类的文件系统,甚至设备也被当做文件处理。而要支持这样种类繁多的文件系统,必须将不同文件系统的操作和控制纳入一个统一的框架之中、使得用户可以通过统一的标准来调用不同的文件系统,而感觉不到其中的差异,甚至设备的调用也是通过文件调用的标准来实现的。而这样的功能的实现是通过虚拟文件系统来实现的(virtual filesystem switch)。

VFS是物理文件系统和服务之间的接口层,对用户程序屏蔽掉不同文件系统的实现细节,仅给用户一个统一的、抽象、虚拟的文件系统接口,使得不同文件系统在linux的其他进程看来都是相同的。VFS不是一个实际的文件系统,它随系统启动产生,关闭结束。仅存于内存中,不占外存空间,主要功能有:记录可用的文件系统类型;将设备与文件系统对应联系起来;处理面向文件的通用操作。

有了VFS,仅通过一系列的标准的系统调用便可以实现所需要的操作,如read()、write()、lseek()等。这些操作主要通过一个f_op结构指针指向具体的file_operations结构体来实现系统调用的转换。每个文件系统都有自己的file_operations结构体,内部几乎全都是函数指针,相当于一个函数跳转表。f_op指向了特定的file_operations就等于指向了特定的文件系统。

1.4.3 嵌入式linux的设备管理

设备管理,即输入/输出系统是操作系统的重要组成部分。相比于进程管理、内存管理和文件系统管理,设备管理稍显复杂。主要是因为多种多样的设备同时存在,给制定一个通用的解决方法带来了极大的难度。尽管设备种类繁多,为了便于使用,下层必须使用一个统一的设备接口,在linux下,硬件设备也是被当做文件系统来处理的,只是这种文件比较特殊,叫做设备文件。通常这些设备文件存放在文件系统的/dev目录下。

linux通过主次设备号来联系驱动程序和设备文件节点。系统依靠主设备号标识驱动程序,所以同类的设备的主设备号是唯一的。在2.4版本以前的内核一直都是利用设备类型和设备的主次设备号管理设备的方法。在引入了devfs设备文件系统之后,传统方式和devfs管理方式同时发挥作用。传统的方式会受到设备数量的限制(最多254个),而采用devfs之后就没有这个问题了。实现效果上,两者并没有很大的区别。

转载于:https://www.cnblogs.com/scnutiger/archive/2009/10/24/1589045.html

嵌入式linux的驱动程序相关推荐

  1. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

  2. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  3. 嵌入式Linux设备驱动程序:发现硬件配置

    嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...

  4. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  5. CAN总线在嵌入式Linux下驱动程序的实现

    引文出处:https://www.cnblogs.com/general001/articles/2342728.html 1引言 基于嵌入式系统设计的工业控制装置,在工业控制现场受到各种干扰,如电磁 ...

  6. 嵌入式Linux设备驱动程序开发指南14(Linux设备驱动使用DMA)——读书笔记

    Linux设备驱动使用DMA 十四.Linux设备驱动使用DMA 14.1 简介 14.2 缓存一致性 14.3 DMA控制器接口 14.4 流式DMA模块 14.4.1 sdma_sam_m2m.c ...

  7. 嵌入式Linux设备驱动程序开发指南3(构建Microchip SAMA5D2嵌入式 Linux系统)——读书笔记

    构建Microchip SAMA5D2嵌入式 Linux系统 三.构建Microchip SAMA5D2嵌入式 Linux系统 3.1 获取驱动代码 3.2 配置编译 3.2.1 bootstrap编 ...

  8. 嵌入式linux设备驱动程序是,详解嵌入式Linux设备驱动程序

    随着嵌入式技术的发展,随着嵌入式技术的发展,嵌入式系统将广泛地应用于人 类生活的方方面面.如:基于嵌入式工NTERNET网络的地球电子皮肤,可以嵌入到牙齿 上的手机都在研发之中.著名嵌入式系统专家沈绪 ...

  9. 嵌入式Linux设备驱动程序开发指南17(IIO子系统一)——读书笔记

    IIO子系统一 十七.IIO子系统(一) 17.1 简介 17.2 数模转换--DAC实验 17.2.1 IIO缓冲区 17.2.2 触发器 17.2.3 工业I/O事件 17.2.4 iio工具 1 ...

最新文章

  1. java英文字符编码_Java邮件编码非英文字符
  2. QPS过万,redis大量连接超时怎么解决?
  3. 扎克伯格亲自做了26张PPT,员工效率提10倍,已被疯狂传阅
  4. E - 秋实大哥与战争
  5. python正则表达式指南_Python正则表达式指南(转)
  6. SQL Server数据库自增字段正确的插入值的描述
  7. 为什么写公众号,为什么改名字
  8. instagram图片大小_一个开源的Instagram桌面照片上传器
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的二手电动车交易系统
  10. Minkels公司在欧洲推出迷你数据中心产品
  11. Web浏览器已经限制此文件显示
  12. android 自定义地图标注,Android高德地图自定义Markers【原创】
  13. vep文件如何转换mp4_VEP视频文件怎么转换成普通视频文件?
  14. 我为什么要弃医从(码)农
  15. Canvas递归画一棵树
  16. ubuntu 给meld加上右键菜单
  17. 【keepass】密码管理软件keepass的安全风险分析,如何在使用keepass的过程中避免泄露数据库信息和密码?
  18. 支持掉线自动报警Profinet远程分布式IO模块
  19. CFile、CStdioFile、FILE和其他文件操作
  20. 写给VC++ Windows开发的初学者 一片不错的博文

热门文章

  1. 为什么感觉每年手机都在升级CPU,但始终都会卡顿?
  2. uni-app目录结构介绍
  3. html java简单示例,HtmlUnit的简单例子
  4. 如何使用PowerShell在Azure中创建SQL虚拟机
  5. power bi 地图_如何使用Power BI创建地理地图-填充地图和气泡地图
  6. team explorer_我的Team Explorer 2015在哪里?
  7. 急救模式下安装rpm包
  8. Cash Machine POJ - 1276
  9. sys模块,subprocess模块
  10. UIPikerView的属性