嵌入式修改u-boot与Linux调试串口经验

发布时间:2017-8-21 10:09    发布者:技术小白
关键词: 嵌入式 , u-boot , Linux调试串口经验
嵌入式修改u-boot与Linux调试串口经验

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

在原版的PSP中, 一共有五处使用到UART3作为打印和调试串口:
(1)Xloader的打印串口
(2)u-boot的打印串口
(3)内核解压时的信息打印串口
(4)内核调试串口
(5)文件系统中使用的显示终端串口
以上第一处Xloader的打印信息量少且系统中不需要使用,不做修改。本文中讲述后四种情况的修改。


1.1 修改u-boot打印串口


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

90 #define CONFIG_CONS_INDEX 3
91 #define CONFIG_SYS_NS16550_COM3 OMAP34XX_UART3
92 #define CONFIG_SERIAL3 1 /* UART3 on AM3517 ICETEK */
将上述代码修改为:
90 #define CONFIG_CONS_INDEX 1
91 #define CONFIG_SYS_NS16550_COM1 OMAP34XX_UART1
92 #define CONFIG_SERIAL1 1 /* UART1 on AM3517 ICETEK */

重新编译u-boot,得到u-boot.bin,烧写至nandflash,重新启动,Xloader启动信息打印在UART3,u-boot启动信息打印在UART1。


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


内核解压缩信息打印使用的串口,在Linux内核源码程序中。进入linux源码文件根目录,找到 arch/arm/mach-omap2/include/mach/uncompress.h,打开之后发现里面只有一行:

#include
#include
找到arch/arm/plat-omap/include/mach/uncompress.h,打开后发现以下代码:
43 #ifdef CONFIG_OMAP_LL_DEBUG_UART3
44 uart = (volatile u8 *)(OMAP_UART3_BASE);
45 #elif defined(CONFIG_OMAP_LL_DEBUG_UART2)
46 uart = (volatile u8 *)(OMAP_UART2_BASE);
47 #elif defined(CONFIG_OMAP_LL_DEBUG_UART1)
48 uart = (volatile u8 *)(OMAP_UART1_BASE);
49 #elif defined(CONFIG_OMAP_LL_DEBUG_NONE)
50 return;

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


1.3修改内核调试串口


内核调试串口的配置在Linux诶和配置中选择。在Linux源代码根目录下运行一下命令:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
打开配置界面后,找到一下选项:

System Type --->
TI OMAP Implementations --->
Low-level debug console UART (UART3) --->

修改为:
Low-level debug console UART (UART1) --->
这里的 (UART1) 表示调试串口选择UART1。

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

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

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

NAND read: device 0 offset 0x280000, size 0x500000
5242880 bytes read: OK
## Booting kernel from Legacy Image at 80000000 ...
Image Name: Linux-2.6.32
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2313024 Bytes = 2.2 MB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux................................................................................................................................................. done, booting the kernel.
Linux version 2.6.32 (root@world-desktop) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 Mon Apr 2 20:04:47 CST 2012
CPU: ARMv7 Processor [411fc087] revision 7 (ARMv7), cr=10c53c7f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3517/AM3517 EVM
......................................................


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

系统中使用的终端显示串口配置在/etc/inittab文件中。打开开发板根文件系统下的/etc/inittab文件,找到一下信息:
31 S:2345:respawn:/sbin/getty 115200 ttyS2
将其修改为:
31 S:2345:respawn:/sbin/getty 115200 ttyS0
完成全部修改任务。

2.感触
(1)Linux开源特性,使得我们可以很好地对其进行源码级的修改,使其适合于我们的设计要求。
(2)在进行系统设计时一定要先做好仔细前期准备。尤其在做硬件设计时,一定要充分考虑使用中要用到的资源,不然就会造成后期软件设计者更多的麻烦。
(3)在做系统设计时一定要充分利用现有资源,在现有基础上进行设计开发。


嵌入式技术学习,联系宋老师企鹅号:3524-6590-88   Tel/WX:173--1795--1908
以下课程可免费试听C语言电子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想学习的你和我联系预约就可以免费听课了。





本文地址:https://www.eechina.com/thread-515984-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表