1. 刷机

  刷机是使用fastboot,所以板子首先要已经能运行uboot,若ROM没有uboot,则使用sd卡或usb启动uboot。

  板子进入uboot后,输入fastboot命令,进入fastboot模式,电脑能识别安卓设备。

  主机在命令行下运行fastboot工具,有如下常用命令及参数

fastboot devices                来查看当前连接的设备。
fastboot flash xxx
fastboot reboot fastboot flash bootloader android4.0/uboot.bin 烧uboot
fastboot flash kernel android4.0/zImage-android 烧linux kernel
fastboot flash system android4.0/x210.img 烧android rom

2. uboot的基本使用

  常用命令

print
set
save set ipaddr 192.168.3.22
set serveraddr 192.168.3.11 设置tftp-server bootm 0x30000000
go 0x30000000

3.基本裸机实验   led

首先准备好交叉编译工具链。

link.lds

SECTIONS
{
. = 0xd0024000; .text : {
start.o
* (.text)
} .data : {
* (.data)
} bss_start = .;
.bss : {
* (.bss)
} bss_end = .;
}

makefile

CROSS_COMPILE =  arm-none-linux-gnueabi
led.bin: start.o led.o
$(CROSS_COMPILE)-ld -Tlink.lds -o led.elf $^
$(CROSS_COMPILE)-objcopy -O binary led.elf led.bin %.o : %.S
arm-linux-gcc -o $@ $< -c -nostdlib %.o : %.c
arm-linux-gcc -o $@ $< -c -nostdlib clean:
rm *.o *.elf *.bin *.dis -f

start.S

#define WTCON        0xE2700000

#define SVC_STACK    0xd0037d80

.global _start
_start:
ldr r0, =WTCON
ldr r1, =0x0
str r1, [r0] ldr sp, =SVC_STACK mrc p15,0,r0,c1,c0,0;
orr r0, r0, #(1<<12)
mcr p15,0,r0,c1,c0,0; adr r0, _start
ldr r1, =_start
ldr r2, =bss_start
cmp r0, r1
beq clean_bss
copy_loop:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bne copy_loop clean_bss:
ldr r0, =bss_start
ldr r1, =bss_end
cmp r0, r1
beq run_on_dram
mov r2, #0
clear_loop:
str r2, [r0], #4
cmp r0, r1
bne clear_loop run_on_dram:
ldr pc, =led_blink

led.c

#define GPJ0CON        0xE0200240
#define GPJ0DAT 0xE0200244 #define rGPJ0CON *((volatile unsigned int *)GPJ0CON)
#define rGPJ0DAT *((volatile unsigned int *)GPJ0DAT) void delay(void); void led_blink(void)
{
rGPJ0CON = 0x11111111; while (1)
{
rGPJ0DAT = ((0<<3) | (0<<4) | (0<<5));
delay();
rGPJ0DAT = ((1<<3) | (1<<4) | (1<<5));
delay();
}
}
void delay(void)
{
volatile unsigned int i = 900000;
while (i--);
}

  汇编代码的必要性:

  (1)初始化硬件,(如 icache 必须用汇编)

  (2)重定位

  (3)设置栈

  重定位的必要性:

  由于有些指令是地址相关指令,所以必须保证链接地址和运行地址相同。

  地址相关指令: 指令使用的地址参数是链接地址,如 ldr pc, =led_blink ,这里 =led_blink 符号的值为 link.lds 设置的链接起始地址为基地址,并加偏移地址得到的值。

  地址无关指令:指令使用的地址参数是运行地址,如 adr pc, =led_blink,这里 =led_blink 符号的值为 运行时 的 pc 寄存器中的值作为基地址,并加偏移地址得到的值。

  设置栈

  栈基地址为 sp 寄存器,不同cpu状态有不同的sp寄存器。

4. source insight 准备 uboot

