linux内核启动后实现UART与普通IO的切换问题,请教各位!多谢
我使用的是IMX6q,系统是linux10.0 ,BSP是官方最新的。现在我在驱动一公司通讯芯片时,需要将UART与普通IO进行切换,例如:
UART1通讯时,要将UART引脚转换到普通IO来检测总线的电平状态,检测间隔6.6us,然后又切换到UART功能上去。
这种应用在单片机上很好实现,直接到一定时间去修改IO的功能,然后进行功能切换即可。
我现在是不清楚这种方式在IMX6q跑linux系统时能不能实现?
------------------------------------------------------------------------------------------------------
我在网上查阅资料如下:
初始化过的结构体和接口函数的定义都是带有"__init"和“__initdata”的,所以这些都只能在内核初始化代码中使用,一旦系统初始化结束并进入了文件系统,
这些定义都会被free。所有它们不能在内核模块(.ok)中被调用,否则你就等着Oops吧。因为一个芯片的引脚复用一般是硬件设计的时候定死的,一般不可能在启动后更改。
如果你是在要在模块中改变引脚复用配置,你只能通过自己ioremap相关寄存器再修改它们来实现。
------------------------------------------------------------------------------------------------------
请大神帮忙解释一下,内核启动后为什么不能修改IO的配置。 可以实现。
通过驱动配置相应的寄存器即可,就如同在单片机上那样,但是要按照linux的方式来完成。
实现方式很多,比如写一个读写CPU寄存器的驱动模块,应用层通过该驱动的接口完成寄存器的配置。
但是不明白楼主这样设计的目的何在?可能的话,拿单独的GPIO完成电平检测的功能应该更合理。 是这样的,有款驱动芯片是uart与IO复用的,所以需要进行频繁的切换。但是感觉您说的这种实现方式,不是那么方便啊。是不是需要自己去写一套驱动。回复 2# guocslock
页:
[1]