首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设备驱动程序与/dev + glibc接口的比较

设备驱动程序与/dev + glibc接口的比较
EN

Stack Overflow用户
提问于 2017-10-24 14:54:11
回答 2查看 114关注 0票数 1

我希望从I2C中读取处理器,并将数据存储在嵌入式系统中。当我一直在研究解决方案时,我已经被介绍给Linux设备驱动程序以及GNU C库。对于许多操作,您可以使用基本的Linux驱动程序执行,也可以使用基本的glibc系统调用来执行。我有点搞不懂什么时候应该用一个而不是另一个。这两个接口都可以从用户空间访问。

什么时候应该使用内核驱动程序来访问像I2C或USB这样的设备,以及何时应该使用GNU库系统功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-24 16:19:19

GNU库将函数调用(如readwriteioctl )直接转发给内核。这些函数只是系统调用的非常薄的包装器。您可以使用内联程序集单独调用内核,但这很少有帮助。因此,在这个意义上,所有与内核驱动程序的交互都将经历这些glibc函数。

如果您有关于特定接口和它们的权衡的问题,您需要明确地命名它们。

票数 0
EN

Stack Overflow用户

发布于 2017-10-26 04:23:33

手臂:

特权状态被内置到处理器中,并通过程序集命令进行更改。存储器保护单元(芯片的一部分)被配置为根据特权状态不允许访问任意内存范围。

在Linux内核中,所有物理内存都是特权的--用户空间中的内存地址是虚拟(假)地址,在特权模式下转换为真实地址一次。

因此,要访问特权内存范围,机制就像一个函数调用--设置指示需要什么的参数,然后生成一个('SVC')- -一个中断函数,它从用户空间删除程序的控制,将其交给内核。内核查看您的参数并执行所需的操作。

标准库基本上可以简化整个过程。

驱动程序创建物理内存地址的接口,并通过SVC调用和传递的任何“参数”提供API。

如果物理内存不是由驱动程序保留的,内核通常不允许任何人访问它。

访问您没有特权的物理内存将导致“总线错误”。

顺便说一句:您可以使用像UIO这样的驱动程序将物理内存放入用户空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46913756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档