uboot分析——预备知识
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的基本使用
常用命令
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分析——预备知识的更多相关文章
- LDA-线性判别分析(一)预备知识
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- BBS - 预备知识
一.中介模型 四个项目: 苑昊 博客(BBS) (7-8) CRM 1.权限组件 (3) 2.start组件 -- admin (5) 1.使用 2.源码 django 源码 (面向对象) 以源码为导 ...
- 【协作式原创】查漏补缺之Golang中mutex源码实现(预备知识)
预备知识 CAS机制 1. 是什么 参考附录3 CAS 是项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是 ...
- 预备知识-python核心用法常用数据分析库(上)
1.预备知识-python核心用法常用数据分析库(上) 目录 1.预备知识-python核心用法常用数据分析库(上) 概述 实验环境 任务一:环境安装与配置 [实验目标] [实验步骤] 任务二:Pan ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 受限玻尔兹曼机(RBM)学习笔记(一)预备知识
去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原 ...
- Linux之uboot分析与移植20160601
说一下uboot分析与移植: 1.下载.建立source insight工程.编译.烧写.如果无运行分析原因 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2 ...
- 学习Identity Server 4的预备知识
我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去. 这里需要使用identity server 4 做单点登陆. 下面就简单学习一下相关的预备知 ...
- JAVA面向对象-----面向对象(基础预备知识汇总)
终于整理好了面向对象基础预备知识,但是有点多,所以你们懂的,贴图,较长的代码我还是会排版出来的,我不想把时间浪费在排版上在word里排版一次已经很浪费时间了,所以请谅解. public class C ...
随机推荐
- 试用 Azure Sql 数据库
我们的12月试用账号的免费服务里有一个Azure Sql服务,最近正好自己做一个小工具需要一个数据库,正好可以把它当测试库顺便体验一把Azure Sql. 概述 Azure SQL 数据库 Azure ...
- 【C语言程序设计】小游戏之俄罗斯方块(一)!适合初学者上手、练手!
俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法. 今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动.旋转. ...
- selenium基础--登录简单的网站
import time from selenium import webdriver from lxml import etree from selenium.webdriver import Act ...
- 第二十七章 Linux系统管理之定时任务
一.定时任务概述 1.含义:设定某个日期或时间周期性执行指令. 2.crond # 守护进程 分钟级别 rond是Linux系统中用来定期执行命令或脚本的一种服务软件,一般情况下,我们安装完CentO ...
- ABAP分享十: 文件的上传 方法一
前提条件:PARAMETERS P_files TYPE RLGRAP-FILENAME. AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_files.一.文件的 ...
- Linux基础命令之getent
getent命令简述 getent - get entries(entry的复数,条目.项目.记载.记录) getent命令可以用来察看系统的数据库中的相关记录 经常使用getent查看用户账号: 之 ...
- 通过命令行上传ipa到appstore
搞持续集成自动化打包上传到appstore遇到这个问题,记录一下. 其实主要就一条到命令: xcrun altool --upload-app -f xxxx.ipa -u "yanqizh ...
- v s
关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且只能修改变量,而synchronized可以修饰方法,以及代码块. ...
- springboot错误统一处理
1,对于404,500这类错误,可以直接新建public/error目录 ,在error目录 中新建404.html, 500.html或5xx.html,springboot会自动跳转到这些静态页面 ...
- vue响应式原理整理
vue是数据响应性,这是很酷的一个地方.本文只为理清逻辑.详细请看官方文档 https://cn.vuejs.org/v2/guide/reactivity.html vue的data在处理数据时候, ...