这一节主要讨论1个问题:点灯。点灯是实际开发中,特别是裸板开发中常见的调试手段,相当于主机开发中漫天飞舞的printf/printk。为了追踪程序的现场执行情况,很多时候我们都使用点一个灯的方法来进行初步的判断。如果你把刚才编译的程序烧录到SoC,你又怎么知道这个Uboot有没有工作呢?所以,我们在这里就要完成这样一个程序的改造。
虽说只是点一个灯, 但麻雀虽小五脏俱全, 也算是对uboot源码进行修改, 我总结了一点改造uboot的流程, 这一篇就按下面的改造流程来组织:

  1. 找运行逻辑,即插入代码的位置。
  2. 根据运行逻辑编写功能代码。
  3. 找配置逻辑,即修改哪些文件使配置生效。
  4. 根据配置逻辑修改配置使功能代码生效。
  5. 重新编译烧写uboot。

1. 找运行逻辑

我们希望板子在uboot的运行的时候就点灯示意, 所以应该在启动过程中尽可能考前的位置编写点灯代码, 根据上一篇对启动流程的叙述, 显然我们需要修改的文件就是"arch/arm/cpu/armv7/start.S ", 我们在启动代码之后添加我们的代码, 即"134行"

2. 编写功能代码

根据我的电路板。我的LED最终接在了GPF3_5接口,所以我配置相应的寄存器,点亮一个灯,并将这部分代码添加到"arch/arm/cpu/armv7/start.S +134"

135         msr     cpsr,r0
136
137 #if 1
138 ldr r0, =0x114001E0 @load GPF3CON address to register
139 ldr r1, [r0] @load data in GPF3_5CON
140 bic r1, r1,#0xff0000 @output 0x110000
141 orr r1, r1,#0x110000
142 str r1, [r0]
143
144 ldr r0, =0x114001E4 @load GPF3_5DAT address to register
145 mov r1, #0x20 @10 0000
146 str r1, [r0]
147 #endif
148 /*

3. 找配置逻辑。

这段代码不需要额外的配置即可工作

4. 修改配置

5. 重新编译烧写

改写完程序,重新编译uboot(强烈建议写脚本,我这里就不贴了),如果没有问题,我们的灯就可以亮了

(转)从0移植uboot (四) _点亮调试LED的更多相关文章

  1. 从0移植uboot (四) _点亮调试LED

    这一节主要讨论1个问题:点灯.点灯是实际开发中,特别是裸板开发中常见的调试手段,相当于主机开发中漫天飞舞的printf/printk.为了追踪程序的现场执行情况,很多时候我们都使用点一个灯的方法来进行 ...

  2. 从0移植uboot(六) _实现网络功能

    为uboot添加网卡功能可以让uboot通过tftp下载内核, 方便我们的开发, 对于网卡功能的移植,我们依然在在一遍又一遍的实践这个uboot改造的套路. 找运行逻辑,即插入代码的位置. 根据运行逻 ...

  3. (转)从0移植uboot(六) _实现网络功能

    ref:https://www.cnblogs.com/xiaojiang1025/p/6500532.html 为uboot添加网卡功能可以让uboot通过tftp下载内核, 方便我们的开发, 对于 ...

  4. 从0移植uboot (二) _启动流程分析

    经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,其次,此时的uboot.bin也没有结合 ...

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

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

  6. 从0移植uboot(三) _编译最小可用uboot

    前两篇介绍了uboot-2013.01的配置原理以及大体的运行流程,本文将讨论如何对uboot源码进行配置,将一个可用的uboot烧录到SD卡中. 定制自己的core board 市面上能买到的开发板 ...

  7. 从0移植uboot (一) _配置分析

    来源:Linux社区  作者:xiaojiang1025  :http://www.linuxidc.com/Linux/2017-02/141018.htm 和绝大多数源码编译安装一样,uboot的 ...

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

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

  9. (转)从0移植uboot(三) _编译最小可用uboot

    ref: https://www.cnblogs.com/xiaojiang1025/p/6436752.html 前两篇介绍了uboot-2013.01的配置原理以及大体的运行流程,本文将讨论如何对 ...

随机推荐

  1. 解决GitHub上传大于100M文件失败

    目录 问题 解决 参考 问题 push的时候遇到以下问题: remote: error: GH001: Large files detected. You may want to try Git La ...

  2. web-msg-sender的https支持改造

    用的是nginx代理转发443到2120端口实现,官方说workman原生支持,没有实现(现象是 访问 htttps://域名:2120/ 超时,不知道是服务器问题还是什么) 后转为用nginx代理转 ...

  3. Flutter移动电商实战 --(41)详细页_数据接口的调试

    建立数据模型层,我们的业务逻辑分开,然后进行后台数据的调试 生成model类 json数据: { "code": "0", "message" ...

  4. OpenTK学习笔记(2)-工作窗口的三种方法创建方法(winfrom下类的形式创建)

    参考资料: https://www.codeproject.com/Articles/1167212/OpenGL-with-OpenTK-in-Csharp-Part-Initialize-the- ...

  5. BitmapFactory之Options

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  6. 17flutter中的路由/命名路由/命名路由传值/无状态组件传值/有状态组件传值。

    main.dart import 'package:flutter/material.dart'; import 'package:flutter_demo/pages/Search.dart'; i ...

  7. kafka shell file

    1. start kafka and schema_registry #!/bin/sh export KAFKA_HOME=/home/lenmom/workspace/software/confl ...

  8. 小程序下载canvas生成图片

    save_share_img:function(img){ var that = this; let { result } = that.data; getData.getData( "sa ...

  9. pycharm重命名文件

    先右键要重命名的文件,然后按照下图操作:

  10. 【c# 学习笔记】类实例化

    类中可以定义的成员,包括字段.属性.构造函数.实例方法和析构函数等. 要访问这些实例成员,必须通过类的实例对象来完成.而要得到一个类的实例对象,就必须先声明一个该类类型的变量,然后使用new运算符后跟 ...