裸机驱动以及在嵌入式linux系统驱动,有图有真相

时间:2022-10-19 19:21:33


裸机驱动以及在嵌入式linux系统驱动,有图有真相

裸机驱动以及在嵌入式linux系统驱动,有图有真相


第一个图是在arm裸机下,对总线操作的波形图,上面的是片选,低电平有效。下面为某一条数据线的数据。

第二个图是当我把相同的程序,写成字符设备驱动,加载进linux内核,并且对相同的信号进行测试时,出现的波形

请高手指点,为什么两个波形会不一样。而且,在裸机下可以实现要求的功能。相同的程序写成字符设备驱动的时候,功能无法实现。求指点 裸机驱动以及在嵌入式linux系统驱动,有图有真相



11 个解决方案

#1


写反了,第一个图是在操作系统下的图
第二个图是在裸机下。相同的程序。

#2


瞎猜的,跟中断有关。

#3


总线我也没写什么中断啊

#4


你不写,系统自己本身就有吧,而且你要求那么高,linux本就不是实时系统。
第二张图是你要的效果是吗?

#5


第二章图我无法理解,蓝色的低电平是片选,黄色的高电平是数据,为什么会出现两个高电平。而且片选期间,数据高电平持续时间那么短。

#6


不知道是什么总线,严重怀疑程序正确性。

#7


引用 6 楼 junht 的回复:
不知道是什么总线,严重怀疑程序正确性。

同意,应该跟系统关系不大。

#8


两个波形没什么比较意义,感觉还是应该从驱动移植上入手。裸机能正确运行,说明驱动本身还是正确的,问题十有八九出在移植上。

#9


高级示波器啊 裸机驱动以及在嵌入式linux系统驱动,有图有真相

#10


linux启动后,对总线操作估计和你裸机的操作不一样,有些差异造成的,我猜

#11


问题解决,在驱动里面涉及到了1M的地址空间,都要映射成虚拟地址。最开始我映射的方法是直接映射1M的地址空间,其他的地址加个偏移量操作,结果总线出现了上述的问题。当我往总线上写数据的时候,发现读信号和写信号都有。后来无耐之下,尝试了,一个地址一个地址映射,结果驱动正常使用。但不知道ioremap()到底怎么了?还是加偏移量出现了什么问题.

#1


写反了,第一个图是在操作系统下的图
第二个图是在裸机下。相同的程序。

#2


瞎猜的,跟中断有关。

#3


总线我也没写什么中断啊

#4


你不写,系统自己本身就有吧,而且你要求那么高,linux本就不是实时系统。
第二张图是你要的效果是吗?

#5


第二章图我无法理解,蓝色的低电平是片选,黄色的高电平是数据,为什么会出现两个高电平。而且片选期间,数据高电平持续时间那么短。

#6


不知道是什么总线,严重怀疑程序正确性。

#7


引用 6 楼 junht 的回复:
不知道是什么总线,严重怀疑程序正确性。

同意,应该跟系统关系不大。

#8


两个波形没什么比较意义,感觉还是应该从驱动移植上入手。裸机能正确运行,说明驱动本身还是正确的,问题十有八九出在移植上。

#9


高级示波器啊 裸机驱动以及在嵌入式linux系统驱动,有图有真相

#10


linux启动后,对总线操作估计和你裸机的操作不一样,有些差异造成的,我猜

#11


问题解决,在驱动里面涉及到了1M的地址空间,都要映射成虚拟地址。最开始我映射的方法是直接映射1M的地址空间,其他的地址加个偏移量操作,结果总线出现了上述的问题。当我往总线上写数据的时候,发现读信号和写信号都有。后来无耐之下,尝试了,一个地址一个地址映射,结果驱动正常使用。但不知道ioremap()到底怎么了?还是加偏移量出现了什么问题.