我被要求在Linux中启动一个Ring振荡器。首先,我尝试直接读取控制和状态寄存器(感兴趣的位),并且可以使用devmem访问它们(使用寄存器的物理地址)。有两个环形振荡器模块0和1。每个模块由4个环形振荡器组成。模块0的输出提供给随机数生成器。模块1用于进程监控-关于这方面的信息还不多。每个模块都有一组独立的寄存器,用于控制、状态等。每个环形振荡器都有一个频率计数器,当适当设置环形振荡器的控制寄存器时,我可以从频率计数器的计数寄存器中读取频率计数。
现在,我必须为Ring振荡器编写一个设备驱动程序来实现这个目的。我不太清楚的是,在dts文件中,我应该尝试将Ring振荡器表示为时钟源,还是将其视为平台设备。我不知道Linux是如何处理Ring振荡器的。我是否应该查找Ring振荡器的设备地址,并尝试将其作为任何其他平台外围设备条目添加到dts文件中。这样,我就可以在驱动程序文件中将其注册为平台设备,并从探测函数控制其寄存器。或者我应该把它当做时钟源?但是,从可用的文档中,我看不到它被用作任何其他外围设备的时钟源。有谁能解释一下这个问题吗?任何帮助都将受到高度的感谢。
谢谢。
问候
Vivek
发布于 2017-04-03 22:54:14
我已经实现了Ring振荡器作为平台驱动程序。dts/dtsi变化如下:
dtsi:
ring_osc: ring-oscillator@F00xxxxx {
compatible = "abc,abc-ring";
reg = <0xF00xxxxx 0x14>;
status = "disabled";
};dts:
&ring_osc {
status = "okay";
};我所写的驱动程序只是使用振荡器的配置寄存器来配置振荡器。此外,还提供了一个sysfs接口,用于设置与其连接的频率计数器的周期值,并从频率计数器中读回频率计数。
https://stackoverflow.com/questions/43059300
复制相似问题