接上Debug串口,启动机器,u-boot哗啦啦地打印一行行的字符。刚接触u-boot的时候,对机器后台做了什么,几乎一无所知。

如果要很有信心地定制出一个简单并且可靠的系统,或者快速完成一项新的任务,那么,机器后台运行的内容知道的越多越好。

比如,曾经遇到过这样的问题:在全局区定义一个变量int a,在board_early_init_f函数中对这个变量进行赋值,编译没有问题,系统却挂掉了。

为什么?

全局区定义的未初始化的变量,在bss段。在board_early_init_f函数函数执行阶段,完整的c环境没有建立起来。board_early_init_f在board_init_f函数中被调用,直到board_init_f函数的末尾,准备运行board_init_r之前,u-boot对代码作了一次relocate, 这个时候才分配了bss段。bss段的地址指向DDR内存。

在SPL阶段的board_init_f中,board_early_init_f运行在DDR内存控制器初始化之前。所以,当u-boot在DDR内存还不能工作的时候,去访问DDR内存,这就难怪系统会挂掉了。

修改变量的定义为int a=0;系统就不会挂掉了。已初始化的变量在刚开始的时候被载入到静态内存当中,访问当然没有问题。

从这个例子可以看到,了解机器代码的运行情况很重要。

u-boot在汇编代码中简单地初始化CPU、MMU、Cache、中断、状态寄存器之后,转到C代码运行,执行board_init_f。board_init_f执行一个初始化函数集。然后转到board_init_r执行。board_init_r也执行一个初始化函数集,然后转到main_loop函数。main_loop函数或者在bootdelay结束后进行系统引导,或者在用户按下任意按键之后进入一个循环,在循环中读取控制台输入,执行命令,这就是我们看到的u-boot命令行界面。

board_init_f -> display_options:

U-Boot ...

board_init_f -> print_cpuinfo:
CPU:  ...
Reset cause: ...

board_init_f -> init_func_i2c:
I2C: ready

board_init_f -> announce_dram_init ... show_dram_config:
DRAM: ...

board_init_r -> initr_mmc:
MMC: ...

board_init_r -> initr_env -> env_relocate -> env_relocate_spec -> env_import -> set_default_env:
*** Warning - bad CRC, using default environment

board_init_r -> console_init_r -> stdio_print_current_devices:
In: serial
Out: serial
Err: serial

在autoboot中run_command(bootcmd)。bootcmd是一个环境变量字符串,从此时起u-boot以运行脚本的方式引导系统启动Linux.

bootz:

Starting kernel ...

如果能在板级代码中按执行顺序放置板级代码的各个函数,并且表明函数的调用路径,那么,看起来乱糟糟的板级代码,就有条理很多,修改和调试也方便很多。

u-boot调试串口输出对应的系统函数的更多相关文章

  1. 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建、调试输出和建立时间系统

    我是卓波,我是一名嵌入式工程师,我万万没想到我会在这里跟大家吹牛皮. 嵌入式框架Zorb Framework搭建过程 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建.调试输出和建立时间系 ...

  2. 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境

    如有转载,请注明出处与本文连接,谢谢! 修改XEN的源码实现额外的功能,需要有一个调试环境来得到XEN的调试信息(有关源码编译并安装 XEN 请阅读我以前的博文:在CentOS下源码安装 Xen并搭建 ...

  3. [RK3399] 调试串口ttyS2改为普通串口

    CPU:RK3399 系统:Android 7.1 串口需求量大时,会选择使用 spi 转串口,但是数据量大或者波特率较高时,传输会丢包. 调试串口 ttyS2 也可以让出来,供上层使用,下面是将 t ...

  4. 将JZ2440的调试串口换成com2

    众所周知JZ2440 V3很小巧,精致.今天单就JZ2440的串口来讨论一些问题.我们在用串口进行调试的时候,需要用JZ2440自带的一根USB线连接电脑USB口和开发板的USB-com1口.先来看一 ...

  5. 从0移植uboot(五) _实现串口输出

    串口作为一种非常简单的通信方式,才是嵌入式系统调试的王道,通过设置串口输出,我们可以将程序运行的情况直接通过串口线输出到屏幕上,对于这种异常重要的功能,uboot原生就提供了支持,但为此我们需要做一些 ...

  6. [日志] spring boot + logback 日志输出配置

    一.输出日志到控制台 springboot有很多starter(参考starter)方便快速构建项目依赖组件,logback是springboot默认的日志组件,启动即可看到打印在控制台输出的info ...

  7. (转) 从0移植uboot(五) _实现串口输出

    ref : https://www.cnblogs.com/xiaojiang1025/p/6500520.html 串口作为一种非常简单的通信方式,才是嵌入式系统调试的王道,通过设置串口输出,我们可 ...

  8. 痞子衡嵌入式:浅析IAR下调试信息输出机制之半主机(Semihosting)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之半主机(Semihosting). 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我 ...

  9. Anjuta 调试无输出 warning: GDB: Failed to set controlling terminal

    调试无输出,起初以为是那个warning的问题,后来才知道这个系统printf直到遇到'\n'换行符才输出,VC6用习惯了没想到还有这样的,网上说这样是节省系统资源. 那个warning暂时还没看到影 ...

随机推荐

  1. python学习第26天

    自定义模块和包 软件开发规范

  2. Python-Django-常用字段和参数

    -1 表模型如果不写主键,orm会自动创建一个主键 -2 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名 ...

  3. 如何给PDF文档添加和删除贝茨编号

    PDF文件的使用频率高了,我们也不只局限于使用PDF文件了,也会需要编辑PDF文件的时候,那么如何在PDF文件中添加和去除贝茨编号呢,应该有很多小伙伴都想知道吧,今天就来跟大家分享一下吧,小伙伴们就一 ...

  4. table切换jquery插件 jQuery插件写法模板 流程

    通过$.extend()来扩展jQuery 通过$.fn 向jQuery添加新的方法 通过$.widget()应用jQuery UI的部件工厂方式创建 通过$.extend()来扩展jQuery $. ...

  5. apache负载调优

    Apache负载调优 watch -n 1 -d "pgrep httpd|wc -l"  #apache动态查看连接数     ps aux | grep httpd | wc ...

  6. SqlServer数据库重命名报错误:5030

    无法重命名 KLENN 无法用排他锁锁定该数据库,以执行该操作(错误:5030) 解决办法: 将数据库设置为单用户模式 (单用户模式指定一次只有一个用户可访问数据库,该模式通常用于维护操作. ) 1. ...

  7. .NET Core 添加Java 服务引用(WebService) 曲折历程(二)

    简介: 以为添加完插件后获取内容会一帆风顺,认真你就错了...,安装之后异步结果各种Error错误,获取不到任何信息. 在这里给大家个建议,查资料还是要用微软必应:https://cn.bing.co ...

  8. day16匿名函数

    匿名函数,好像也就是 lambda 表达式 先来看一段函数,返回 def func(n): return n * 3 print(func(5))15 用lambda表达式写: func = lamb ...

  9. Beta(6/7)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  10. css 制作圆角、圆形图形布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...