关于修改嵌入式linux调试默认调试串口的问题记录

场景:

今天在和别人讨论问题的时候,别人问道,怎么修改linux默认的调试串口功能,以我之前项目上的调试经验,我给出了一个我认为是正确可行并且易于实现的回答,但是当场被否定了,把我弄得有点不自信,我决定下来翻看一下自己之前做的记录,和调试总结,充实下自己。


解决方案:

一些运行的截图我就不贴上来了,反正通过了就是,修改默认的调试串口有三个阶段,一个是在u-boot中修改,第二个就是在kernel中修改,第三个就是在文件系统里面修改,这样才能正确使用。
前言:我们使用linux操作系统的一个原因就是开发方便,各个芯片设计厂商已经将自己的驱动发布到了linux官方的开源系统,做应用开发,我们可以不必全面的了解整个系统的实现过程,只需要了解到我们使用的芯片功能,或者针对具体使用的功能再datasheet上了解,如果随便修改一个东西都要去操作一遍源码,那么可能就有违系统存在的初衷了。
下面为以zynq7000系列的芯片为说明,并且也只记录了我使用的方法,当然也有其他的方法能够实现,只是我没有去验证。
一、u-boot中所做的修改
在zynq7000中,对于不同的uart,寄存器都是都是连续的,每个串口寄存器的偏移地址都是一致的,因此,我们只需要找到修改串口寄存器基地址的地方,就能够改变默认的调试串口,我在u-boot里面找到了这个设置如下:

在这里插入图片描述
同样在at91的u-boot里面这里也可以配置:
在这里插入图片描述
根据串口的基地址修改这里,便可以从指定的串口输出u-boot的打印信息;

二、kernel的修改
在dts文件里面,按照下面的格式填写启动参数,主要关注的就是console=ttyPS1,这个地方,在启动的系统后,会自动初始化系统的串口并注册设备,我们的串口0对应ttyPS0,串口1对应ttyPS1。

chosen {

		bootargs = "MEM=32M console=ttyPS1,115200 noinitrd earlyprintk mtdparts=spi0.0:9M(boot)ro,4M(kernel)ro,128K(devicetree)ro,22M(rootfs)rw root=/dev/mtdblock3 rootfstype=jffs2 rootwait init=/linuxrc devtmpfs.mount=1";
	};

ps:还有另外一种方式就是修改下面的,把serial0和serial1对换一下,这里系统初始化的时候就会将两个串口的寄存器基地址调换,后面文件系统也不用更改,理论上可以实现,具体我没有测试。

	aliases {

		serial0 = "/amba/serial@e0001000";

		serial1 = "/amba/serial@e0000000";

		ethernet0 = "/amba/ethernet@e000b000";

		spi0 = "/amba/spi@e000d000";

	};

三、文件系统里面更改
修改/etc/inittab 文件,inittab为linux初始化文件系统时init初始化程序用到的配置文件,初始化文件系统的时候会读取到下面一段配置来指定调试串口:

ttyPS1::respawn:/sbin/getty -L  ttyPS1 0 vt100 

ttyPS1即表示使用串口1来作为打印串口,串口0默认为普通串口,当然,这样就把串口0当做普通串口使用,在应用程序里面对串口0进行一些初始化的操作。


有问题可以相互讨论,我也是小白,微信 yucaohua001。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值