在运行linux的时候有所有的调试信息可以分为三个部分

1、bootloader输出信息

U-Boot 1.3.2(Nov 19 2016 - 22:02:08)

DRAM: 64 MB

Flash: 512 kB

NAND: 64 MiB

In: serial

Out: serial

Err: serial

Hit any key to stop autoboot: 0

[yqliu2410 #] tftp

Found DM9000 ID:90000a46 at address 10000000 !

DM9000 work in 16 bus width

bd->bi_entaddr: 08:00:3e:26:0a:5b

[eth_init]MAC:8:0:3e:26:a:5b:

TFTP from server 192.168.1.152; ourIP address is 192.168.1.155

Filename 'uImage'.

Load address: 0x30008000

Loading: T T#######################################################done

Bytes transferred = 1617316 (18ada4 hex)

[up-tech2410 #] bootm

## Booting image at 30008000 ...

Image Name: Linux-2.6.24.4

Created: 2016-11-19 14:05:29 UTC

Image Type: ARM Linux Kernel Image(uncompressed)

Data Size: 1617252 Bytes= 1.5 MB

Load Address: 30008000

Entry Point: 30008040

Verifying Checksum ... OK

Starting kernel ...

2、linux低级调试信息输出

Uncompressing Linux............................................................. done, booting the kernel.

3、linux调试信息输出

Linux version 2.6.24.4(root@vm-dev)(gcc version 3.4.6) #100 Sat Nov 19 07:47:35 CST 2016

CPU: ARM920T [41129200] revision 0(ARMv4T), cr=00007177

Machine: SMDK2410

Memory policy: ECC disabled, Data cache writeback

CPU S3C2410A (id 0x32410002)

S3C2410: core 202.800 MHz, memory 101.400 MHz, peripheral 50.700 MHz

S3C24XX Clocks, (c) 2004 Simtec Electronics

CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

CPU0: D VIVT write-back cache

CPU0: I cache: 16384 bytes, associativity 64, 32byte lines, 8sets

CPU0: D cache: 16384 bytes, associativity 64, 32byte lines, 8sets

Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256

Kernel command line: root=/dev/mtdblock2 noinitrd console=ttySAC1,115200

irq: clearing subpending status 00000010

PID hash table entries: 256 (order: 8, 1024 bytes)

timer tcon=00500000, tcnt a509, tcfg 00000200,00000000, usec 00001e4c

Console: colour dummy device 80x30

console [ttySAC1] enabled

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

现在要将所有的调试信息输出到别的串口。以com1为例(从com0开始计算)!

一、将bootloader的输出信息输出到com1

这里以u-boot1.3.2为例:很简单只需要修改一个宏定义就ok

Vi inlcude/configs/xxxconfig.h(xxx为你定义的开发板的名字)

更改原有的宏

/*

* select serial console configuration

*/

//#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410*/

//modify for xxx2410

//by lyj_uptech

#define CONFIG_SERIAL2 1 /* we use SERIAL 2 on SMDK2410*/

二、将low_level的调试信息输出到com1

在改之前我们先分析一下在linux启动之前它是如何使用串口的(以linux-2.6.24为例)。

1、在arch/arm/boot/compressed/misc.c文件中有定义

staticvoid putstr(constchar *ptr)

{

char c;

while ((c= *ptr++)!= '\0') {

if (c =='\n')

putc('\r');

putc(c);

}

flush();

}

2、arch/arm/boot/compressed/misc.中的函数decompress_kernel就是使用的putstr来打印的如下输出信息:

Uncompressing Linux............................................................. done, booting the kernel

3、追根溯源,putstr函数最终调用的是putc(请注意这里的putc不是在misc.c函数中定义的icedcc_putc,因为没有CONFIG_CPU_V6宏定义),真正的底层操作在文件include/asm-arm/plat-s3c/uncompress.h

4、 解析该文件

/* we can deal with the case the UARTs are being run

* in FIFO mode, so that we don't hold up our execution

* waiting for tx to happen...

*/

static voidputc(int ch)

{

if (uart_rd(S3C2410_UFCON)& S3C2410_UFCON_FIFOMODE){

int level;

while (1) {

level = uart_rd(S3C2410_UFSTAT);

level &= fifo_mask;

if (level < fifo_max)

break;

}

} else{

/* not using fifos */

while ((uart_rd(S3C2410_UTRSTAT)& S3C2410_UTRSTAT_TXE)!= S3C2410_UTRSTAT_TXE)

barrier();

}

/* write byte to transmission register */

uart_wr(S3C2410_UTXH, ch);

}

该函数中调用的两个函数,uart_rd uart_wr在同一个文件中定义

#define uart_base S3C24XX_PA_UART+ (0x4000*CONFIG_S3C_LOWLEVEL_UART_PORT)

static __inline__void

uart_wr(unsignedint reg, unsigned int val)

{

volatile unsignedint *ptr;

ptr = (volatileunsigned int*)(reg+ uart_base);

*ptr = val;

}

static __inline__unsigned int

uart_rd(unsignedint reg)

{

volatile unsignedint *ptr;

ptr = (volatileunsigned int*)(reg+ uart_base);

return *ptr;

}

从宏定义uart_base中就可以清楚的看到,当CONFIG_S3C_LOWLEVEL_UART_PORT为0时,uart_base的值为0x50000000,也就是uart0的控制寄存器基地址。如果要使用uart1的话就把CONFIG_S3C_LOWLEVEL_UART_PORT赋值为1就可以了。

5、真正更改的地方只有一个

下级目录

修改为1就ok!

6、需要注意的地方(你使用的串口初始化了么)

我在整个内核中找遍了解压内核之前运行的代码,都找不到关于串口初始化的代码。所以说,linux在启动之前的串口初始化是依赖bootloader的,要想正常的输出,就必须使用你的bootloader使用的串口,因为在bootloader中进行了对要使用的串口进行了初始化。要保证你的bootloader兼容性很好,那就在bootloader中把所有的串口都初始化一遍。

如果你没有初始化串口,一旦调用putstr,程序就死掉了!

三、将linux的信息输出到com1

将linux运行的信息输出到com1就太简单了,直接到bootloader里面改linux的传递参数就可以了。

setenv bootargs root=/dev/mtdblock2 noinitrd console=ttySAC1,115200

saveenv

现在启动一切ok!

感谢yqliu29的支持,没有他的调试程序,我始终的无法知道linux的内核是否正确调用,也无法定位问题!

这里附上他给我的程序(这里的三个灯分别对应的io管脚是GPF5/6/7)

#if 0

asm volatile(

"ldr r6, =0x5400\n\r"

"ldr r7, =0x56000020\n\r"

"str r6, [r7]\n\r"

"ldr r6, =0xC0\n\r"

"ldr r7, =0x56000024\n\r"

"str r6, [r7]");

#endif

include/s3c6410.h 里

#define ELFIN_UART_BASE 0x7F005000 // Assembly 阶段吃这里

#define ELFIN_UART0_OFFSET 0x0000

#define ELFIN_UART1_OFFSET 0x0400

#define ELFIN_UART2_OFFSET 0x0800

#ifdef CONFIG_SERIAL1 // 这一句在 include/config/smdk6410.h

#define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART0_OFFSET)

#elif defined(CONFIG_SERIAL2)

#define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART1_OFFSET)

#else

#define ELFIN_UART_CONSOLE_BASE (ELFIN_UART_BASE + ELFIN_UART0_OFFSET)

#endif

文章来自:http://blog.csdn.net/longtian635241/article/details/7867730

linux命令 重定向%3e,linux输出信息调试信息重定向相关推荐

  1. linux将屏幕输出到文件,Linux命令执行的屏幕输出内容重定向到日志文件

    摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...

  2. 如何查看Linux内核输出的调试信息

    第一点需要澄清:我使用的环境是嵌入式Linux,并非桌面版Linux,查看内核输出的调试信息也是为了追踪内核子系统的运行.这可能是一个非常小的知识点,但是还是希望自己记录一些东西,以后也好拾起. 本文 ...

  3. linux输出文件没有找到,Linux环境下标准输入、输出、错误信息详解

    Linux环境下标准输入.输出.错误信息详解 下面我们介绍在Linux环境下标准输入.输出.错误设备.标准输入设备代号为0, 用来显示输入信息,标准输出设备代号为1,用来显示正常信息,标准错误设备代号 ...

  4. unix/linux命令“ls -l”选项输出结果详解

    from: http://hi.baidu.com/hoxily/item/12e2a02d03f77e0942634a8e unix/linux命令"ls -l"选项输出结果详解 ...

  5. linux命令行 随机排列,有趣的Linux命令行:随机输出唐诗宋词

    有趣的Linux命令行:随机输出唐诗宋词 fortune命令,随机输出一句话,或者是一句英文名言,或者是一首唐诗宋词来,如果没有唐诗宋词,那就需要用fortune-zh bkjia@bkjia:~$ ...

  6. 树莓派4B安装系统,配置远程连接和WiFi,更新源,更新中文支持,基本Linux命令,用Python输出hello和“你好,世界”

    树莓派4B 系列1 从入门到进阶 作者(当然就是我本人了,哈哈哈哈哈),写这篇文章的目的是给刚入门树莓派或者从3B/3B+版本过度到4B的小朋友们总结出一些成系统的规律和方法,以及4B全新版本的变化. ...

  7. Linux命令篇 linux命令大全简洁明了 linux学习笔记

    Linux命令篇 linux命令大全简洁明了 linux学习笔记 Linux 命令大全 文章目录 Linux 命令大全 一. 常用的基础命令 查看目录: 切换目录: 创建和删除: 拷贝和移动文件: 查 ...

  8. 每天一个linux命令(25):linux文件属性详解

    每天一个linux命令(25):linux文件属性详解 Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下 ...

  9. linux命令中info,Linux中zipinfo命令起什么作用呢?

    摘要: 下文讲述Linux中zipinfo的功能说明,如下所示: zipinfo(zip information的英文缩写) zipinfo命令功能: 用于输出压缩文件信息, 返回压缩文件的详细信息 ...

  10. linux 命令run road,linux命令进阶

    Though unconsciously,peple are indeed moving towards their destination.Slow as the progress seen fro ...

最新文章

  1. COMP 0137 Machine Vision
  2. 【转】浅谈php://filter的妙用
  3. c#中邮件收发处理(POP3,IMAP,SMTP)的实现方法
  4. ffmpeg Windows Error 0xe06d7363
  5. mybatis面试题讲解1
  6. java jni linux_java jni实现linux环境下绑定硬件的License
  7. 如何使用CCRenderTexture创建动态纹理 Cocos2d-x 2 1 4
  8. 问答| 四轮驱动移动机器人(SSMR)简化模型的虚拟轮间距dLR具体是多少
  9. 【OSG】安装编译小结
  10. 虚拟机是怎么实现的?(转)
  11. 怎么看神经网络过早收敛_遗传算法的收敛性分析
  12. 简述银行会计科目的分类
  13. 阿里服务器稳定性介绍
  14. 安装odoo小程序商城模块报错 KeyError: u'oejia_weshop'
  15. linux shell脚本 字符串、整数、小数判断
  16. CSMA/CD和CSMD/CA
  17. [原创插件] [服务端插件] [新手开发者必看]优秀插件开发教程列表 欢迎回复讨论
  18. 基于java web 应用电子商务网站开发
  19. 股票打板 知识 收集
  20. 投弃式海洋仪器设备(XBT/XCTD)

热门文章

  1. java普通类方法的区别是什么_java – 普通接口类和只有抽象方法的抽象类之间有什么区别吗?...
  2. mysql切换到使用openssl,MySQL主从复制+OpenSSL
  3. python pprint_【Python】输入和输出
  4. c语言作业答案N个公约数公倍数,c语言程序题,输入两个正整数m和n,求其最大公约数和最小公倍数。...
  5. php查找txt文件是否有,php怎么查询txt文件是否存在
  6. 计算机发展史的十大成就,2019中国十大科技成就:数个“第一”创造历史
  7. linux mysql v_Linux 主机升级MySQL v5.5 性能提升360%
  8. 数学--博弈论--巴什博奕(Bash Game)
  9. POJ 3267为什么优先队列超时,DP就能过,难过
  10. 计组—浮点数表示和运算