嵌入式ARM在Linux下更改调试串口

2019-07-12 16:58发布

By Toradex秦海 1). 简介 在基于嵌入式ARM开发产品的时候,有时候由于ARM处理器UART数量的限制,我们需要将系统默认的调试串口打印信息关闭或者转移到其他串口上面去,本文即演示更改uboot和linux kernel 调试串口的过程示例。   本文所演示的平台来自于ToradexApalis iMX6ARM嵌入式平台,这是一个基于NXP iMX6 ARM处理器,支持双核/四核Cortex-A9。     2. 准备 a).Apalis iMX6 ARM核心版配合Ixora载板,分别连接默认调试串口UART1和准备要转移的调试串口UART3到开发主机方便调试,Apalis iMX6 UART序号说明请参考这里。   b).Apalis iMX6系统使用官方预编译Linux BSP V2.7版本,如何下载更新请参考这里。   c). 如果只是想关闭默认串口的打印信息,可以参考这里的说明,本文就不赘述。     3). Uboot源代码更改编译 a). 为了将uboot console从UART1 转换至 UART3,需要修改uboot源代码。   b). 根据这里的说明配置好编译所需要的toolchain,并下载对应uboot源代码到ubuntu开发主机。   c). 因为针对Apalis iMX6 uboot的源代码V2.7和V2.8版本都是基于2016.11-toradex 分支,因此这里为了将源代码锁定为V2.7版本需要通过下面命令指定tag并创建新的操作分支。 ------------------------------- $ cdu-boot-toradex $ git checkout Colibri-iMX6_LXDE-Image_2.7b4-20171005 $ git checkout –b imx6_v2.7 Colibri-iMX6_LXDE-Image_2.7b4-20171005 -------------------------------   d). 修改源代码,具体请参考下面两个patch文件 ./ apalis_imx6.h –https://github.com/simonqin09/Apalis_iMX6_Console_Switch/blob/master/apalis_imx6.h.patch ./ apalis_imx6.c –https://github.com/simonqin09/Apalis_iMX6_Console_Switch/blob/master/apalis_imx6.c.patch   //apalis_imx6.h 头文件中修改 Console 环境变量的默认值是为了后续配合linux kernel console的修改,其他修改都是为了uboot console的修改。   e). 重新编译源代码 ------------------------------- $ make apalis_imx6_defconfig $ make -j3 2>&1 | tee build.log -------------------------------   f). 将新编译生成的uboot相关文件SPL和u-boot.img替换之前更新Linux BSP image所制作的SD卡里面的相关文件。 ------------------------------- $ cd /media/username/… (SD卡挂载路径) $ cd apalis_imx6 $ mv SPL SPL.bak $ mv u-boot.imx-spl u-boot.imx-spl.bak $ cp…/u-boot-toradex/SPL . $ cp …/u-boot-toradex/u-boot.img u-boot.imx-spl -------------------------------     4). 更新uboot以及修改Linux文件系统 a). 在通过SD卡更新新的uboot之前,先进入Apalis iMX6 Linux 文件系统进行如下配置修改。 ------------------------------- $ cd /etc/systemd/system/getty.target.wants $ cp serial-getty@ttymxc0.service serial-getty@ttymxc3.service $ systemctl disable serial-getty@ttymxc0.service $ reboot -------------------------------   b). 重启后通过默认调试串口UART1进入uboot,连接SD卡到Apalis iMX6,执行下面命令进行uboot更新 ------------------------------- # runsetupdate # runupdate_uboot -------------------------------   c). 更新完成后,再次重启,此时uboot console已经切换到新的UART3串口上面了,再次进入uboot,执行下面命令载入默认的环境变量。 ------------------------------- # env default –a # saveenv -------------------------------   d). 此时重启后,uboot console和linux kernel console就都全部切换到新的UART3串口上面了,完成了本次示例。