修改u-boot与Linux调试串口以及文件系统显示终端串口

转载:http://bbs.ednchina.com/BLOG_ARTICLE_3003157.HTM

1.背景

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

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

       (1)Xloader的打印串口

       (2)u-boot的打印串口

       (3)内核解压时的信息打印串口

        (4)内核调试串口

        (5)文件系统中使用的显示终端串口

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

2.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。

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

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

找到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内核调试串口的配置,与内核调试串口相同。

2.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

......................................................

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

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

31 S:2345:respawn:/sbin/getty 115200 ttyS2

将其修改为:

31 S:2345:respawn:/sbin/getty 115200 ttyS0

完成全部修改任务。

3.感触

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

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

        (3)在做系统设计时一定要充分利用现有资源,在现有基础上进行设计开发。本文作者若完全按照以前的设计在设计底板时使用UART3作为调试串口,就不会出现见天一天的纠结,浪费了一天的开发时间。

4.鸣谢

        感谢博客园大牛jamiedu,是他的一篇博文“【原创】修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467) ”为我今天一天的工作指明了道路。感谢大牛,感谢那些在我们前进道路上做出无私贡献的人。文章的最后给出参考文章的链接地址:http://www.cnblogs.com/duzeming/archive/2011/10/31/2229905.html


u-boot 控制串口0更换为串口1 

将u-boot中的configs/smdk6410.h中的#define CONFIG_SERIAL1          1
修改为 #define CONFIG_SERIAL2          1
还需修改:
在内核make menuconfig后
     System Type
    (0) S3C UART to use for low-level messages 
中的0改为1
然后就可以转为串口1了。

转自:http://bbs.chinaunix.net/thread-1921976-1-1.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
u-boot 中使用 gdb 进行调试,需要进行以下几个步骤: 1. 在配置文件中开启调试信息选项。在 u-boot 的配置文件(比如 `include/configs/board.h`)中添加以下选项: ``` #define CONFIG_DEBUG_UART 1 #define CONFIG_DEBUG_UART_BOARD_DETECT #define CONFIG_SYS_DEBUG 1 #define CONFIG_SYS_DEBUG_UART CONFIG_DEBUG_UART #define CONFIG_DEBUG_LL #define CONFIG_GDB_PORT 6666 ``` 其中,`CONFIG_GDB_PORT` 指定了 gdb 调试器连接的端口号。 2. 编译 u-boot。在编译 u-boot 时需要开启调试信息选项,可以使用以下命令: ``` make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- <board>_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all ``` 其中 `<board>` 为开发板的名称。 3. 烧录 u-boot 到开发板。将编译好的 u-boot 烧录到开发板中,可以使用 JTAG 调试器或者通过串口进行烧录。 4. 连接开发板和 host 机。通过串口连接开发板和 host 机,并使用以下命令启动 gdbserver: ``` arm-linux-gnueabihf-gdbserver :6666 ./u-boot ``` 其中 `./u-boot` 为编译好的 u-boot 的可执行文件。 5. 连接 gdb 调试器。在 host 机上打开一个新的终端窗口,使用以下命令连接到 gdbserver: ``` arm-linux-gnueabihf-gdb u-boot (gdb) target remote :6666 ``` 其中 `u-boot` 为编译好的 u-boot 的可执行文件。 6. 开始调试。使用 gdb 调试命令进行调试,比如设置断点、单步执行等。例如,设置断点可以使用以下命令: ``` (gdb) b main ``` 然后使用以下命令运行程序: ``` (gdb) c ``` 程序会在 `main` 函数处停下来,等待 gdb 命令。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值