uboot分析——预备知识的更多相关文章

  1. LDA-线性判别分析(一)预备知识

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  2. BBS - 预备知识

    一.中介模型 四个项目: 苑昊 博客(BBS) (7-8) CRM 1.权限组件 (3) 2.start组件 -- admin (5) 1.使用 2.源码 django 源码 (面向对象) 以源码为导 ...

  3. 【协作式原创】查漏补缺之Golang中mutex源码实现(预备知识)

    预备知识 CAS机制 1. 是什么 参考附录3 CAS 是项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是 ...

  4. 预备知识-python核心用法常用数据分析库(上)

    1.预备知识-python核心用法常用数据分析库(上) 目录 1.预备知识-python核心用法常用数据分析库(上) 概述 实验环境 任务一:环境安装与配置 [实验目标] [实验步骤] 任务二:Pan ...

  5. 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识

    驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...

  6. 受限玻尔兹曼机(RBM)学习笔记(一)预备知识

    去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原 ...

  7. Linux之uboot分析与移植20160601

    说一下uboot分析与移植: 1.下载.建立source insight工程.编译.烧写.如果无运行分析原因 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2 ...

  8. 学习Identity Server 4的预备知识

    我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去. 这里需要使用identity server 4 做单点登陆. 下面就简单学习一下相关的预备知 ...

  9. JAVA面向对象-----面向对象(基础预备知识汇总)

    终于整理好了面向对象基础预备知识,但是有点多,所以你们懂的,贴图,较长的代码我还是会排版出来的,我不想把时间浪费在排版上在word里排版一次已经很浪费时间了,所以请谅解. public class C ...

随机推荐

  1. Chrome浏览器调试移动端网页,测试人员也可以轻松debug

    现在的产品,移动端应用占据很大市场,在测试过程中,就会测试各种各样的移动端页面.测试过程,或多或少会发现些问题,无非就是前端.后端问题.后端接口问题,可以利用工具:Fiddler或charles抓包查 ...

  2. python程序整理(1)

    ''' 用户登录验证 要求: 1. 系统⾃动⽣成4位随机数. 作为登录验证码. 直接用就好. 这里不用纠结 提示. 生成随机数的办法. from random import randint num = ...

  3. 【学习笔记】Min-max 容斥

    经常和概率期望题相结合. 对于全序集合 \(S\),有: \[\max S=\sum\limits_{T\subseteq S,T\not=\varnothing}(-1)^{\vert T\vert ...

  4. JetBrains-CLion永久激活教程

    前言 JetBrains Clion 是一款专为 C/C++ 开发所设计的跨平台 IDE.本文适用 JetBrains CLion v2019.3/3.1/3.2/3.3 永久激活,附破解补丁和激活码 ...

  5. Tomcat6.0 支持 https

    环境信息 Linux系统 + Tomcat  (程序页面可以运行前提下) 条件:安装了JDK 查看指定版本信息 1 进入$JAVA_HOME/bin目录     (一般是这个目录  /usr/java ...

  6. jmeter环境变量配置

    参考博客:超全 https://blog.csdn.net/qq_39720249/article/details/80721777

  7. Curl可以模拟浏览器

    curl直接访问被拒绝 [22:10:00 root@C7 ~]#curl -I www.163.com HTTP/1.1 403 Forbidden Date: Wed, 24 Jun 2020 0 ...

  8. 推荐4款个人珍藏的IDEA插件!帮你写出不那么差的代码

    @ 目录 Codota:代码智能提示 代码智能补全 代码智能搜索 Alibaba Java Code Guidelines:阿里巴巴 Java 代码规范 手动配置检测规则 使用效果 CheckStyl ...

  9. JUC之线程池-三大方法-七大参数-四种拒绝策略

    线程池:重点 三大方法 七大参数 四种拒绝策略 使用池化技术的理由: 我们的程序伴随着创建销毁线程十分浪费资源, 所以使用线程池,先创建线程,随用随取,用完归还 简单来说就是节约了资源. 使用线程池的 ...

  10. 使用AudioRecord录音

    虽然不知道头文件是咋回事,但是还是得到了一个MP3文件,音质也很清晰.AudioRecord是先把录制的声音保存为字节流文件,可以边保存边读取,头文件是把保存的字节流文件解析为音频格式. public ...