首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核、I2C SPI总线和时间片?

Linux内核、I2C SPI总线和时间片?
EN

Stack Overflow用户
提问于 2022-03-13 02:09:06
回答 1查看 68关注 0票数 0

这是一个奇怪的问题,但我在一个关于linux内核驱动程序开发的课堂上,教授无法回答这个问题。

假设我有一个与SPI或I2C总线相连的有限状态机(在现实生活中,这实际上是一个加速度计,但实现并不重要)。如果我为它编写了一个misc字符驱动程序,并使它不受干扰,系统上的任何用户现在都可以访问该设备。

假设我想从这个FSM设备读取200个字节的数据。读取是通过发送数据位置的寄存器地址,并执行连续读取,直到我有我的200个字节(program#1)。

当我知道我的用户级程序正在被分割的时候,混乱就出现了。如果另一个(program#2)用户级程序也要从这个加速度计中请求10个字节,它将寻址并连续读取,直到它有10个字节。

如果program#1在得到时间切片时运行并读取了50个字节,并且program#2被运行到完成,那么当program#1返回时,它所读取的地址被破坏了,并且它从错误的地址读取数据。

时间片对用户是不可见的。据我所知,它们对内核驱动程序代码也是不可见的。有什么机制可以避免这种情况吗?原子读和写将是最有意义的,但这些I2C/SPI设备的CPU标准是缓慢的。我无法想象CPU会一直袖手旁观,仅仅为了确保I2C/SPI读写是原子的?

教授给我的答案是,这个问题很久以前就已经解决了,而linux“很可能正在做一些花哨的事情”来实现它。但这并没有真正解决问题的根源。我想要一个正确的答案。如果有人能推荐更好的搜索条件来解决这个问题,我也会很感激。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-13 11:58:30

如果我正确回答你的问题,整个问题就是锁定多个程序(线程等)所使用的设备。这个职位可能会对此有一个答案。

你的教授部分是对的。这个问题早在很久以前就被发现了,叫做种族条件。但是,这个解决方案并不是由内核自己以一种奇特的方式提供的。用户有责任实现一种可以防止设备或任何其他资源上的争用条件的机制。

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

https://stackoverflow.com/questions/71453901

复制
相关文章

相似问题

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