嵌入式开发修改u-boot与Linux调试串口总结

简介:

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

嵌入式开发.jpg

在原版的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)在做系统设计时一定要充分利用现有资源,在现有基础上进行设计开发。

本文由朗锐智科编辑整理(www.lrist.com),如有侵权请联系本站。

相关文章
|
21天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
36 0
|
22天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
16天前
|
网络协议 算法 Linux
【Linux】深入探索:Linux网络调试、追踪与优化
【Linux】深入探索:Linux网络调试、追踪与优化
|
2天前
|
Linux Shell 开发者
|
2天前
|
Linux C语言
|
6天前
|
数据采集 Linux Go
Linux系统是如何控制串口收发数据的?
Linux系统是如何控制串口收发数据的?
17 0
|
8天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
13天前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
该文指出了学习嵌入式Linux开发的两个常见误区。一是过分专注于学习桌面或服务器版Linux,而非关注嵌入式开发本身,实际上只需熟悉基本操作即可。二是试图在没有基础的情况下直接阅读Linux内核源代码,这是不切实际的,应先建立基础知识再进行源码学习。文章还提到了在嵌入式系统中获取和处理屏幕数据的示例,包括使用gsnap工具将framebuffer数据转为图像,以及涉及的交叉编译过程。
11 0
|
13天前
|
前端开发 Linux iOS开发
【Flutter前端技术开发专栏】Flutter在桌面应用(Windows/macOS/Linux)的开发实践
【4月更文挑战第30天】Flutter扩展至桌面应用开发,允许开发者用同一代码库构建Windows、macOS和Linux应用,提高效率并保持平台一致性。创建桌面应用需指定目标平台,如`flutter create -t windows my_desktop_app`。开发中注意UI适配、性能优化、系统交互及测试部署。UI适配利用布局组件和`MediaQuery`,性能优化借助`PerformanceLogging`、`Isolate`和`compute`。
【Flutter前端技术开发专栏】Flutter在桌面应用(Windows/macOS/Linux)的开发实践