新手帖,求教利用串口打印linux 内核版本调试信息的方法,该如何

专业文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“专业文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取,非会员用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文库认证用户/机构上传的专业性文档,需要文库用户支付人民币获取,具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档。

修改u-boot与Linux调试串口痛苦经历及感触1.背景

近期一个项目,使用TI Cortex-A8的芯片AM3517作为主控开发。前期使用北京瑞泰公司的ICETEK-AM3517-KB核心板搭建开发环境。在自己做底板布板的时候的时候涂个布线方便,改用UART1作为调试串口,而原来瑞泰给的开发包,已经TI的AM3517 PSP均以UART3作为调试串口。于是在底板焊接完成调试的时候就有了一天痛苦的经历。

在原版的PSP中, 一共有五处使用到UART3作为打印和调试串口:

以上第一处Xloader的打印信息量少且系统中不需要使用,不做修改。本文中讲述后四种情况的修改。

AM3517的串口符合TL16C550标准的,所以驱动也是使用16550的驱动,默认情况下,我们只需要提供需要配置的串口的基地址和中断号等资源给16550的驱动,寄存器的配置不需要我们去关心。且在瑞泰提供开发包中UART1,UART2,UART3引脚配置均配置为M0模式所以不用去修改引脚复用寄存器。仅需在修改u-boot代码中include/configs/am3517_icetek.h的如下代码段:

1.2修改内核解压缩打印串口

由以上可知内核解压缩信息打印所使用的串口配置以来Linux内核调试串口的配置,与内核调试串口相同。

1.3修改内核调试串口

内核调试串口的配置在Linux诶和配置中选择。在Linux源代码根目录下运行一下命令:

打开配置界面后,找到一下选项:

保存后退出配置界面,运行以下命令重新编译内核:

将编译后的内核烧写至nandflash,设置u-boot启动参数从nandflash启动,启动内核。在UART1打印出内核解压以及内核启动信息如下:

1.4修改文件系统中使用的显示终端串口

系统中使用的终端显示串口配置在/etc/inittab文件中。打开开发板根文件系统下的/etc/inittab文件,找到一下信息:

(1)Linux开源特性,使得我们可以很好地对其进行源码级的修改,使其适合于我们的设计要求。

(2)在进行系统设计时一定要先做好仔细前期准备。尤其在做硬件设计时,一定要充分考虑使用中要用到的资源,不然就会造成后期软件设计者更多的麻烦。

(3)在做系统设计时一定要充分利用现有资源,在现有基础上进行设计开发。


Linux 控制台是Linux 内核的一个内部系统控制台,它为内核和进程提供了一个方式去发送并输出文本到用户以及从用户处接收文本。用户通常使用计算机键盘输入文本并在计算机屏幕读取输出文本。在这里探究的,是命令行界面(framebuffer暂不讨论)。更详细介绍可看:

禁用console(控制台)的目的

1、禁止显示命令行界面

2、取消串口打印,防止设备被他人读取到系统打印信息

3、防止u-boot的启动参数被修改,保证设备能正常启动

如何找到跟console(控制台)相关的kernel参数

一切关于Linux系统的资料,都可以在Linux官网找到。因此,我们可以在找到我们需要的东西。搜索“console”关键词,可找到以下内容:

所以,我们可以通过设定 “console”这个参数的值,来命令行界面、串口打印信息输出到哪一个设备。现在我们不需要命令行界面和串口打印信息,可以将 console的值设为 NULL。

在u-boot下,我们可以通过命令访问和修改环境变量。我们也可以通过 fw_printenv工具直接在Linux系统中访问和设置以上的参数。我这里就不阐述如何安装 fw_printenv工具,可参考以下链接内容:

在这里,简单介绍一下,什么是 bootargs。

bootargs 是传递给kernel的启动参数,这个参数决定了根文件系统的位置、根文件系统的类型等等,以及我们这里最关心的console。其传递过程如下,里面涉及到u-boot和kernel 源码的函数:

1、通过ssh接上板子;

 
2、验证是否已经成功安装fw_printenv工具,输入fw,然后按两次tab,看看是否出现“fw_printenv fw_setenv”回复,若有,即说明已经安装fw_printenv工具成功,若无,则需要重新安装;

  
 
3、输入命令 fw_printenv,查看目前环境,bootargs 到下一个分号(;),就是当前的bootargs参数的值;

  
 

  
 
5、最后,重新查看当前环境,可以发现,console = null 已经添加进去;

  
 

我要回帖

更多关于 深入理解linux内核 的文章

 

随机推荐