十二、u-boot 调试--串口修改

  uboot 烧写进 norflash 进行调试

12.1 烧写后 串口不使能

  内存不能使能

  遍历代码,可以发现,在SDRAM 初始化之前,我们并没有设置时钟,但是SDRAM初始化后,我们已经开始用内存控制器了,这是不合理的,操作器件之前,我们必须把时钟给初始化。

  在源代码中,内存控制器初始化之前,并没有进行时钟的设置。加上时钟的设置。

  内存控制器的时钟 为MPLL,我们要把 MPLL 的初始化放入到 start.S 中进行初始化,取消board_init_f 执行的链表 init_sequence_f 的 board_early_init_f 函数中对MPLL 的设置即可。

  源代码的时钟的设置在 board_init_f 执行的链表 init_sequence_f 的 board_early_init_f 函数中,我们要把这些代码移动到 _start.S 中执行,在内存控制器初始化之前。

  还有就是必须关闭掉 终端的 静态显示:配置宏为CONFIG_CONSOLE_RECORD

12.1.1 修改 start.S 中的代码

  

12.1.2 注释掉 jz2440.c 对MPLL 的设置

  board_early_init_f 中

  

12.1.3 编译烧写

  

12.2 调试方法

  打开 openjtag 工具:

  

  点击 connect,然后点击 telnet,进入 telent 中运行:

  reset halt,

  

  halt

  

  读写前 4个 字节 ,与 uboot.bin 的二进制进行对比:

    

  uboot.bin 中的字节:

  

  可以看出读取的数据是正确的。

  从 step 0 开始执行,一步一步 查看数据是否正确:

  

  这样运行很慢,我们也可以将 uboot 文件进行 objdump 转码成 uboot.dis 文件,然后设置断点。

  在 board_init_f_alloc_reserve 这里设置断点,因为执行完了内存控制器初始化后,就开始执行此函数:

  uboot.dis  文件中的地址:

  

  

  我们在 0008444 那里设置一个硬件断点:

  

  然后  resume 继续执行:

  

  可以看出在 0x00008444 处暂停了,此时 内存已经初始化完了,应该是可以访问内存的。

  读内存:mdw 0x30000000

  

  写内存:mww 0x30000000 0x12345678,写完之后读取内存 mdw 0x30000000

  

12.1.2

  

    

  

原文地址:https://www.cnblogs.com/kele-dad/p/8998992.html

时间: 2024-11-09 02:46:31

十二、u-boot 调试--串口修改的相关文章

spring boot 1.5.4 整合 mybatis(十二)

上一篇:spring boot 1.5.4 整合log4j2(十一) Spring Boot集成Mybatis 更多更详细的配置参考文件:application.properties和<SpringBoot之application配置详解>(新版本新增属性缺失)  或参考官网http://projects.spring.io/spring-boot/ Spring Boot集成Mybatis有两种方式: 方式一:传统的引入外部资源配置的方式,方便对mybatis的控制: 方式二:mybatis

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十二:串口模块① — 发送

实验十二:串口模块① — 发送 串口固然是典型的实验,想必许多同学已经作烂,不过笔者还要循例介绍一下.我们知道串口有发送与接收之分,实验十二的实验目的就是实现串口发送,然而不同的是 ... 笔者会用另一种思路去实现串口发送. 图12.1 PS/2发送时序与串口发送时序. 如图12.1所示,串口发送时序相较PS/2发送时序,串口发送时序就像断了翅膀的小鸟般,没有时钟信号控制整个传输协议.除此之外,串口发送时序与PS/2发送时序近似的地方也非常惊人 ... 默认下,一帧PS/2数据有11位,对此一帧

android产品研发(二十二)--&gt;android实用调试技巧

转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了android UI优化方面的知识.我们讲解了android中的include.marge.ViewStub标签,在使用这些标签时可以简化我们的布局文件,优化组件绘制流程:讲解了android中的过度绘制相关知识点,通过优化我们的App过度绘制可以提高App的UI绘制流程与性能:我们还讲解了App中一些UI优化的小tips.更多关于android UI优化方面的知识可以参考我的:android产品研发(二十一)–>android中的UI优化

第十二章、软件包管理

第十二章.软件包管理 本章内容 ?软件运行环境 ?软件包基础 ?rpm包管理 ?yum管理 ?定制yum仓库 ?编译安装 软件运行和编译 ABI:Application Binary Interface Windows与Linux不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) 库级别的虚拟化: Linux: WINE Windows: Cywin API:Application Programming Interfa

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这

libevent源码深度剖析十二

libevent源码深度剖析十二 --让libevent支持多线程张亮 Libevent本身不是多线程安全的,在多核的时代,如何能充分利用CPU的能力呢,这一节来说说如何在多线程环境中使用libevent,跟源代码并没有太大的关系,纯粹是使用上的技巧. 1 错误使用示例 在多核的CPU上只使用一个线程始终是对不起CPU的处理能力啊,那好吧,那就多创建几个线程,比如下面的简单服务器场景.1 主线程创建工作线程1:2 接着主线程监听在端口上,等待新的连接:3 在线程1中执行event事件循环,等待事

将JZ2440的调试串口换成com2

众所周知JZ2440 V3很小巧,精致.今天单就JZ2440的串口来讨论一些问题.我们在用串口进行调试的时候,需要用JZ2440自带的一根USB线连接电脑USB口和开发板的USB-com1口.先来看一下JZ2440的串口大致连接图: 从S3C2440芯片上引出TXD0和RXD0到芯片PL2303,大家都知道PL2303是干嘛用的.在单片机开发板上一般都用这个芯片,它的作用就是USB转RS232电平,经过PL2303的转换之后,电脑和开发板即可通信,设置好参数后也就能够显示出开发板的打印信息了.J

Linux常用命令(十二)日志文件分析

? ? ? ? ? ? ? ? ? ? ? ? Linux常用命令(十二)日志文件分析 日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的"日记".不同的日志文件记载了不同类型的信息,如Linux内核消息.用户登录事件.程序错误等. 一.主要日志文件 ???? ? ? ? 在Linux系统中,日志数据主要包括以下三种类型. ■ 内核及系统日志: 这种日志数据由系统服务rslslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消