linux内核关于uart2配置为RTS引脚时,串口无法使用的问题

前言:

在linux中,当gpio被配置为串口或者其他作用功能时,是无法再文件系统中再将该gpio进行导出(echo xx > /sys/class/gpio/export)的,内核不允许,因为你的该引脚已经作为其他功能使用。

在对linux内核进行配置时,make menuconfig 配置串口uart2为带有RTS引脚的情况。然后make编译内核,结果运行到板子上,在文件系统下确实能够导出该串口对应的gpio引脚的,这肯定是不正确的,经过测试,确实发现,此时的串口确实无法工作,像是失去了串口功能。

原因:经过对串口驱动源码的分析,串口驱动分为三层关键性的代码,分别是:tty_io.c、serial_core.c、nuc970_serial.c(这个是该板子厂商实现的串口文件)。

知道了三个关键性的文件后,但我们此时只要去关注与nuc970_serial.c即可,因为其他两个文件可以说是不会出现问题的。make menuconfig 我们在内核驱动配置中,将uart2配置为带有RTS引脚的功能后,在源码根目录下的.config文件中,会出现一个关于uart2为该配的宏,此时这个宏名为defined (CONFIG_NUC970_UART2_FC_PF)。结果在/drivers/tty/serial/nuc970_serial.c中的static int nuc970serial_pinctrl(struct platform_device *pdev)函数中,该宏的名为defined (CONFIG_NUC970_UART2_PF_FC),很显然宏的名字错误了,FC和PF的位置写反了,将该文件中的宏改为和make menuconfig 后生成.config文件中的宏名一样后,uart2就正常了。

总结:在进行linux移植时,如果在移植过程发现了问题,要多考虑一种解决方法的过程,那就是首先确定出现问题的是哪一个驱动,紧接着可以考虑在make menuconfig后生成的,config文件中,关于该驱动的宏,是否跟源码中的宏一致,当问题难解决时,这也是一个尝试的过程。

时间: 2024-10-24 19:19:03

linux内核关于uart2配置为RTS引脚时,串口无法使用的问题的相关文章

安卓驱动开发(四)----安卓内核与linux内核的安装配置

安卓中的源代码包括安卓系统中的应用程序的源代码,SDK带的各种工具的源代码,NDK的源代码以及HAL源代码. 安卓源代码可以全部下载,也可以下载一部分.之后要对安卓的源代码进行编译,在编译后,会在安卓源代码根目录下生成一个out目录,所有编译的目标文件都在这个目录中,在out目录中有两个直接子目录,分别是host和target.前者表示在主机(x86)生成的工具,后者表示目标机(模认为ARMv5)运行的内容.在target中,包含两个直接子目录,分别是common和product.common包

linux内核编译,配置本机驱动

1.前言  编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱动,不懂硬件的我们,看到都头大.本人第一次安装gentoo的时候,内核编译了5次,前4次主要失败原因是以太网卡驱动.无线网卡驱动.显卡驱动.声卡驱动都没一次性配置正确.虽然gentoo提供了genkernel命令,可以自动帮你编译内核,但还是想自己手工尝试下. 2.获取本机驱动信息 既然跟内核挂钩

xshell连接linux服务器切换至oracle的sqlplus控制台时,无法使用回车键的解决方案!

当使用xshell连接linux服务器后,切换至sqlplus控制台,当使用回车键时,出现^H的符号,貌似回车键不能用!解决方案: 1)$ stty erase ^H : 与退格键相关的设置是erase,它表示删除最后一个字符. 如果在当前窗口执行的话,只对当前的窗口有效,下次登陆的时候还需要重新设置,可以把这个命令写入shell 的配置文件,如~/.bashrc 中,这样每次都能生效了. 2)使用delete键代替退格键, 3)使用ctrl+退格键 4)执行命令 stty erase ^H 修

Linux内核配置、编译及Makefile简述

Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核.这里我用到的是linux.2.22.6版本的内核.在Linux下命令行通过tar xjf linux.2.22.6.tar.bz2解压内核.然后,如果你需要对这个内核打补丁的话,用patch命令:patch -px <../linux.2.22.6.patch.这里的px指的是忽略掉补丁文件中描述的

VELT-0.1.5开发:在vs2013下调试Linux内核

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.5 VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可

VELT-0.1.5开发:使用kgdb调试Linux内核

VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.net/detail/lights

Linux内核抢占实现机制分析【转】

Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性.然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度. [关键字]内核抢占,用户抢占,中断, 实时性,自旋锁,抢占时机,调度时机,schedule,pree

Linux内核抢占实现机制分析

Sailor_forever  [email protected] 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/09/03/2870184.aspx [摘要]本文详解了Linux内核抢占实现机制.首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性.然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度. [关键字]内核抢占,用户抢占,中断, 

用VS2013+VELT-0.1.4进行海思平台 Linux内核 的开发

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.4 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序