tp钱包下载app官网正版|bootloader模式

tp钱包下载app官网正版 2024-03-07 17:29:11

系统入门(1):安卓系统bootloader模式是什么?如何进入bootloader_android 启动失败init 进入bootloader-CSDN博客

>

系统入门(1):安卓系统bootloader模式是什么?如何进入bootloader_android 启动失败init 进入bootloader-CSDN博客

系统入门(1):安卓系统bootloader模式是什么?如何进入bootloader

最新推荐文章于 2022-10-24 11:08:10 发布

Jacob-wj

最新推荐文章于 2022-10-24 11:08:10 发布

阅读量2.5w

收藏

10

点赞数

4

分类专栏:

android 系统

android 系统

专栏收录该内容

19 篇文章

1 订阅

订阅专栏

安卓系统bootloader模式是什么?如何进入bootloader 在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。 在安卓系统当中,我们可以看出bootloader在系统当中是很底层的东西,如果在刷机的时候损坏了bootloader那肯定是无法开机的,如果问题严重的话可能需要重写底层,所以新手朋友们在刷机之前还是要了解一些刷机的专业知识。俗话说磨刀不误砍柴工,做好之前的学习准备,在刷机遇到问题的时候就更加游刃有余了。 当然有的品牌的手机bootloader是加了锁的,其目的就是为了防止用户私自刷机从而导致系统不稳定。虽然加了锁。但是在用户强烈的要求下还是能对bootloader的解锁。比如:HTC、华为、索尼等机器都能官方解锁,而三星则直接没有给bootloader加锁。 1、何为“Bootloader”?   Bootloader是一个Rom里的固件管理工具。使用它可以让你恢复出厂设置,用Fastboot刷机,加载Recovery工具。   在Bootloader里你也可以查看S-ON/S-OFF的状态,固件和Radio的版本等等。   进入Bootloader无需root或S-OFF。在每台HTC出厂的手机里都有。   2、如何进入Bootloader?   关机,然后按住音量-和电源键。(需要把“快速开机”关闭,在“设置”》“应用程序”里改。或者拔掉电池,让手机真正的关机。)   你可以直接拔电池来退出Bootloader。   如果你装了自制recovery的话,可以进入recovery,然后重启手机。 Android BootLoader及两种刷机模式fastboot和recovery 对于一个android手机用户加软件工程师,刷机而不知道它的内部原理,那是很痛苦的。本着学习的心态,还是去研究了一番。 首先,你要知道智能手机就是一台小电脑,如果你恰好用的是linux系统,那可以说两者在系统层面没有区别。因为android就是linux内核外加java虚拟机。当你开机时,机器首先要启动,CPU最先执行的一段程序就是BootLoader,这和电脑上的BIOS是一个玩意儿。它所做的事情就是初始化硬件,CPU时钟之类的,以及加载内核文件。BootLoader可以分为两个阶段。在阶段一,做了一些初始化,在阶段二,如果发现按键有特殊的组合,比如htc g2是回退键和开机键,就会进入fastboot模式。这里要说的是,内核还没有加载,所以更谈不上多进程任务调度之类的概念,机器只是在顺序执行一条条的指令。 BootLoader既然要做硬件初始化之类的,必然和硬件相关,所以它的代码并非通用的,不同的硬件需要不同的BootLoader代码,各大厂商可能都有自己的,并且加入开机画面之类的。最常听说的是uboot和hboot,后者是htc的bootloader。我们常说的刷机,是不会动bootloader的,只会动这之后的系统部分。 再说fastboot,它是bootloader后期进入的一个特殊阶段。可以通过数据线与电脑连接,然后在电脑上执行一些命令,如刷系统镜像到手机上。fastboot可以理解为实现了一个简单的通信协议,接收命令并更新镜像文件,其他什么的干不了。 如果没有进入fastboot,bootloader继续执行,如果又发现有特殊的按键组合,比如htc g2上是home键和开机键,则会进入recovery模式。分析recovery.img镜像文件就会发现,它里面包含了一个kernel以及一个可执行程序recovery,以及一些初始化文件。从某种意义来说,这就是一个小型操作系统,和正常启动进入的系统的kernel是一样的,只是init及之后干的事情不同。这里的kernel和我们常说的linux内核还是有差异的,linux内核是包括kernel以及调度器内存管理等除显示界面外完整系统。而kernel只是指内核init进程启动前的那一段逻辑。 在recovery模式下,会加载了部分文件系统,所以才可以读sdcard中的update.zip进行刷机,当然,也可以清除cache和用户数据。 讲到这里,我想说的是,既然recovery是一个小型操作系统并且有手机这样现成的设备,我们可以基于它做些有趣的事,比如移植网络协议及无线网络连接逻辑,然后开发一个命令行版的新浪微博客户端,这样就可以用自己改造的系统发微博了。当然,先改一个hello world版的recovery再说。也许还可以基于这些实践写一些帮助学习操作系统的教程。 Android手机的Bootloader以及一些概念解释  分类: Android系统 2013-05-03 01:24 208人阅读 评论(0) 收藏 举报  发现网上一些文章对bootloader,root等概念的解释不够清晰,甚至存在错误,所以把一些经验和大家分享一下,如有错误请指出微笑 一般懂Android的人都知道有一样叫Bootloader的东西,先解释一下他的用途 1.对硬件进行必要的初始化和检测错误 2.防止boot,recovery分区被写入。 有些人会问,boot,recovery分区是什么?其实Android就正如我们使用的桌面端一样,会把硬盘分区进行使用,只是这里Android是使用了Nand Flash而不是硬盘,boot分区里面有linux内核 + ramdisk。 而recovery分区里面也是有linux内核 + ramdisk,一般boot和recovery的内核是同一个,但recovery里面的ramdisk会有更多recovery需要使用的程序和数据。可见这2个分区都是很重要的分区,必须进行相应的保护。 但有趣的是Bootloader本身却是可以被升级的(前提是厂家提供的升级包,只有他们才知道bootloader的),其实就如我们电脑主板上的BIOS一样,是EEPROM,也是可以升级的。如我的xt720手机,是一款摩托罗拉的老手机了,它的Bootloader上锁+加密,这里注意上锁和加密是2个不同的东西: 1.上锁了,可以防止个人误操作,你解锁了,就可以随意修改boot和recovery的数据。 2.加密了,你想误操作都没机会,因为你没有解锁码。 所以,如果你要解锁,必须先得到解锁码,先解密了,然后才能解锁。 接下来再把一些概念弄清楚,root和bootloader解锁是没有任何关系的,root是开发者通过内核的一些漏洞而获得最高权限,root是在操作系统的层面,而bootloader是偏硬件的层面,有2种情况, 1.你root了,可以通过root修改system分区的数据,但你还是不能修改boot和recovery的数据,因为bootloader还没解锁。 2.而如果你bootloader解锁了,但你没有root,你连system分区的数据都无法修改。 这时候可能会有人疑问,为什么我bootloader上锁了,我还是能装recovery?还能刷ROM? 1.其实这个recovery不是真正的recovery,它不是真正安装在recovery分区的,他只是在读取boot分区完成后,读取Android操作系统前,执行了这个所谓的recovery,所以用户看起来就像进入了recovery,这种recovery被称为2ndinit。 2.关于能刷ROM的问题,这里刷ROM仅能改变system分区的内容,也就是改变了Android系统的内容,比如把2.2的UI换成4.0的,换一些framework等,但是boot分区的linux内核你是改不了的。这时候又有一种称为2ndboot的技术了,当从boot分区完成原厂内核的加载后,2ndboot把开发者的自定义内核替换掉当前内存中的内核。 2ndinit和2ndboot都是退而求其次的方法了,能真正bootloader解锁才是真正的王道啊!

优惠劵

Jacob-wj

关注

关注

4

点赞

10

收藏

觉得还不错?

一键收藏

知道了

0

评论

系统入门(1):安卓系统bootloader模式是什么?如何进入bootloader

安卓系统bootloader模式是什么?如何进入bootloader在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就

复制链接

扫一扫

专栏目录

研:检查并更新系统

hunter

04-09

477

目标:更新系统。

1.sdcard方式(卡刷)

2.fota方式 FOTA (Firmware Over-The-Air)

3.GOTA

power+volum-

四种模式:

start

power off

restart bootloader

recovery mode

反推法:

是否应该直接摒弃sdcard的方式?

原因是:没有实体的sdcard...

Android14之刷机模式总结(一百七十八)

最新发布

Android系统攻城狮

01-08

1235

1.bootloader模式2.recovery模式3.fastbootd模式Android设备的Fastboot模式、Recovery模式和Bootloader模式是三种不同的系统状态,各自具有特定的作用和功能。首先是Fastboot模式,它是一种用于刷写固件、解锁引导程序和执行其他低级系统操作的模式。在Fastboot模式下,设备可以与计算机进行连接,并通过Fastboot工具向设备发送命令,例如刷写新的系统图像或解锁引导程序。

参与评论

您还未登录,请先

登录

后发表或查看评论

嵌入式系统BootLoader技术内幕

03-02

本文详细地介绍了基于嵌入式系统中的OS启动加载程序――BootLoader的概念、软件设计的主要任务以及结构框架等内容。在专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行。一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:1.引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。2.Linux内核。特定于嵌入式板子的定制内核以及内核的启动参数。3.文件系统。包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs。4.用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可

嵌入式系统及应用:第4章bootloader与设备驱动.ppt

07-12

嵌入式系统及应用:第4章bootloader与设备驱动.ppt

android R vendor.boot-hal-1-1启动失败问题分析

楼中望月

07-22

5556

记一个android R上开机启动vendor.boot-hal-1-1进程启动失败的过程分析,总结一下下,也给需要的提供个参考。

问题:

在开机启动过程中,一直报错,vendor.boot-hal-1-1无法正常启动。

[ 18.037464] {1}[1:init]init: starting service 'vendor.boot-hal-1-1'...

[ 18.040238] {1}[1:init]init: Control message: Processed ctl.interf

Android源码分析 - init进程

qq_34231329的博客

06-29

787

本篇以android-11.0.0_r25作为基础解析PC启动会通过BIOS引导,从0x7c00处找到以0xaa55为结尾的引导程序启动。而Android通常使用在移动设备上,没有PC的BIOS,取而代之的是BootLoader。在CPU上电复位完成后,会从一个固定的地址加载一段程序,即BootLoader,不同的CPU可能这个地址不同。BootLoader是一段引导程序,其中最为常见的为U-boot,它一般会先检测用户是否按下某些特别按键,这些特别按键是uboot在编译时预先被约定好的,用于进入调试模式。

Android手机Bootloader的设计与实现 (2012年)

05-21

从研究市场上Android手机Bootloder的锁定情况着手,概述了Bootloader的基本功能和启动流程,针对Android手机常用的6种工作模式的转换过程,基于嵌入lLinux平台,提出了一种Android手机开关机设计参考方案,并详细设计出了LK的启动流程。其系统启动正常、运行稳定,达到了设计要求,对Android系统开发具有一定的借鉴意义和参考价值。

Android的bootloader

09-19

1122

安卓系统bootloader模式是什么?如何进入bootloader

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全

Android中ROM的制作

程序人生的专栏

10-21

1万+

Android的ROM

    首先介绍一下ROM的基本知识,其实按照比较科学的方法来说,Android的“ROM”这种叫法本身就是错误的,只不过是历史遗留的称呼罢了。看看定义吧,所谓的“ROM是只读内存(Read-Only Memory)的简称。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定 ,断电后所存数据

app逆向篇之常用命令及刷机

博客

10-24

4979

这篇仅用来记录学习及实践过程中的一些知识点,如有错误或不足之处,望大佬们不吝指教

Nexus 4 打开调试模式

萌萌的It人 www.itmmd.com

04-21

1501

【打开usb调试模式方法】 1.进入设置 选择 关于手机 ,进入后 点击 版本号 7次(才能开启 开发者模式 ) 2.然后返回 设置 就可以看见 开发者选项,进入后 usb调试 打勾 即可! 3.之后我们就可以安装一直手机助手之类的工具了,然后就完美连接手机了!       【进入fastboot mode模式】 手机处于关机状态下,按住音量下+音量上+开机键,大概6秒左右,就会自

深入嵌入式系统的 BootLoader

08-14

本文将从 BootLoader 的概念、BootLoader 的主要任务、BootLoader 的框架结构以及 BootLoader 的安装等四个方面来讨论嵌入式系统的 BootLoader。

嵌入式系统/ARM技术中的ARM工作模式和BOOTLOADER -2410

12-01

简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核...

Android 10.0系统启动之init进程-[Android取经之路]

纸上得来终觉浅,绝知此事要躬行

05-11

6758

摘要:init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。

阅读本文大约需要花费50分钟。

文章的内容主要还是从源码进行分析,虽然又臭又长,但是如果想要学习Android系统源码,这是必要走的路,没有捷径。

相对于碎片学习,我更倾向于静下心来花费1个小时认真的学习一段内容。

文章首发微信公众号:I.

Android系统分析——Bootloader(Lk)

android_sniper的专栏

04-01

4794

1、Crt0.S

2、bootable/bootloader/lk/app

Android系统分析——Bootloader(Lk)

LK是android系统的bootloader,是系统启动后的最早入口点(排除另一个核心modem部分)lk是little kernel的简称,如其名字一样,很多东西都做得很精简,但模块化实现的却很好,是一个真正的可抢占式多任务操作系统。其任务的总数可达到32个。而且其实现的功能也较丰富,包括:

多种nand设备支持;

加载多个Linux Kernel(其

Android 系统启动

qq_28334473的博客

12-14

222

1、init进程启动

init 进程是Android系统的第一个进程,很多重要职责,例如创建Zygote和属性服务等。 init位于路劲system、core/init.

1.1引入init进程

1.启动电源以及系统启动

2.引导程序Bootloader

3.linux内核启动

4.init进程启动

1.2引入init进程

在main函数中system/core/init/init.cpp

int...

STM32 BootLoader跳转之前关闭全部中断

qq_35257512的博客

12-30

3095

// 关闭全局中断

DISABLE_INT();

// 关闭滴答定时器,复位到默认值

SysTick->CTRL = 0;

SysTick->LOAD = 0;

SysTick->VAL = 0;

// 设置所有时钟到默认状态,使用HSI时钟

HAL_RCC_DeInit();

// 关闭所有中断,清除所有中断挂起标志

for (int i = 0; i < 8; i++)

{

NVIC->ICER[i]=0xFFFFFF...

Fastboot刷机

热门推荐

xxdw1992的博客

07-25

1万+

讲到这里,我想说的是,既然recovery是一个小型操作系统并且有手机这样现成的设备,我们可以基于它做些有趣的事,比如移植网络协议及无线网络连接逻辑,然后开发一个命令行版的新浪微博客户端,这样就可以用自己改造的系统发微博了。BootLoader既然要做硬件初始化之类的,必然和硬件相关,所以它的代码并非通用的,不同的硬件需要不同的BootLoader代码,各大厂商可能都有自己的,并且加入开机画面之类的。这里要说的是,内核还没有加载,所以更谈不上多进程任务调度之类的概念,机器只是在顺序执行一条条的指令。....

什么是BootLoader?它的功能是什么?它的工作模式是什么?详细阐述其工作过程。

05-10

BootLoader是一个程序,它在计算机启动时运行,并加载操作系统。它的主要功能是初始化硬件设备并启动操作系统内核,以便操作系统可以运行。BootLoader通常是操作系统安装程序的一部分,也可以作为单独的程序存在于系统中。

BootLoader的工作模式通常是两阶段的。在第一阶段,BootLoader会被加载到计算机内存中,并初始化硬件设备,如CPU、内存、硬盘等。它还会检查计算机的硬件配置,并确定哪个设备包含操作系统。在第二阶段,BootLoader将操作系统加载到内存中,并将控制权转移给操作系统内核。

BootLoader的工作过程可以分为以下几个步骤:

1. 加载BootLoader程序:计算机启动时,BIOS将加载BootLoader程序到内存中。

2. 初始化硬件设备:BootLoader程序运行后,会初始化计算机的硬件设备,如CPU、内存、硬盘等。

3. 检查硬件配置:BootLoader会检查计算机的硬件配置,确定哪个设备包含操作系统。

4. 加载操作系统:BootLoader将操作系统加载到内存中,并将控制权转移给操作系统内核。

5. 操作系统启动:操作系统内核运行后,开始执行其自身的初始化过程,如加载驱动程序、初始化网络等。

总之,BootLoader是计算机启动时运行的程序,其主要功能是初始化硬件设备并加载操作系统。它的工作模式是两阶段的,工作过程包括加载BootLoader程序、初始化硬件设备、检查硬件配置、加载操作系统和操作系统启动等步骤。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

Jacob-wj

CSDN认证博客专家

CSDN认证企业博客

码龄13年

暂无认证

506

原创

4万+

周排名

119万+

总排名

527万+

访问

等级

3万+

积分

1194

粉丝

469

获赞

324

评论

925

收藏

私信

关注

热门文章

git命令之git remote的用法

347894

git命令之git tag 给当前分支打标签

302912

比较常用的几个正则表达式(匹配数字)

217580

git submodule的使用

142630

git命令之git merge 合并分支

112313

分类专栏

编程技巧

8篇

linux工具和其他工具

51篇

windows

5篇

linux指令

11篇

ubuntu

31篇

git

37篇

设计模式

2篇

杂七杂八

7篇

Junit

3篇

物联网

SpringBoot 2.0 其实很简单

SpringBoot 2.0 技术教程

java

33篇

java 基础学习1

17篇

JavaWeb

8篇

JavaWeb-Spring

17篇

大数据&云计算

9篇

nginx/tomcat/apache

8篇

android 进阶

150篇

android 高级

44篇

android 开发基础

86篇

android 游戏开发

3篇

android 小例子

5篇

android 异常情况

41篇

android UI设计

55篇

android 性能优化

10篇

android 小知识

61篇

android 系统工具

14篇

android developer

2篇

android 网络

1篇

android 蓝牙

22篇

android 动画

12篇

android gradle

5篇

android 系统

19篇

adb 命令

8篇

开源框架

11篇

c&c++

3篇

DataBase

17篇

IOS UI基础

30篇

IOS 问题收集

8篇

AR&VR

maven

6篇

docker

11篇

python

8篇

性能优化

6篇

小程序

4篇

Vue

7篇

最新评论

【小程序】block标签的介绍和使用

郑建洋:

真的吗

【小程序】block标签的介绍和使用

郑建洋:

wfrfgfdsf

fdsfdfgdfgdfg dfs 烦烦烦

wefdsfffsdfdsf

Nginx 添加新模块(SSL、fastdfs-nginx-module 等)

lmk109420:

增加完模块儿后启动不报错但是访问不了。

git命令之git stash apply和 pop 的区别

兵豹哥:

谢谢。现在懂了这种区别了。

【小程序】block标签的介绍和使用

计算机魔术师:

只接受控制属性,可以

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

centos7设置mysql每日定时备份

白话解析:一致性哈希算法

centos7用rpm安装mysql5.7

2020年1篇

2019年26篇

2018年27篇

2017年24篇

2016年97篇

2015年78篇

2014年68篇

2013年248篇

2012年354篇

2011年1篇

目录

目录

分类专栏

编程技巧

8篇

linux工具和其他工具

51篇

windows

5篇

linux指令

11篇

ubuntu

31篇

git

37篇

设计模式

2篇

杂七杂八

7篇

Junit

3篇

物联网

SpringBoot 2.0 其实很简单

SpringBoot 2.0 技术教程

java

33篇

java 基础学习1

17篇

JavaWeb

8篇

JavaWeb-Spring

17篇

大数据&云计算

9篇

nginx/tomcat/apache

8篇

android 进阶

150篇

android 高级

44篇

android 开发基础

86篇

android 游戏开发

3篇

android 小例子

5篇

android 异常情况

41篇

android UI设计

55篇

android 性能优化

10篇

android 小知识

61篇

android 系统工具

14篇

android developer

2篇

android 网络

1篇

android 蓝牙

22篇

android 动画

12篇

android gradle

5篇

android 系统

19篇

adb 命令

8篇

开源框架

11篇

c&c++

3篇

DataBase

17篇

IOS UI基础

30篇

IOS 问题收集

8篇

AR&VR

maven

6篇

docker

11篇

python

8篇

性能优化

6篇

小程序

4篇

Vue

7篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

小米手机官方解锁BootLoader教程 - 知乎

小米手机官方解锁BootLoader教程 - 知乎切换模式写文章登录/注册小米手机官方解锁BootLoader教程俺叫德玛2019年7月11日更新,目前小米解锁风控提升,新机小米不是立马可以完成,需要等0-1200小时,未知时间目前的解决方案为:使用活跃度较高的小米账号进行解锁BootLoader(解锁之前-需将登陆的小米账号绑到都手机上,绑定步骤开发者模式-设备状态里可进行绑定:)1准备工作●注册小米账号:点击注册(已有小米账号请忽视)●在手机中登陆【小米账号】●下载并解压【小米解锁工具】2图文教程①打开【小米解锁官网】:http://www.miui.com/unlock/ ,点击【立即解锁】,输入【小米账号】点击【立即登录】,填写好上诉信息后,点击【立即申请】,输入【短信验证码】后,点击【下一步】等待手机收到【解锁申请通过】的短信后(一般三天左右即可申请通过),进行步骤②操作②打开【小米解锁工具.exe】,有弹窗提示,选择【同意】,填写【小米账号】和【密码】,点击【立即登录】③将手机关机,同时按住【电源键】+【音量下】,几秒后,手机将进入Fastboot模式(兔子界面),插上数据线连接电脑,点击【解锁】,显示【解锁成功】提示后,点击【重启手机】本教程适用于所有小米/红米机型不过还是有一些古董机型例外如何在fastboot界面刷入文件得按照下面的方式来搞解开BL锁的话需要在设置—关于手机—连续点击MIUI版本号直至弹出开发者模式已开启—设置—找到开发者模式—打开允许fastboot刷机即可发布于 2020-01-02 00:17​赞同 15​​8 条评论​分享​喜欢​收藏​申请

Bootloader开发:初识Bootloader - 知乎

Bootloader开发:初识Bootloader - 知乎切换模式写文章登录/注册Bootloader开发:初识Bootloader开心果NeedCar‍1. 什么是Bootloader首先Bootloader是一个独立的程序,如同Application程序一样,虽然Bootloader的体量小,但是“五脏俱全”,启动代码、中断、主程序(Boot_main函数)、操作系统(非必须)都有。百度百科的词条中,这样解释Bootloader:“Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行”。但是,这和汽车嵌入式开发多少有点不一样,具体先看一下ISO 14229-1给出的程序执行流程: 图1 Application与Boot Software交互上图我们可以看出,一个ECU包含了三个独立部分:Boot Manager、Application Software、Reprogramming Software。Boot Software = Boot Manager + Reprogramming Software。而汽车嵌入式开发中,我们常说的“Bootloader”是指Boot Software,后面我们简称Bootloader。2.为什么要用Bootloader我们先假设这样一个场景:车辆某个ECU只有Application Software,由于某种故障导致该ECU的Application Software异常,进而导致车辆故障,不能使用。既然属于Application Software问题,软件工程师修复好Application Software以后,重新将Application Software刷写进该ECU即可。问题来了:怎么将修复好的Application Software刷写进该ECU?为了解决这个问题,Bootloader应运而生,即:Bootloader是为更新Application Software而存在。既然是为更新Application Software而存在,Bootloader就没有必要时常更新。当车辆下线以后,Bootloader就固化在ECU指定内存区,不做更新,而Application Software可能会因用户的需求存在升级的可能。3.Bootloader如何更新App Software1、程序上电流程了解Bootloader如何更新Application Software之前,我们需要先了解程序上电的执行流程。如“图1 Application与Boot Software交互”所示:当ECU上电或者程序复位以后,最先执行Boot Manager代码,在这个过程中检查一下Application程序更新标志:ProgrammingRequest,判断一下Application是否请求升级。如果Application没有请求升级,那么再判断一下ApplicationValid标志,看看Application程序是否有效,如果有效就跳转到Application程序,即Application的主程序(main函数)。注意:如果是多核系统,跳转到core0_main()主程序,如果是单核系统,跳转到单核的main()程序;如果Application请求升级,程序跳转到Reprogramming Software,此时开始,Reprogramming Software对Application Software进行升级。多核系统补充:以英飞凌tc397为例,其包含6个核,1个主核与5个从核。为了区分每个核的应用程序主函数,用户可以自定义应用程序主函数名称,示例:void core0_main (void);

void core1_main (void);

void core2_main (void);

void core3_main (void);

void core4_main (void);

void core5_main (void);2、Application Software程序升级步骤对于汽车ECU的Application Software升级,OEM几乎都是遵循UDS规范。Application Software程序升级主要分为三个阶段:Pre-Programming Step、Programming Step、Post-Programming Step。Pre-Programming Step此阶段的主要​做一些Application Software升级前的检查,确保正式升级Application软件之前,车辆工况的安全性。这里举几个常见的检查条件:车速、诊断电压、KL15信号有效性等。车速:约束车速<3Km/h,也就是说不允许车辆行驶过程中进行软件升级。诊断电压:诊断电压会约束在一定的范围,比如:9V~16V,避免升级过程中,因电压过低或者过高导致刷写失败。KL15信号有效性:为了确保收到的信号质量,一般会检查这个信号的有效性(Valid or Invalid),有效的信号才能确保升级过程中的稳定性。当然,每家OEM的条件检查可能有所区别,但是,都为一个目的:安全。Programming Step经过了前面车辆工况的安全检查,此时可以进行Application Software的软件升级。Application Software的软件遵循UDS协议,主要流程如下:Step1:进入编程会话,只有特定的工况下(编程会话)才能进行Application Software升级。Step2:进行安全检查,通过OEM指定的算法进行Key的比对,主要是确认操作人员的合法性。就好比每个人只有自家的钥匙,自家的钥匙只能打开自家的门,而不能打开别人家的门一样,也就是Key的唯一性。Step3:写指纹信息,比如Application程序的软件版本号等。Step4:此过程将Flash Driver下载到ECU中,为擦除旧的Application Software做准备,确切说是下载内存擦除例程(memory erase routine)。一般Flash Driver不会放在ECU内部,担心程序异常跑到Flash Driver位置,将有效的Application擦除,所以,Flash Driver只有在Application程序升级时下载到ECU的RAM区。Step5:检查Flash Driver的有效性,只有Flash Driver成功下载,之后的Application程序擦除和更新才能成为可能。Step6:执行旧Application程序的擦除。Step7~Step8:与Step4~Step6功能类似,这里是下载Flash Driver的内存编程例程(memory programming routine)。在实际项目中,Step4~Step8就是Flash Driver的下载,包括memory erase routine和memory programming routine。Step9:刷写新的Application Software到ECU。Step10:更新Application Software以后,需要检查下载数据的完整性,确保数据可靠。Step11:检查Application Software的有效性,比如签名(signature)是否正确等。Step12:写配置信息,比如车辆VIN等。Post-Programming Step此阶段主要是Application Software更新后的网络恢复,即:Application Software更新好以后,重新参与工作。常用的做法就是执行ECU Reset,也可以让诊断刷写的S3时间超时,程序重新复位。************************************************************************************关注微信公众号“开心果 Need Car”,一起讨论Autosar开发中遇到的那些“坑”!************************************************************************************参考资料https://baike.baidu.com/item/Bootloader/8733520ISO 14229-1_2013(E).pdf编辑于 2022-08-21 15:43boot汽车电子嵌入式开发​赞同 163​​12 条评论​分享​喜欢​收藏​申请

Bootloader详解,理解Bootloader看这篇就够了-CSDN博客

>

Bootloader详解,理解Bootloader看这篇就够了-CSDN博客

Bootloader详解,理解Bootloader看这篇就够了

最新推荐文章于 2024-03-01 08:59:37 发布

「已注销」

最新推荐文章于 2024-03-01 08:59:37 发布

阅读量4.8w

收藏

822

点赞数

101

分类专栏:

车身域控制器软件开发

文章标签:

c语言

bootloader

arm

驱动程序

底层应用开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/iduuigdg/article/details/122144655

版权

车身域控制器软件开发

专栏收录该内容

2 篇文章

27 订阅

订阅专栏

Bootloader作用及实现步骤

一、Bootloader作用(目的)二、完成Boot最终目的的前提条件三、对前提条件的详细说明3.1、对前提条件(1)的说明:3.2、对前提条件(2)的说明:3.3、对前提条件(3)的说明:3.4、对前提条件(4)的说明:3.5、对前提条件(5)的说明:3.6、Boot阶段基本流程简单总结:

四、loader是干啥的

一、Bootloader作用(目的)

Bootloader=Boot + loader

Boot的目的: 最终目的:跳到C语言中;为了C语言运行程序会进行一系列的初始化,系统一上电后如何通过一系列的设置让软件程序员进入C语言/更高级语言环境的开发,这个过程就是boot的主要目的。

Loader的目的: 主要目的是开始执行应用逻辑,比如点灯:需要灯的接口开发;串口输入输出:需要串口编程;加载linux的内核:flash的编程、网卡的编程、内核启动前的初始化部分。根据不同的应用会有不同的变化。

一个开发板要想执行loader,要先看boot做了什么事。

二、完成Boot最终目的的前提条件

围绕boot的最终目的,对执行最终目的的前提条件进行说明: 前提条件: (1)让SP指向可读可写的设备空间中

(2)满足递减栈的规则—SP想办法放在内存的高段地址

(3)配置SDRAM的控制器。首选空间为SDRAM,SDRAM不是系统一上电就好,所以在做(1)、(2)之前要配置SDRAM的控制器,使SDRAM可以正常工作。

(4)配置系统工作时钟,通过代码对相应寄存器进行相关配置即可实现。

(5)关闭看门狗、中断、MMU、CACHE,通过汇编语言对相应的寄存器进行置位即可实现。

开发时前提条件的执行顺序:(5)、(4)、(3)、(1)、(2)

三、对前提条件的详细说明

3.1、对前提条件(1)的说明:

先看代码:

int main()

{

abc();//main函数中调用abc函数

}

int abc()

{

int a = 10;//假设用r0寄存器保存了立即数10,接下来跳到fun函数中

fun();//abc函数中调用fun函数

if(a xx)//函数fun返回后再判断a的情况,发现a不再是10

}

int fun()

{

int b = 20;/*假设同样用寄存器r0保存20,不用内存保存是因为寄存器的访问速度比内存访问速度快,

函数abc中的变量a在整个代码执行区中不需要再往回传给main函数了,a是一个临时的值,

寄存器r0只有一个,也只能保存一个,所以a只是出现一次,然后就不用了。当abc函数调用fun函数后,

寄存器r0中的值10会被20替换*/

}

在上述代码运行过程中,一旦函数abc又调用了函数fun,寄存器r0中的值会被替换,从10变成了20,函数fun在返回后就会出现问题:这时用if语句判断a的情况,会发现a已经不再等于10了。

如果按照上述逻辑去设计汇编的话问题会有很多。于此问题,C语言给我们提供了栈的概念—stack

栈的逻辑:先进后出、后进先出,压栈出栈是通过代码对指向栈区指针的值进行更新、赋值,进而对指针指向的内存空间进行读和写。由此有了栈指针概念—该指针必须指向一个具备可以进行读写的硬件空间。在Arm体系架构中,栈指针用寄存器SP来描述。何为可读可写——与应用程序思路不同,硬件上的可读可写如代码:

int a = 10;//这句话执行完后让以a为首地址的那段空间/设备把10赋进去

*(&a)==10;//进行解引用后将值取出来和10是相等的相当于将10写进去了

如果a的地址有问题,比如它指向的是一个不存在的空间。何为不存在的空间——0x2000 0000是内存机地址,但硬件公司只买了一个16M的内存,现在软件工程师想把a放在地址0x2100 0000,这个地址发出去后显然没有落到16M的范围内,那么对a的赋值就无法进行了。这时C语言无法帮我们进行压栈入栈的操作。

小结:栈指针一定要指向一个合法的设备——可读可写的地址空间。

3.2、对前提条件(2)的说明:

系统刚上电时SP指向的是0地址,即ROM,显然写不进去。所以在跳到C语言之前一定要让SP指向一个可读可写的设备区间中,SP首选指向地址是SDRAM中。如果用汇编写Bootloader: 代码为:

MOV SP, #0x2000 0000//跳之前将sp赋值

BL MAIN//跳到MAIN中

这样会出现问题,我们在学Arm基础时知道栈指针在C语言中有一个规范,称之为ATPCS,它规定C语言默认将SP作为栈指针,且SP指向的是一个向下压栈的过程,所以把栈指针指向内存的低地址不合适,SP指针一定要往上指,所以要满足递减栈的规则。 代码应为:

MOV SP, #0x2100 0000//跳之前将sp赋值

BL MAIN//跳到MAIN中

问题没完。既然指向地址0x2100 0000,而这个地址是内存,内存是一上电就能干活?不行,内存涉及到一个动态的充电过程。内存的访问:发出地址——直接把数据发给它——将数据写过去。 假设内存大小是16M,地址总线数计算: 存储总量=存储单元个数×存储字长, 然后:

=

2

线

存储单元个数 = 2^{地址总线位数}

存储单元个数=2地址总线位数

另:

1

M

B

=

1024

K

B

=

1024

B

1024

=

1048576

B

=

=

2

20

B

1MB=1024KB=1024B*1024=1048576B== 2^{20}B

1MB=1024KB=1024B∗1024=1048576B==220B

存储字长是什么: 存储字长:存储单元中的二进制代码(存储字)位数,存储字长可以是8位、16位、32位等。 早期计算机的存储字长一般和机器的指令字长与数据字长相等,故访问一次主存便可取一条指令或一个数据。随着计算机的应用范围的不断扩大,解题精度的不断提高,往往要求指令字长是可变的,数据字长也要求可变。为了适应指令和数据字长的可变性,其长度不由存储字长来确定,而由字节的个数来表示。1个字节(Byte)被定义为由8位(Bit)二进制代码组成。 存储字是指存放在一个存储单元中的二进制代码组合。一个存储字可代表一个二进制数,也可代表一串字符,如存储字为0011011001111101,既可表示为由十六进制字符组成的367DH(ASCII码),又可代表16位的二进制数,此值对应十进制数为13 949,还可代表两个ASCII码:“6”和“}”。一个存储字还可代表一条指令。 字长就是在同一时间中处理二进制数的位数叫字长。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。 存储字长是在内存中存储字的长度,可以是16bit或8bit

故:

16

M

=

2

线

×

16M=2^{地址总线位数}×存储字长

16M=2地址总线位数×存储字长

即:

(

2

4

2

20

)

B

=

2

线

×

(2^4*2^{20})B= 2^{地址总线位数}×存储字长

(24∗220)B=2地址总线位数×存储字长

存储字长为1,所以地址总线数为24。

所以这个内存有24根地址总线,用这24根地址总线就可以对16兆进行逐一编址。现在CPU只要发出对应的地址,就会进行数据的读写。

如果一个芯片的内存比较大,为了减小芯片的体积,需要减少地址总线的数目。如何用较少的地址线来将较大的内存全访问到?利用C语言中一维数组、二维数组的概念。 如代码:

int a[16];//在这里定义了16个字节(2^4),用4根线就能找到它(用4bit可以表示)

即用这4根线就能表示这16种状态。 现在想办法减少这4根线的数目,对于同样的空间我还可以怎样访问?如代码:

int b[4][4];//将16个字节分为4行4列

用这种方式访问时需要知道行数和列数,范围都是0~3,4个字节大小,现在用2bit就能表示(2根线访问)。先发出行坐标,再发出列坐标。 通过改成2维数组使得外部接口上的位数变少了。数组维数越大,在表示相同大小的内存时,需要的位数越小。

芯片内存的内部结构可以理解为一个多维数组,它由多个面构成,要想访问其中的一块空间,要先知道它在哪一个面上,然后知道它在这个面上的行、列坐标(地址)。内部结构大致如下图所示: 引出问题:现在发出地址0x2100 0000,要将这个地址转换为在这个芯片中的哪一个面上、哪一行上、那一列上。这个转换过程可以由软件程序员来自行分解,也可以由硬件做。软件做成本高、意义也不大,故而让硬件来帮我们确定。要让硬件做会引出另外一个概念:在芯片的datasheet中的DRAM CONTROLLER中规定了这一过程:见对前提条件(3)的说明中的内容。

细节补充说明:SP指针要往上指,但是不是随便指。在ARM体系中ARM工作分了7个工作空间。第一个:SVC模式,在系统复位后默认会用的一个模式,工作在Linux的kernel空间;第二个:IRQ模式,中断一旦发生后的运行模式;第三个:FIQ模式;第四个:USR模式,它对应的实际上就是Linux下的app,就是应用程序空间。 …等七个工作空间。 其中USR模式和SVC模式工作的空间都有自己的sp指针,这样用户空间操作的代码不会影响内核。这样会出现一个问题,内存假如只有一块,两个sp指针在遵循指向高地址的原则时可能会重复指向一个地址,所以在对sp赋值时要考虑用哪一个模式时要将sp分开,如何分开:对应每一个工作模式划分相应的可供使用的内存空间,如下图所示,但这时可能会出现另一个问题,如果USR的内存空间没有设计好,一旦发生死循环递归,栈会慢慢的往下延伸,会发生栈的溢出,溢出后会将SVC的空间内容修改了,那么在执行SVC时结果就错了,程序就跑得乱七八糟。 所以在执行前提条件(1)(2)的时候要考虑几个问题,首先要考虑用哪些空间/模式,就要初始化哪些模式下的sp,如何初始化:有一套专门用于模式切换的指令。其次在对sp赋值时有原则:每个模式的值不能重复、不能覆盖其他模式。

3.3、对前提条件(3)的说明:

CPU直接发出地址后现在要访问SDRAM,让CPU把想做的事情告诉给控制器,控制器根据我的配置(行地址数、列地址数、多少块、周期性充电问题、计算多久让它充一次电)

关于计算多久让它充一次电:CPU是一个脉冲波形,这里要引入时序的概念。 时序是芯片的心脏,每一个上升沿触发CPU干一件事,多久充一次电? 控制器凭什么知道经过多久可以充?所以要先配置控制器,在配置中又有一个问题,CPU和控制器都有自己的工作频率,它们共用同一个频率吗?即它们共用同一个时钟吗?因为外围控制器的成本/芯片工艺过程决定了控制器处理数据的能力较弱,导致不能同步接收到发送给它的数据,所以总时钟总线上的频率不会直接给控制器用,而是通过一个分频器,将频率降低后再给它用。所以还要先配置系统工作时钟。只有配置好了工作时钟才能计算出多久充一次电。

3.4、对前提条件(4)的说明:

在嵌入式开发过程中这一步是最耗时的,因为后期Linux内核最终还是运行在RAM,包括很多程序都是在RAM上运行,而RAM中,如果我们给它的频率不符合这款芯片本身的物理特性,那么很容易出现程序跑飞,在PC中就可能出现程序在运行时突然蓝屏,蓝屏的原因有很多,但是大部分都是由于内存的问题,有些时候买的内存的芯片的物理结构/质量不好,响应时间会很慢。举例:现在CPU要发出序列1101,现在芯片要想办法以一定的速度将这4bit发到数据总线上,或者说给到这片SDRAM上,假设CPU工作在1GHZ(这频率很快了),基本上1GHZ分之一再乘以4,这个时间就可以把4个比特发完了。SDRAM价格便宜,根本就不能同步响应1GHZ的CPU给的信息,那么内存工作就有问题,出现蓝屏。

配置SDRAM的难度就在于不仅要看懂SDRAM的芯片手册,同时还要懂得一定的硬件原理,包括一些调试经验,然后去动态的算出针对某一块开发板的SDRAM的具体工作参数。

3.5、对前提条件(5)的说明:

配置系统时钟之前还有一个问题,不是配了就马上工作正常,还要经过一段时间,在这期间还要引入看门狗。看门狗就是一个定时器,在一段时间之内,如果不对定时器进行重新的喂狗,一旦减到0就会触发一个中断/复位,CPU就相当于重启了。所以要保证有足够的长的时间来执行前提条件(1)、(2)、(3)、(4),所以在配置时钟之前为了安全起见还要把看门狗给关了。同时中断也要关了,因为我们还没进入到C或者说还没进到系统处理,即使中断来了,我们还不知道该怎么处理,因为我们的函数还没注册进去,这时最好把中断也关了,在调用main函数时再将中断打开。除此之外还可以关闭MMU、CACHE,MMU一般指的是有操作系统情况下才用,裸机程序上一般情况下为了简单一点可以不要管它,对于CACHE,指令CACHE无所谓可开可关,但是数据CACHE一般情况下在这时最好关了,虽然说速度可以提高,但是由于涉及到数据完整性的问题,有可能CACHE打开后数据的完整性就会有影响,这样给后期的调试带来很大麻烦,所以先关了它。

3.6、Boot阶段基本流程简单总结:

Boot最终目的是跳到C语言,在跳到C语言之前要考虑栈指针的初始化,因为C语言编译器要自动的利用SP指针来作为我们的栈空间,这样我们就必须要把SP指向一个可读可写的设备,具体赋什么值要根据规则来决定,然后再放到SDRAM上,紧接着SDRAM要想工作,在擦之前还要配置SDRAM,这个工作量比较大,包括:行地址数、列地址数、多少块、周期性充电问题,在配置SDRAM之前还要计算多久充一次电,所以还要配置系统时钟,而系统时钟工作还要一些前导,即关闭看门狗、中断、MMU、CACHE。

所以具体的来说,不管什么系统,要想设计一款Bootloader中的Boot阶段基本是要完成上述前提工作。最后根据每个系统的条件不同,还涉及到一个概念就是代码搬移。

为什么要代码搬移?一个芯片,系统启动时它会规定只能处理多少量的代码,如果代码量超过了规定的可处理的量,多余的代码就处理不了了,这时就要程序员自己把代码搬到一个更大的空间上去运行,要程序员自己对控制器进行控制,所以在main函数执行前也还要对相应存储器的控制器进行初始化,在代码搬移前还要初始化对应控制器,这样做软件工程师的工作量大一些,因为首先要看硬件公司用哪一个存储器启动,比如SD卡就要写SD卡的驱动,如果是NAND启动,就要写NAND的驱动,然后考虑怎么把代码快读搬到内存上,跳到内存上执行,一般来说代码搬移到RAM上,所以都要在SDRAM工作正常的基础上。其次是执行速度问题,如果代码本身之前工作在flash上,flash的执行速度比RAM慢得多,所以要把程序从存储器(nor-flash)搬移到快速的内存上运行。这就是我们说的代码搬移。

以上就是完成Bootloader中的Boot工作所要进行的一些事。

四、loader是干啥的

当MAIN函数跳过来之后(进入到C语言后)进行Loader的目的,即开始执行应用逻辑,这个要根据具体的工程代码来决定。

优惠劵

「已注销」

关注

关注

101

点赞

822

收藏

觉得还不错?

一键收藏

知道了

6

评论

Bootloader详解,理解Bootloader看这篇就够了

这里写目录标题一、Bootloader作用(目的)二、完成Boot最终目的的前提条件三、对前提条件的详细说明3.1、对前提条件(1)的说明:3.2、对前提条件(2)的说明:3.3、对前提条件(3)的说明:3.4、对前提条件(4)的说明:3.4、对前提条件(5)的说明:四、loader是干啥的一、Bootloader作用(目的)Bootloader=Boot + loaderBoot的目的:最终目的:跳到C语言中;为了C语言运行程序会进行一系列的初始化,系统一上电后如何通过一系列的设置让软件程序员

复制链接

扫一扫

专栏目录

Bootloader详解(源码+实验)研究BOOT必读

10-19

1、了解BootLoader 的基本概念和框架结构

2、了解BootLoader 引导操作系统的过程

3、掌握bootloader 程序的编译方法

4、掌握BootLoader 程序的使用方法

(1)、Boot Loader 的阶段1 通常主要包括以下步骤:

 硬件设备初始化;

 拷贝Boot Loader 的程序到RAM 空间中;

 设置好堆栈;

 跳转到阶段2 的C 入口点。

(2)、Boot Loader 的阶段2 通常主要包括以下步骤:

 初始化本阶段要使用到的硬件设备;

 系统内存映射(memory map);

 将kernel 映像和根文件系统映像从Flash 读到RAM 空间中;

 为内核设置启动参数;

 调用内核

…………………………………………………………

bootloader详解

11-30

arm-bootloader全程详解,提供详实的arm-bootloader全程详解,让你更好的理解系统启动过程。

6 条评论

您还未登录,请先

登录

后发表或查看评论

什么是bootloader?

muyouzhutian的博客

01-20

4800

什么是bootloader?

系统引导程序 Boot Loader——学习笔记

usstmiracle的博客

01-24

885

(1) 8.8. 配置引导加载器(Bootloader) - Debian. https://www.debian.org/doc/manuals/debian-handbook/sect.config-bootloader.zh-cn.html.一般来说,引导加载程序需要支持多种文件系统,能够识别不同的操作系统,提供友好的用户界面,支持安全启动等功能。由操作系统的引导加载程序完成,它负责读取操作系统的核心文件,设置启动参数,创建启动菜单,或者链载另一个引导加载程序。区,并跳转到内核的入口,将系统。

STM32F103的启动过程及BootLoader作用

qq_52907930的博客

12-10

523

本文主要介绍了STM的启动简介及BootLoader的作用。

深入嵌入式系统的 BootLoader

08-14

本文将从 BootLoader 的概念、BootLoader 的主要任务、BootLoader 的框架结构以及 BootLoader 的安装等四个方面来讨论嵌入式系统的 BootLoader。

BootLoader介绍

热门推荐

qq_51118175的博客

12-26

1万+

1.BootLoader的引入

2.BootLoader的启动方式

3.BootLoader的结构和启动过程

4.自己写一个BootLoader

BootLoader这个玩意

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。

10-26

2110

有了前面的概念和源码描述,这里进行最后的总结。1)初始化看门狗。2)初始化时钟。3)初始化串口。4)设置CPU模式的栈指针,进入SVC模式。5)初始化RAM。6)初始化MMC控制器,并将内核映像从MMC设备中读到0x48000000处的RAM地址中。7)清除BSS段。8)做好调用内核前的准备工作。9)跳转到RAM中的内核的第一条指令,引导过程完成。(SVC和SYS的区别知道吗?我们在UBoot的内容学习过)

bootloader详解(转载)

sdulibh的专栏

11-05

7572

一。bootloader介绍

bootloader是硬件在加电开机后,除BIOS固化程序外最先运行的软件,负责载入真正的操作系统,可以理解为一个超小型的os。目前在Linux平台中主要有lilo、grub等,在Windows平台上主要有ntldr、bootmgr、grldr等。这里以grub-0.97为基础描述bootloader的启动过程。

一般grub主要分为stage1和stage2两个...

浅谈bootloader【谈的很清晰明白】

星Yeah 的博客

11-25

6667

浅谈bootloader【谈的很清晰明白】

Bootloader概述和Uboot

hhltaishuai的博客

09-07

1283

u-boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。遵循GPL条款。从FADSROM、8xxROM 、PPCBOOT、Armboot逐步发展演化而来;当前版本号:参考Makefile。

Bootloader详解

01-30

详细介绍bootloader架构,为开发bootloader提供可视化说明

NXP bootloader开发详解

09-14

关于NXP 57XX 系列bootloader的开发详解 1. bootloader的功能详细介绍以及开发

saM的bootloader详解

06-15

基于arm的bootloader的开发,详解SAM的开发

DSP Bootloader详解

01-16

DSP Bootloader详解,写的还可以哦!!

c语言:将链表数据写入到文件,将数据读入链表

qq_57107322的博客

03-01

515

printf("入参为空,请检查\n");printf("入参为空,请检查\n");printf("入参为空,请检查\n");printf("空间申请失败\n");printf("空间申请失败\n");

LED照明

汽车以太网和SOA

02-15

3770

LED照明

STM32F103RCT6满足你大学本科四年STM32的使用

最新发布

03-05

STM32F103RCT6满足你大学本科四年STM32的使用

基于springboot+vue的的的学生干部管理系统(Java毕业设计,附源码,数据库).zip

03-05

Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。

包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。

该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

项目都经过严格调试,确保可以运行!

1. 技术组成

前端:html、javascript、Vue

后台框架:SpringBoot

开发环境:idea

数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑)

数据库工具:navicat

部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven

2. 部署

如果部署有疑问的话,可以找我咨询

后台路径地址:localhost:8080/项目名称/admin/dist/index.html

前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

单片机bootloader详解

07-29

单片机bootloader是一段特定的程序代码,位于单片机的内部存储器中,用于引导其他程序的运行。它的主要作用是在单片机上电后首先运行,负责初始化硬件和软件环境,并将应用程序从外部存储器中加载到内部存储器中运行。

单片机的bootloader通常由单片机厂商提供或开发,具有以下几个功能:

1. 硬件初始化:bootloader负责初始化单片机的各个硬件模块,包括时钟、中断、IO口等,确保单片机正常工作。

2. 外部存储器访问:bootloader能够读取外部存储器,如闪存、EEPROM等,从中加载应用程序到内部存储器中,实现程序的更新或更换。

3. 应用程序验证:bootloader可以对外部存储器中的应用程序进行验证,确保其完整性和正确性,避免加载错误的程序导致单片机异常甚至损坏。

4. 应用程序跳转:当应用程序加载完成后,bootloader会将控制权转交给应用程序,让其开始正常运行。这通常通过设置程序计数器(PC)来实现。

5. 通信接口支持:bootloader通常会提供一些通信接口,如串口、CAN总线等,以便与外部设备进行通信,例如PC机进行升级或调试。

单片机bootloader的设计与应用相当重要,它能够方便地对单片机进行在线升级、故障恢复和软件调试。同时,它也要求在尽可能小的存储空间内实现各种功能,并保证安全性和稳定性。因此,bootloader的设计需要仔细考虑各种情况和要求,以满足不同应用场景下的需求。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

「已注销」

CSDN认证博客专家

CSDN认证企业博客

码龄4年

暂无认证

12

原创

-

周排名

-

总排名

12万+

访问

等级

478

积分

86

粉丝

159

获赞

16

评论

1138

收藏

私信

关注

热门文章

Bootloader详解,理解Bootloader看这篇就够了

48681

C#、Qt、MFC,写上位机优先选哪个?

14935

CAN信号和硬线信号的区别

11041

32位芯片IO口的工作模式详解

7002

浅谈芯片中的Bootloader、Flash

6991

分类专栏

车身域控制器软件开发

2篇

Stateflow建模在车身域控制器中的应用

1篇

新能源汽车控制系统基础知识大杂烩

7篇

车身域控制器硬件电路详解

汽车通讯、诊断

1篇

行业问题

2篇

最新评论

Bootloader详解,理解Bootloader看这篇就够了

catstopher:

请问有搞过杰发AC78406基于UDS的boot吗,代码量必须小于20K,有方案的可以采购或者付费请教

Bootloader详解,理解Bootloader看这篇就够了

慕明青丝:

模拟只有一个寄存器的时候而已

Bootloader详解,理解Bootloader看这篇就够了

八五哥:

3.1的代码对吗?

Bootloader详解,理解Bootloader看这篇就够了

daviddaviddou:

巩固了很多基础的知识点

浅谈芯片中的Bootloader、Flash

小补桥工:

博主请教一下利用can对控制器进行上位机刷写,可以刷写控制器CAN通信的底层软件吗

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

32位芯片IO口的工作模式详解

浅谈芯片中的Bootloader、Flash

一文读懂pcb中的模拟信号

2022年2篇

2021年13篇

目录

目录

分类专栏

车身域控制器软件开发

2篇

Stateflow建模在车身域控制器中的应用

1篇

新能源汽车控制系统基础知识大杂烩

7篇

车身域控制器硬件电路详解

汽车通讯、诊断

1篇

行业问题

2篇

目录

评论 6

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

如何解锁安卓手机的Bootloader? - 知乎

如何解锁安卓手机的Bootloader? - 知乎首发于NAS狗切换模式写文章登录/注册如何解锁安卓手机的Bootloader?笨蛋师傅 ★前言 获得root权限和刷入第三方ROM的首要条件解锁安卓手机的Bootloader,有许多手机都能解锁Bootloader,下面将介绍解锁Bootloader的官方方法。 ★什么是Bootloader? Bootloader是在Android系统开始运行前的一个小程序,它是运行的第一个程序。Bootloader是OEM厂商(华为、小米和三星等)或者运营商加锁和限制的地方,一旦Bootloader锁上,你就无法在手机上安装其它操作系统。 Android启动过程 一句话,上锁的Bootloader安卓手机就像iPhone,手机厂商完全控制了你的手机。 只要它们给你推送一次更新(可以强制做到,除非你不联网),就能把你的手机变慢(请参考苹果降速门),甚至让手机不断重启和死机,这些在技术上都是可以做到的。 ★不是每一部手机都能让你解锁 世上有两种类型的安卓手机:一些可以让你解锁Bootloader,另一些就不能。 安卓手机能不能解锁Bootloader取决于手机制造商、手机型号和运营商。谷歌的Nexus手机全都是可以解锁的,一加、小米、三星、摩托罗拉和HTC的很多手机也能让你解锁Bootloader。 但是,其它手机和运营商定制的手机就没有官方解锁Bootloader的方法。如果你想要root和刷入第三方ROM,你只能等到业余开发者利用安全漏洞破解手机(类似于iPhone越狱),如果你是这种手机,这个指南帮不了你。 绝大多数手机厂商对自家手机的Bootloader情况都是讳莫如深的,所以你一般在手机规格里看不到这项参数。查看Bootloader解锁情况的最好的方法是上XDA Developers论坛去找,你也可以在网上搜索手机型号的Bootloader情况。 如果你的手机支持解锁Bootloader,请继续往下看。下面将介绍通用的解锁方法,有些手机有专门的解锁方法,请按照实际情况操作。 ★零、请备份数据 在我们开始之前,值得一提的是:这个过程将会清除你的所有数据。所以如果你在手机上有任何照片或文件需要保留的,请提前把它们转移出来。另外,如果你想保存Apps的设置,也请备份Apps的设置文件。 ★一、安装ADB 在《如何安装和使用ADB——Android调试桥工具》中,我们已经讲过了,这里再简单说一遍: 请注意,在启用“USB调试”时,如果“开发者选项”里面有一项叫作“OEM解锁”的选项,请启用它,如果没有就不用管了。 ★二、测试ADB 安装好ADB后,打开手机,用USB数据线把它连接到电脑。打开platform-tools文件夹,在文件夹空白处按住Shift键和鼠标右键,选择”在此处打开命令行窗口“,然后输入以下命令: adb devices 如果它显示一个序列号,说明您的设备被识别出来了,您可以继续操作。否则,请确保正确执行了上述步骤,更多详情请看《如何安装和使用ADB——Android调试桥工具》。 ★三、获取解锁码 如果你正在用Nexus设备,你可以跳过这一步,非Nexus设备很可能需要解锁码才能继续,找到手机厂商的解锁页面,例如: 小米: https://www.miui.com/unlock/ LG: https://developer.lge.com/resource/mobile/RetrieveBootloader.dev?categoryTypeCode=ANRS 摩托罗拉: https://motorola-global-portal.custhelp.com/app/standalone/bootloader/unlock-your-device-b 索尼: https://developer.sony.com/develop/open-devices/get-started/unlock-bootloader/ 接下来的步骤可能因不同的手机而不同,但手机厂商应该告诉你解锁的步骤。一般来说它的步骤会是这样的: 首先,关掉你的手机,启动到fastboot模式。这在每一部手机上都有所不同,但在大多数现代设备上,你可以通过按住电源键和减小音量键10秒来进入fastboot模式,你也可以在网上搜索如何进入fastboot模式。 用USB数据线把你的手机连接到电脑,你的手机应该会提示已连接。在电脑上,打开platform-tools文件夹,然后打开platform-tools文件夹,在文件夹空白处按住Shift键和鼠标右键,选择”在此处打开命令行窗口“。并使用该命令行窗口查找您的解锁密钥。(例如, 摩托罗拉手机要运行fastboot oem get_unlock_data, 而HTC手机就要运行fastboot oem get_identifier_token。) 命令提示符将以非常长的字符串形式给出一个序列号。选择并复制它,粘贴到手机制造商的解锁网站上,确保没有空格!并提交表格。如果你的设备是可以解锁的,你将收到一封带有解锁码或文件的电子邮件。 如果你的设备不能解锁,你会收到不能解锁的消息。 ★四、解锁你的手机 现在你准备好解锁了,如果你的手机还在fastboot模式,运行以下命令;如果不是,关掉手机并按住电源键和降低音量键10秒钟再释放,你应该就进入了fastboot模式。把你的手机用USB数据线连接到电脑上。 在电脑上,打开platform-tools文件夹,在文件夹空白处按下Shift+右击,选择“在此处打开命令行窗口”。 为了解锁你的设备,你需要运行一个简单的命令,对于大多数Nexus设备来说,这个命令是: fastboot oem unlock 如果你有更新的Nexus设备,例如Nexus 5X或6P,这个命令会有点不同: fastboot flashing unlock 如果你的设备不是Nexus,你的手机厂商会告诉你需要运行什么命令。例如,摩托罗拉手机需要运行“fastboot oem unlock UNIQUE_KEY”,unique key就是你从Email得到的解锁码,HTC设备会运行“fastboot oem unlocktoken Unlock_code.bin”,Unlock_code.bin文件就是你从HTC得到的解锁文件。 运行解锁命令后,你的手机可能会询问你是否要解锁,用音量键确认。 当你完成了,用屏幕上的菜单重启手机(或在PC上运行“fastboot reboot”命令)。如果一切正常,你应该会看到一条新信息显示Bootloader已经解锁了,几秒钟后,手机就会启动Android系统。在做其它事情(例如刷入第三方recovery)之前,让手机启动到Android系统是很有必要的。 恭喜你,你已经成功解锁了手机!在表面上看,手机解锁前后并没有什么不同,但是一个解锁Bootloader的手机可以让你刷入第三方recovery、获得root权限和刷入第三方ROM。 ★参考文献 How to Unlock Your Android Phone’s Bootloader, the Official Way 发布于 2020-05-18 21:30Android 手机Android 刷机bootloader (Android)​赞同 48​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录NAS狗向大家科普NAS基础知

刷机原理详解,fastboot和bootloader究竟有什么区别,recovery又是什么?刷机教程步骤分析_哔哩哔哩_bilibili

刷机原理详解,fastboot和bootloader究竟有什么区别,recovery又是什么?刷机教程步骤分析_哔哩哔哩_bilibili 首页番剧直播游戏中心会员购漫画赛事投稿刷机原理详解,fastboot和bootloader究竟有什么区别,recovery又是什么?刷机教程步骤分析

1.8万

49

2022-03-10 14:03:15

未经作者授权,禁止转载56224081025recovery是啥?工程模式?安全模式?挖矿模式?fastboot模式又是什么,和bootloader有什么关系。为什么刷机一定要先解bl锁,不解锁可以刷机吗?最后刷机详细步骤和用到的软件工具、网址链接等都在公众号最新一期。需要的小伙伴可以看看。大学生活碎片知识科学科普打卡挑战跟着UP主创作吧(第三期)

红帽小生

发消息

就读于十里铺炼钢职业技术学校

关注 745

智能AI桌宠,培养你的专属伙伴!

接下来播放

自动连播兄弟们,刷成砖了钢琴曲爱好者

51.1万

163

小米刷机刷废的下场眯眯眼的人参

36.0万

162

??????紫竹园园长

7409

0

安卓手机现在用recovery模式已经不能清除密码了!大家别信网上的教程了!一颗冬眠的懒蛇蛋

8.8万

3

它本应是用户的权利,却在逐渐消失......数码享记

128.3万

1722

乱刷机的后果(悲)一只red鱼

21.8万

64

0广告的开源安卓系统,LineageOS刷机教程科技老男孩

8.5万

87

求救大佬们这种情况该怎么办bili_12263146782

7941

0

有没有大佬救救我,手机刷机变砖了,9008端口和recovery也进不了,只能进fastboot,现在彻底变砖!丢了梦想的小碧

1.2万

5

单片机bootloader咋回事,5分钟分享浪人瞟客

1.5万

1

【手机刷机】还去手机店刷机?看完视频省下百来块的刷机费尛良言

8873

5

科普:关于bootloader和fastboot的那些事露天72676776

2.1万

33

fastboot功能的操作方法和用途microLite裸机系统

1689

0

这就是瞎刷机的后果,变成砖了K-Blaaaack

19.7万

139

嵌入式学习…简单粗暴讲干货 bootloader苏小关单片机毕业设计

1.0万

12

第三方recovery、root保姆喂奶级刷入教程,理论通用是陈南南啦

4.5万

5

Fastboot模式有人说按几个键就能好也有人说刷机也能好,但是这些方法都不行昵?该怎么办?今天我们就来修一台先烧WiFi后fast boot的小米11新哥手机维修

3129

0

如何实现简单bootloader蠢代码阿青子

1.2万

4

【蛋饼嵌入式】我提着鞋带拎自己?嵌入式芯片启动过程全解析,彻底理解bootloader蛋饼的爹地

9.6万

175

有人能告诉我怎么救砖吗小白不太会卡fastboot无法进系统-如你所愿--

1816

0

展开

小窗

客服

顶部

赛事库 课堂 2021

BootLoader_百度百科

Loader_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心BootLoader播报上传视频信息科学术语收藏查看我的收藏0有用+10本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序 [1]。中文名启动装载外文名BootLoader别    名引导加载程序说    明系统启动前引导程序操作模式启动模式、交互模式学    科信息科学应    用嵌入式操作系统目录1背景介绍2简介3操作模式4启动过程5常见的Bootloader▪Redboot▪ARMboot▪U-Boot▪Blob▪Bios-lt▪Bootldr▪vivi▪DSP的BootLoader6Bootloader移植背景介绍播报编辑Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行 [2]。对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader。Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序 [2]。反过来,大部分Bootloader仍然具有很多共性,某些Bootloader也能够支持多种体系结构的嵌入式系统。例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构,支持的板子有上百种。通常,它们都能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口 [2]。简介播报编辑通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式平台。因此,在嵌入式平台里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对bootloader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现 [3]。在专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行。一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:1、 引导加载程序:包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分 [3]。2、Linux内核:特定于嵌入式板子的定制内核以及内核的启动参数 [3]。3、 文件系统:包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs [3]。4、 用户应用程序:特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等 [3]。操作模式播报编辑大多数Bootloader都包含两种不同的操作模式 [3]:(1)启动加载模式在这种模式下,Bootloader从目标机的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是Bootloader的正常工作模式,因此在嵌入式产品发布时,Bootloader必须工作在这种模式下 [3]。(2)下载模式在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发主机(Host)上下载内核映像和根文件系统映像等到RAM中,然后可再被Bootloader写到目标机上的固态存储媒质中,或者直接进行系统的引导 [3]。启动加载模式通常用于第一次烧写内核与根文件系统到固态存储媒质时或者以后的系统更新时使用;下载模式多用于开发人员在前期开发的过程中,工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口 [3]。启动过程播报编辑Bootloader启动大多数都分为两个阶段。第一阶段主要包含依赖于CPU的体系结构硬件初始化的代码,通常都用汇编语言来实现。这个阶段的任务有 [4]:基本的硬件设备初始化(屏蔽所有的中断、关闭处理器内部指令/数据Cache等)。为第二阶段准备RAM空间。如果是从某个固态存储媒质中,则复制Bootloader的第二阶段代码到RAM [4]。设置堆栈。在第一阶段中为什么要关闭Cache?通常使用Cache以及写缓冲是为了提高系统性能,但由于Cache的使用可能改变访问主存的数量、类型和时间,因此Bootloader通常是不需要的 [4]。跳转到第二阶段的C程序入口点 [4]。第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的任务有 [4]:初始化本阶段要使用到的硬件设备。检测系统内存映射。将内核映像和根文件系统映像从Flash读到RAM。为内核设置启动参数。调用内核 [4]。常见的Bootloader播报编辑RedbootRedboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目 [5]。当前Redboot的最新版本是Redboot-2.0.1,Redhat公司将会继续支持该项目。Redboot支持的处理器构架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一个完善的嵌入式系统Boot Loader [5]。Redboot是在ECOS的基础上剥离出来的,继承了ECOS的简洁、轻巧、可灵活配置、稳定可靠等品质优点。它可以使用X-modem或Y-modem协议经由串口下载,也可以经由以太网口通过BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化(Flash下载更新和网络启动)。Redboot可以通过串口和以太网口与GDB进行通信,调试应用程序,甚至能中断被GDB运行的应用程序。Redboot为管理FLASH映像,映像下载,Redboot配置以及其他如串口、以太网口提供了一个交互式命令行接口,自动启动后,REDBOOT用来从TFTP服务器或者从Flash下载映像文件加载系统的引导脚本文件保存在Flash上。当前支持单板机的移植版特性有 [5]:- 支持ECOS,Linux操作系统引导- 在线读写Flash- 支持串行口kermit,S-record下载代码- 监控(minitor)命令集:读写I/O,内存,寄存器、 内存、外设测试功能等Redboot是标准的嵌入式调试和引导解决方案,支持几乎所有的处理器构架以及大量的外围硬件接口,并且还在不断地完善过程中 [5]。ARMbootARMboot是一个ARM平台的开源固件项目,它特别基于PPCBoot,一个为PowerPC平台上的系统提供类似功能的姊妹项目。鉴于对PPCBoot的严重依赖性,已经与PPCBoot项目合并,新的项目为U-Boot。ARMboot发布的最后版本为ARMboot-1.1.0,2002年ARMboot终止了维护 [5]。ARMboot支持的处理器构架有StrongARM ,ARM720T ,PXA250 等,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的 [5]。ARMboot的目标是成为通用的、容易使用和移植的引导程序,非常轻便地运用于新的平台上。ARMboot是GPL下的ARM固件项目中唯一支持Flash闪存,BOOTP、DHCP、TFTP网络下载,PCMCLA寻线机等多种类型来引导系统的。特性为:-支持多种类型的FLASH;-允许映像文件经由BOOTP、DHCP、TFTP从网络传输;-支持串行口下载S-record或者binary文件;-允许内存的显示及修改;-支持jffs2文件系统等 [5]。Armboot对S3C44B0板的移植相对简单,在经过删减完整代码中的一部分后,仅仅需要完成初始化、串口收发数据、启动计数器和FLASH操作等步骤,就可以下载引导uClinux内核完成板上系统的加载。总得来说,ARMboot介于大、小型Boot Loader之间,相对轻便,基本功能完备,缺点是缺乏后续支持 [5]。U-BootU-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch的Loader合称U-Boot。2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot和ARMboot停止维护 [5]。U-Boot自发布以后已更新6次,最新版本为U-Boot-1.1.1,U-Boot的支持是持续性的 [5]。U-Boot支持的处理器构架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM (ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)从名字就可以看出,它是在GPL下资源代码最完整的一个通用Boot Loader [5]。U-Boot提供两种操作模式:启动加载(Boot loading)模式和下载(Downloading)模式,并具有大型Boot Loader的全部功能。主要特性为 [5]:-SCC/FEC以太网支持;-BOOTP/TFTP引导;-IP,MAC预置功能;-在线读写FLASH,DOC, IDE,IIC,EEROM,RTC;-支持串行口kermit,S-record下载代码;-识别二进制、ELF32、pImage格式的Image,对Linux引导有特别的支持;-监控(minitor)命令集:读写I/O,内存,寄存器、内存、外设测试功能等;-脚本语言支持(类似BASH脚本);-支持WatchDog,LCD logo,状态指示功能等 [5]。U-Boot的功能是如此之强大,涵盖了绝大部分处理器构架,提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作。U-Boot1.1.1版本特别包含了对SA1100和44B0芯片的移植,所以44B0移植主要是针对Board 的移植,包括FLASH、内存配置以及串口波特率等等。U-Boot的完整功能性和后续不断的支持,使系统的升级维护变得十分方便 [5]。BlobBlob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw发布的,是专门为StrongARM 构架下的LART设计的Boot Loader [5]。Blob的最后版本是blob-2.0.5。Blob支持SA1100的LART主板,但用户也可以自行修改移植 [5]。Blob也提供两种工作模式,在启动时处于正常的启动加载模式,但是它会延时 10 秒等待终端用户按下任意键而将 Blob 切换到下载模式。如果在 10 秒内没有用户按键,则 Blob 继续启动 Linux内核。其基本功能为 [5]:初始化硬件(CPU速度,存储器,中断,RS232串口)-引导Linux内核并提供ramdisk;- 给LART下载一个内核或者ramdisk;-给FLASH片更新内核或者ramdisk;-测定存储配置并通知内核;-给内核提供一个命令行 [5]。Blob功能比较齐全,代码较少,比较适合做修改移植,用来引导Liunx,目前大部分S3C44B0板都用Blob修改移植后来加载uClinux [5]。Bios-ltBios-lt是专门支持三星(Samsung)公司ARM构架处理器S3C4510B的Loader,可以设置CPU/ROM/SDRAM/EXTIO,管理并烧写FLASH,装载引导uClinux内核。这是国内工程师申请GNU通用公共许可发布的 [5]。Bios-lt的最新版本是Bios-lt-0.74,另外还提供了S3C4510B的一些外围驱动 [5]。BootldrBootldr是康柏(Compaq)公司发布的,类似于compaq iPAQ Pocket PC,支持SA1100芯片。它被推荐用来引导Llinux,支持串口Y-modem协议以及jffs文件系统 [5]。Bootldr的最后版本为Bootldr-2.19 [5]。vivivivi是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这是vivi的默认模式。在下载模式下,vivi为用户提供一个命令行接口,通过接口可以使用vivi提供的一些命令,如下 [5]:命令功能Load 把二进制文件载入Flash或RAMPart 操作MTD分区信息。显示、增加、删除、复位、保存MTD分区Param 设置参数Boot 启动系统Flash 管理Flash,如删除Flash的数据vivi代码分析 vivi的代码包括arch,init,lib,drivers和include等几个目录,共200多条文件 [5]。Vivi主要包括下面几个目录 [5]:arch:此目录包括了所有vivi支持的目标板的子目录,例如s3c2410目录。drivers:其中包括了引导内核需要的设备的驱动程序(MTD和串口)。MTD目录下分map、nand和nor三个目录 [5]。init:这个目录只有main.c和version.c两个文件。和普通的C程序一样,vivi将从main函数开始执行。lib:一些平台公共的接口代码,比如time.c里的udelay()和mdelay() [5]。include:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器。Platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等 [5]。DSP的BootLoader一般的DSP都采用常见的BootLoader程序工作方式来实现用户程序的上电自举 [6]:1.处理器通信口(主端口)HPI方式--通过DSP芯片与PC机或DSP芯片与其它DSP芯片之间的主机通信端口实现上电自举;2.8位或16位并行EPROM方式--通过DSP内核的DMA通道实现上电自举;3.8位或16位并行I/O方式--通过DSP芯片的片外并行I/O接口实现上电自举;4.8位或16位串行口方式--通过DSP芯片的串行端口实现上电自举 [6]。在以上四种工作方式中,最常用的是16位并行EPROM方式。即在DSP芯片上电或复位时,通过DMA通道将存储在核外EPROM中的程序以16位形式存储到核内的程序空间中 [6]。各种方式的BootLoader程序都有其固定格式的Boot表,用来实现用户程序的上电自举。16位并行EPROM方式的Boot表如表所示 [6]:项1:存放BootLoader程序工作方式控制字,用于DSP芯片上电或复位时确认该Boot表是否为16位并行EPROM工作方式的Boot表。该表项内容为10AAH,表示DSP内核认为该Boot表是16位并行EPROM工作方式的BootLoader程序的Boot表;否则DSP内核认为该Boot表不是16位并行EPROM的方式的Boot表 [6];Boot表Boot表项2:存放DSP特殊寄存器SWWSR在上电或复位时被赋予的初始化数值 [6];项3:存放DSP特殊寄存器BSCR在上电或复位时被赋予的初始化数值 [6];项4:存放用户程序将要被存放在DSP核内程序空间的页地址 [6];项5:存放用户程序将要被存放到DSP核内程序空间的页内偏移地址 [6];项6:开始依次存放用户程序第m段代码的长度N。用户程序第m段代码将要被存放到DSP核内程序空间的页地址,用户程序第m段代码将要被存放到DSP核内程序空间的页内偏移地址,用户程序第m段代码的第1个字,第2个字,……,第N个字;Boot表的最后表项存放Boot表结束字0000H,表示Boot表到此结束。因此DSP内核要实现BootLoader程序,在上电复位后首先要申请到片外数据、地址总线的控制权,然后再根据Boot表完成用户程序上电自举过程 [6]。多核DSP的BootLoader程序的实现在实现多核DSP上电自举时,每一个子核都需要申请片外总线的控制权。对于单核DSP而言,只有一个DSP内核,对应一个BootLoader程序,DSP核可以永远拥有片外总线的控制权。但对于多核DSP而言,由于只有一套片外总线,所以片外总线的控制权不允许也不可能永远被其中的某一个DSP子核所拥有。因此,多核DSP需要片外总线仲裁机制,以避免片外总线冲突。DSP核的BootLoader程序总是在DSP核上电或复位时启动,且一启动BootLoader程序,对应的DSP核就要申请核外的总线控制权。因此为了避免多核DSP的各个DSP子核启动BootLoader程序时引起的片外总线冲突,可通过控制每个DSP子核的复位过程,使每个DSP子核在不同的时间内启动自身的BootLoader程序来解决片外总线冲突的问题 [6]。Bootloader移植播报编辑Bootloader广泛用于有操作系统的手持终端设备、智能家电及机顶盒等嵌入式设备上,它负责完成硬件初始化、操作系统引导和系统配制等,相当于PC机上的BIOS对于一个嵌入式的Linux系统而言,Bootloader是整个系统运行的基础。但是对于不同的ARM平台而言所使用的Bootloader都会有所不同。完成 Bootloader的移植是在特定的硬件平台上实现系统构建和运行的至关重要的一个步骤 [7]。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

Android 设备刷机通用指南 - 少数派

Android 设备刷机通用指南 - 少数派

PRIMEMatrix栏目Pi Store更多 无需申请,自由写作 任何用户都可使用写作功能。成功发布 3 篇符合基本规则的内容,可成为正式作者。了解更多退出登录反馈PRIMEMatrix栏目Pi Store更多 Android 设备刷机通用指南主作者关注青雪唐元少数派作者少数派作者 数码爱好者,向极客而生 青雪唐元关注青雪唐元少数派作者少数派作者 数码爱好者,向极客而生 联合作者关注青雪唐元少数派作者少数派作者 数码爱好者,向极客而生 青雪唐元关注青雪唐元少数派作者少数派作者 数码爱好者,向极客而生 2019 年 05 月 17 日 Matrix 精选Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。文章代表作者个人观点,少数派仅对标题和排版略作修改。2018 年我第一次接触刷机,初出茅庐的我为我的小米平板 1 刷上了系统 Lineage OS 15.1,并写下了 使用 Mac 为小米平板刷 lineage OS。彼时自己对于刷机这个过程颇为生疏,只是小心翼翼的按照教程一步一步操作,生怕有一丝一毫不一致的地方,而其背后每一步骤的原因却无从得知,故有意撰此文。一方面让准备刷机的人多一个教程可以参考,另一方面藉此机会充实自己,了解一些 Android 开发知识,也算是满足自己的好奇心罢。出于知识内容所限,本文仅讨论线刷模式,不讨论卡刷模式。

配置 Android SDK 的环境变量

SDK 的全称叫做软件开发工具包 (Software Development Kit) ,Android SDK 里面包含安卓软件的开发工具,这些开发工具均在 SDK 的安装目录下,拥有它们我们才能对 Android 中的软件进行安装、卸载等相关操作。当我们在终端输入指令要求启动某个工具或应用程序时,系统会优先在当下的目录中进行查找,如果没有则会在系统 Path 指定的路径下进行查找;而我们配置环境变量的这个过程,就是把 SDK 的安装目录记录在系统 Path 的指定路径中,让我们在终端能够直接使用 SDK 中的开发工具。该过程也叫做配置 ADB (Android Debug Bridge) 环境变量。

Mac 系统下的环境变量配置

参见:使用 Mac 为 Android 手机刷原生系统

Windows 系统下的环境变量配置

Windows 系统下由于其系统特点,目前(我知道的)有三种方案,将在以下展开,三种方法均适用于 Windows 10 系统,其他系统可能有些出入,读者可部分参考。

方案一:配置环境变量

参见:win10 如何配置 Android 开发环境变量

该方案和 Mac 系统下环境变量配置的原理一致,都是对系统进行操作。虽看起来步骤多,好处就在于一劳永逸,一次配置「终身」受用,除非你重装了系统,个人优先推荐该方法。

方案二:快速安装与使用 ADB

1 将 platform-tools 数据包解压,进入解压后的文件夹,按住 Shift 键的同时在空白处单击鼠标右键,选择「在此处打开命令窗口」(在 Win 10 创意者更新中被改为「在此处打开Powershell窗口」);2 输入 adb version 检测环境变量配置是否完成;这个方案相当偷懒,其实这个步骤并没有实现系统的环境变量配置,只是提供了一个临时的环境,但是无论如何这个方法是最方便的,而且对于新手而言非常友好。

方案二:直接访问 SDK 目录

1 将 platform-tools 放在一个接近硬盘根目录如 C:\adb 这样的地方便于访问,这时我们需要访问的目录为 C:\adb\platform-tools;2 在运行命令窗口中输入 cmd 打开命令符窗口,并按下回车执行;3 输入 cd adb\platform-tools ,并按下回车执行,进入目录;4 输入 adb version 检测环境变量配置是否完成。该方案和方案一比较像,都是偏向于临时解决环境配置问题,但是都没有实现系统的环境变量配置,因此每次使用时都要重新访问一次 SDK 的所在目录。

该方案看似简单、容易操作,但弊端明显,只有你在进入该目录的情况下,才符合「环境变量已配置」的条件,不建议没有代码基础的人操作。

解锁 Bootloader

一般而言,每个 Android 设备都会有 Fastboot / Bootloader 模式,它是负责引导操作系统内核启动的引导程序,只有在该模式是无锁的情况下,我们才能自由的 root 我们的设备、自定义或安装一个更加好用的第三方 ROM 固件,否则很容易损伤设备。与封闭的 iOS 系统不同, Android 系统是开源的,因而相应的各大厂商所开发的 Fastboot / Bootloader 模式也各有不同。尽管系统是开源的,但是各厂商为了对自己的设备有着更多的支配权,多数情况下都会对其 Fastboot / Bootloader 模式上锁。这就是为什么我们在刷机教程里经常看到 「Bootloader 解锁」这一步了。

Bootloader 解锁通用步骤

打开「开发者选项」,不同设备打开的方式不同,请读者根据自己设备机型自行百度一下;

先后打开「USB 调试」与「启用 OEM 解锁」(没有「启用 OEM 解锁」选项的设备则不用理会),该过程需要满足网络流(ke)畅(xue);

进入 Bootloader 界面等候;

打开 Terminal / CMD ,输入 Bootloader 解锁指令,并按下回车执行;如果你的设备为 Android 5.0 及以下,则解锁指令为 fastboot oem unlock ;如果你的设备为 Android 6.0 及以上,则解锁指令为 fastboot flashing unlock;

在设备端此时会弹出 Bootloader 解锁的确认界面,使用音量键移动关标选择确认,按下电源键开始解锁;

解锁后设备会被清除数据并重新启动,待设备开机后检查「USB 调试」选项;

重新进入 Bootloader 界面等候;

注意事项

解锁 Fastboot / Bootloader 模式后,可能会使保修相关服务失效;

解锁 Bootloader 的过程中,可能会还原设备一切资料,切记在此前做好资料备份工作;

解锁 Bootloader 的过程中,有一定损坏设备的风险;

该 Bootloader 解锁方式大体上对于 Android 设备通用,但是鉴于各厂商 Android 设备差异实在太大,建议如果有官方解锁通道就先去申请官方解锁,没有解锁通道再尝试该方法。当然对于从来没有放开 Bootloader 解锁权限的品牌(可自行百度),还是该放弃放弃吧。

刷入第三方 Recovery

设备一般都会自带一个官方初始的一个 Recovery ,其作用主要用于恢复出厂设置与OTA安装/升级,但是由于官方 Recovery 不能识别第三方 ROM ,而第三方 Recovery 却可以,所以我们一般在刷机之前都会先刷入第三方 Recovery 。目前比较推荐的第三方 Recovery 是 TWRP,该项目是一个社区开源项目,挂载在 GitHub 上。也许你会发现之前也有人推荐过 CWM ,很遗憾的是,该项目已于2014年停止了维护,如果你用的设备型号比较老的话,可能会用到它。

刷入第三方 Recovery 的通用步骤

准备好设备匹配的第三方 Recovery 版本,后缀为.img;

重启手机至 bootloader 模式,电脑端运行 Terminal/CMD;

输入 cd 你的第三方 Recovery 文件路径 ,并按下回车执行,以此来定向第三方 Recovery 的文件位置,接着输入 fastboot boot xxx.img(xxx 为具体的文件名),并按下回车执行,此时 Recovery 已经刷入,手机会重启至 Recovery 相应界面。

注意事项

该过程中需要定向 Recovery 的位置,故而如果你在 Windows 系统下的环境变量配置时用的是方案三,在这里会比较麻烦,解决方法是把你的第三方 Recovery 文件放在 platform-tools 目录下,让两个目录一致。

类原生 Android 系统 ROM 推荐

Lineage OS

Lineage OS 是 Android 的最大售后市场分销,以前称为 CyanogenMod。2016年开源项目 CyanogenMod 被宣布停止,被复刻为 Lineage OS ,由原团队 CyanogenMod 继续开发,源代码于 GitHub 可用。

Resurrection Remix OS

Resurrection Remix OS 基于 LineageOS 15.1,包含大量附加功能和定制选项。因为它提供了许多功能,所以成为了 Android 设备最受欢迎的自定义ROM,源代码于 GitHub 可用.Resurrection Remix OS

crDroid

crDroid 基于 Lineage OS,在此基础上附加其他性能调整和额外功能,源代码于 GitHub 可用。crDroid

Pixel Experience

Pixel Experience 基于 Android 开源项目 (AOSP) 与 Code Aurora 项目(CAF)开发,由于 Pixel Experience 中包含谷歌全家桶,故而相比与其他 ROM 包来说要大些,源代码于 GitHub 中可用。

Paranoid Android

Paranoid Android 的制作团队就是 Oxygen OS 的制作团队,该制作团队的核心成员被 Oneplus 聘请,为 Oneplus 做 ROM 开发,源代码于 GitHub 中可用。

AOSPEXTENDED ROM

AOSPEXTENDED ROM 基于 Android 开源项目 (AOSP) 开发,它提供了各种自定义特性和底层主题引擎,源代码于 GitHub 中可用。

XOSP

XOSP 是基于 CyanogenMod 13 的 ROM ,混合了很多 Xperia 的特性,带来不一样的感受。因为是 Xperia + AOSP 的混合体,因此命名为XOSP。

魔趣 ROM

魔趣 ROM 基于 Android 开源项目 (AOSP) 开发,Slogan 是「可能是中国最好的安卓开源系统」,源代码于 GitHub 可用。

总结

这些是我这些天各种查资料总结到的,由于个人能力与知识水平所限,会存在一些不足之处。如前辈们发现文中有错漏的问题,诚求各位不吝赐教。

附录

常用 ADB 命令

代码

含义

adb reboot bootloader

在 bootloader 模式下重启

adb push

将文件从本地系统复制到 Android 手机的位置

adb pull

将文件从 Android 复制到您的系统

adb devices

显示所有连接的 adb 兼容设备

adb backup

备份 Android 设备

adb install

将应用程序从系统的 apk 文件位置安装到 Android 设备上

adb reboot

在正常模式下重新启动 Android 手机

adb connect

通过 WiFi 网络使用adb命令

adb shell screencap

获取设备的屏幕截图

常用 Fastboot 命令

代码

含义

fastboot devices

显示连接的 Android 设备的序列号

fastboot oem unlock

解开 bootloader 锁(Android 5.0 及以下)

fastboot oem lock

恢复 bootloader 锁(Android 5.0 及以下)

fastboot flashing unlock

解开 bootloader 锁(Android 6.0 及以上)

fastboot flashing lock

恢复 bootloader 锁

fastboot flash recovery (filename)

在 bootloader 模式中向设备刷入文件

关联阅读:

Android 玩机终极指南参考链接

五步搞定 Android 开发环境部署——非常详细的 Android 开发环境搭建教程How to quickly install and use ADBWhat are Android SDK Platform Tools & How to Use ADB and Fastboot一贴解决几乎一切刷机问题!adb 和 fastboot 命令简易教程![教程] 采用神盾内核的lineageOS 14.1/ 15.1(更新至1103/1112)刷机教程

刷机常用知识 - 小米社区官方论坛Android Fastboot 与 Recovery 和刷机

​24543扫码分享 #Matrix首页推荐

#热门文章

#技巧

#Android

245 等 245 人为本文章充电 扫码分享

举报本文章

举报 青雪唐元少数派作者

数码爱好者,向极客而生

关注

全部评论(43)

请在登录后评论...

更多

推荐阅读

App 内打开 请绑定手机号码取消 前往绑定 关注公众号 sspaime 下载 App 联系我们 商务合作 关于我们 用户协议 常见问题 © 2013-2024 少数派 | 粤ICP备09128966号-4 | 粤B2-20211534© 2013-2024 少数派粤ICP备09128966号-4 | 粤B2-20211534 确定

安卓bootloader:三分钟让你彻底理解uboot的启动与功能_uboot loadaddr的确定-CSDN博客

>

安卓bootloader:三分钟让你彻底理解uboot的启动与功能_uboot loadaddr的确定-CSDN博客

安卓bootloader:三分钟让你彻底理解uboot的启动与功能

最新推荐文章于 2024-01-08 15:12:32 发布

kevin@1024

最新推荐文章于 2024-01-08 15:12:32 发布

阅读量3w

收藏

176

点赞数

13

分类专栏:

linux

文章标签:

uboot

bootloader

android启动

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/kai_zone/article/details/80443820

版权

linux

专栏收录该内容

21 篇文章

18 订阅

订阅专栏

1.  Bootloader简介

      系统上电后,需要一段程序来进行初始化:关闭看门狗,改变系统时钟,初始化存储控制器,将更多的代码复制到内存中等。它就是bootloader。

      bootloader的实现非常依赖具体硬件,在嵌入式系统中,硬件配置千差万别,即使是相同的CPU,它的外设(比如flash)也可能不同,所以不可能有一个bootloader支持所有的CPU,所有的电路板。即使是支持CPU架构比较多的UBoot,也不是一拿来就可以使用(除非里面的配置刚好和你的板子相同)。需要进行一些配置。

      CPU上电后,会从某个地址开始执行,比如MIPS结构的CPU会从0xBFC00000取第一条指令,而ARM结构的CPU则会从0x00000000开始,嵌入式开发板中,需要把存储器件的ROM或Flash等映射到这个地址,Bootloader就存放在这个地址的开始处,一上电就开始执行。(手机中的RAM和ROM分别对应电脑的内存和硬盘)

2.  启动流程。

u-boot系统启动流程 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。

依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。

1.Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇编语言写成,其主要代码部分如下

(1) 定义入口。: 该工作通过修改连接器脚本来完成。

(2)设置异常向量(Exception Vector)。 

(3)设置CPU的速度、时钟频率及终端控制寄存器。 

(4)初始化内存控制器。 

(5)将ROM中的程序复制到RAM中。 

(6) 关中断,关看门狗

(7)初始化堆栈,清bss段,为第二阶段准备。

(8)转到RAM中执行,该工作可使用指令ldr pc来完成。

2、Stage2

      C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作: 

(1)调用一系列的初始化函数。 

(2)初始化存储设备

(3)初始化简单硬件如串口,lcd等 

(4)初始化相关网络设备,填写IP、MAC地址等。 

(5)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

3、U-Boot的启动顺序

主要顺序如下图所示

                                                 图为 U-Boot顺序 下面就根据代码进行解释: /*********************** 中断向量 ***********************/ .globl _start                         //u-boot启动入口 _start: b       reset               //复位向量并且跳转到reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq                     //中断向量 ldr pc, _fiq                     //中断向量 b  sleep_setting             //跳转到sleep_setting

并通过下段代码拷贝到内存里

       relocate:                             //把uboot重新定位到RAM       adr r0, _start                  // r0 是代码的当前位置        ldr r2, _armboot_start               //r2 是armboot的开始地址       ldr r3, _armboot_end                //r3 是armboot的结束地址       sub r2, r3, r2                      // r2得到armboot的大小 

       ldr r1, _TEXT_BASE            // r1 得到目标地址         add r2, r0, r2                       // r2 得到源结束地址        copy_loop:                             //重新定位代码

ldmia r0!, {r3-r10}                  //从源地址[r0]中复制stmia r1!, {r3-r10}                  //复制到目标地址[r1]cmp  r0, r2                        //复制数据块直到源数据末尾地址[r2]

       ble copy_loop

系统上电或reset后,cpu的PC一般都指向0x0地址,在0x0地址上的指令是

reset:                                 //复位启动子程序

/******** 设置CPU为SVC32模式***********/

mrs r0,cpsr                       //将CPSR状态寄存器读取,保存到R0中 bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0                         //将R0写入状态寄存器中 /************** 关闭看门狗 ******************/ ldr      r0, =pWTCON mov     r1, #0x0 str       r1, [r0] /************** 关闭所有中断 *****************/ mov r1, #0xffffffff ldr r0, =INTMSK str r1, [r0] ldr r2, =0x7ff ldr r0, =INTSUBMSK str r2, [r0]/************** 初始化系统时钟 *****************/ldr r0, =LOCKTIMEldr     r1, =0xffffff str     r1, [r0]clear_bss:        ldr       r0, _bss_start           //找到bss的起始地址         add      r0, r0, #4              //从bss的第一个字开始         ldr       r1, _bss_end           // bss末尾地址         mov      r2, #0x00000000       //清零  clbss_l:str        r2, [r0]                // bss段空间地址清零循环         add     r0, r0, #4        cmp     r0, r1        bne      clbss_l

/***************** 关键的初始化子程序 ************************/ / * cpu初始化关键寄存器 * 设置重要寄存器 * 设置内存时钟 * / cpu_init_crit: /** flush v4 I/D caches*/ mov r0, #0 mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */ /************* disable MMU stuff and caches ****************/ mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS) bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM) orr r0, r0, #0x00000002 @ set bit 2 (A) Align orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache mcr p15, 0, r0, c1, c0, 0 /******* 在重新定位前,我们要设置RAM的时间,因为内存时钟依赖开发板硬件的,你将会找到board目录底下的memsetup.S。**************/ mov ip, lr #ifndef CONFIG_S3C2440A_JTAG_BOOT bl memsetup        //调用memsetup子程序(在board/smdk2442memsetup.S) #endif mov lr, ip mov pc, lr                        //子程序返回 memsetup:    /**************** 初始化内存 **************/         mov     r1, #MEM_CTL_BASE         adrl    r2, mem_cfg_val         add     r3, r1, #52 1:       ldr     r4, [r2], #4         str     r4, [r1], #4         cmp     r1, r3         bne     1b /*********** 跳转到原来进来的下一个指令(start.S文件里) ***************/   mov     pc, lr                 //子程序返回 /****************** 建立堆栈 *******************/ ldr r0, _armboot_end               //armboot_end重定位 add r0, r0, #CONFIG_STACKSIZE    //向下配置堆栈空间 sub sp, r0, #12                  //为abort-stack预留个3字 /**************** 跳转到C代码去 **************/ ldr pc, _start_armboot           //跳转到start_armboot函数入口,start_armboot 字保存函数入口指针 _start_armboot: .word start_armboot    //start_armboot函数在lib_arm/board.c中实现 从此进入第二阶段C语言代码部分 /**************** 异常处理程序 *******************/ .align  5 undefined_instruction:               //未定义指令 get_bad_stack bad_save_user_regs bl  do_undefined_instruction .align 5 software_interrupt:                   //软件中断 get_bad_stack bad_save_user_regs bl  do_software_interrupt .align 5 prefetch_abort:                      //预取异常中止 get_bad_stack bad_save_user_regs bl  do_prefetch_abort .align 5 data_abort:                          //数据异常中止 get_bad_stack bad_save_user_regs bl  do_data_abort .align 5 not_used:                            //未利用 get_bad_stack bad_save_user_regs bl  do_not_used .align 5 irq:                                   //中断请求 get_irq_stack irq_save_user_regs bl  do_irq irq_restore_user_regs .align 5 fiq:                                   //快速中断请求 get_fiq_stack /* someone ought to write a more effiction fiq_save_user_regs */ irq_save_user_regs bl  do_fiq irq_restore_user_regs sleep_setting:                           //休眠设置 @ prepare the SDRAM self-refresh mode ldr r0, =0x48000024 @ REFRESH Register ldr r1, [r0] orr r1, r1,#(1bd = &bd_data; memset (gd->bd, 0, sizeof (bd_t)); monitor_flash_len = _armboot_end_data - _armboot_start; /*** 调用执行init_sequence数组按顺序执行初始化 ***/ for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr){

if ((*init_fnc_ptr)() != 0)

  {

  hang ();

}

}

#if 0 /**************** 配置可用的flash单元 *************/ size = flash_init ();             //初始化flash

display_flash_config (size);      //显示flash的大小

/******** _arm_boot在armboot.lds链接脚本中定义 ********/ #endif #ifdef CONFIG_VFD #  ifndef PAGE_SIZE #  define PAGE_SIZE 4096 #  endif /*********** 为VFD显示预留内存(整个页面)  **********/ /******** armboot_real_end在board-specific链接脚本中定义********/ addr = (_armboot_real_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); size = vfd_setmem (addr); gd->fb_base = addr; /******* 进入下一个界面 ********/ addr += size; addr = (addr + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); mem_malloc_init (addr); #else /********  armboot_real_end 在board-specific链接脚本中定义 *******/ mem_malloc_init (_armboot_real_end); #endif    /* CONFIG_VFD */ #if (CONFIG_COMMANDS & CFG_CMD_NAND) puts ("NAND:"); nand_init();  /* NAND初始化 */ #endif #ifdef CONFIG_HAS_DATAFLASH AT91F_DataflashInit(); dataflash_print_info(); #endif /********* 初始化环境 **********/ env_relocate (); /*********** 配置环境变量,重新定位 **********/ #ifdef CONFIG_VFD /* must do this after the framebuffer is allocated */ drv_vfd_init(); #endif /* 从环境中得到IP地址 */ bd_data.bi_ip_addr = getenv_IPaddr ("ipaddr"); /*以太网接口MAC地址*/ {   int i;   ulong reg;   char *s, *e;   uchar tmp[64];   i = getenv_r ("ethaddr", tmp, sizeof (tmp));   s = (i > 0) ? tmp : NULL;   for (reg = 0; reg bd->bi_enetaddr); #endif #ifdef CONFIG_DRIVER_LAN91C96 if (getenv ("ethaddr")) {   smc_set_mac_addr(gd->bd->bi_enetaddr); } /* eth_hw_init(); */ #endif /* CONFIG_DRIVER_LAN91C96 */ /* 通过环境变量初始化*/ if ((s = getenv ("loadaddr")) != NULL) {   load_addr = simple_strtoul (s, NULL, 16); }  #if (CONFIG_COMMANDS & CFG_CMD_NET) if ((s = getenv ("bootfile")) != NULL) {   copy_filename (BootFile, s, sizeof (BootFile)); } #endif /* CFG_CMD_NET */ #ifdef BOARD_POST_INIT board_post_init (); #endif /* main_loop() 总是试图自动启动,循环不断执行*/ for (;;) {   main_loop (); /*主循环函数处理执行用户命令—common/main.c } /* NOTREACHED - no way out of command loop except booting */ }

UBOOT 学习心得(UBOOT流程分析):

UBOOT 学习心得(UBOOT流程分析)

        

     

优惠劵

kevin@1024

关注

关注

13

点赞

176

收藏

觉得还不错?

一键收藏

打赏

知道了

2

评论

安卓bootloader:三分钟让你彻底理解uboot的启动与功能

1. Bootloader简介 系统上电后,需要一段程序来进行初始化:关闭看门狗,改变系统时钟,初始化存储控制器,将更多的代码复制到内存中等。它就是bootloader。 bootloader的实现非常依赖具体硬件,在嵌入式系统中,硬件配置千差万别,即使是相同的CPU,它的外设(比如flash)也可能不同,所以不可能有一个bootloader支持所有的CPU,所...

复制链接

扫一扫

专栏目录

ADuCM-Bootloader:ADuCM360的简单启动代码

05-01

ADuCM引导程序

ADuCM360的简单启动代码

界面

引导加载协议符合基于Cortex-M3的ADuCxxx串行下载协议(基于Analog Devices的AN-1160)。 它可以使用ADUCINO板上的P0.1和P0.2上的UART0或使用P0.5和UART P0.6和P0.7上的RS485进行方向控制(#define ADUCINO_UART)。 对于RS485,它使用序列来区分消息已启动(可以通过#define DISABLE_RS485_SENTINELS禁用此功能),波特率固定为115200(但可以在代码中轻松更改)。

Flash版式

地址0-0x1800保留用于引导程序,其余地址用于应用程序。 应用程序描述符以3个字存储在以0x1000开头的页面中:

幻数(0xBEA70001)

应用程序起始地址(取自init矢量应用程序,位于0x0004)

应用Flash结束(取

unlock-Bootloader:使用PC或Android解锁任何设备的Bootloader

02-17

解锁引导程序

将引导加载程序解锁到您的Android手机中,以安装自定义Roms。

警告 :warning: :通过解锁引导加载程序,您的Android手机保修将无效。

怎么做?

您可以使用Windows-Android或Android-Android方法解锁引导加载程序(需要OTG)。

预先要求

Windows计算机[PC]

Android手机(将用于解锁引导程序的手机) [MOB]

USB线

对计算机的一点了解*

注意:通过这种方法,您的设备将恢复出厂设置,因此在解锁引导加载程序之前,请备份您的个人文件。

如何使用Windows计算机? (Windows-Android)

PC = Windows计算机MOB =将使用哪个设备来解锁引导加载程序。

下载以及您的电话驱动程序。

[PC]将所有ADB和Fastboot文件保存在一个文件夹中。

[PC]安装设备驱动程序。

[PC]按住S

2 条评论

您还未登录,请先

登录

后发表或查看评论

Android14之刷机模式总结(一百七十八)

最新发布

Android系统攻城狮

01-08

1235

1.bootloader模式2.recovery模式3.fastbootd模式Android设备的Fastboot模式、Recovery模式和Bootloader模式是三种不同的系统状态,各自具有特定的作用和功能。首先是Fastboot模式,它是一种用于刷写固件、解锁引导程序和执行其他低级系统操作的模式。在Fastboot模式下,设备可以与计算机进行连接,并通过Fastboot工具向设备发送命令,例如刷写新的系统图像或解锁引导程序。

单片机与DSP中的基于自编程功能的MCU Bootloader设计

10-16

Bootloader是在单片机上电启动时执行的一小段程序。也称作固件,通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用应用程序准备好正确的环境。

Boot代码由MCU启动时执行的指令组成。这里的loader指向MCU的Flash中写入新的应用程序。因此,Bootloader是依赖于特定的硬件而实现的,因此,在众多嵌入式产品中目前还不可能实现通用Bootloader。

Bootloader的最大优点是:在不需要外部编程器的情况下,对嵌入式产品的应用代码进行更新升级。它使得通过局域网或者Intemet远程更新程

嵌入式系统/ARM技术中的uboot启动流程

11-09

作者:曹忠明,华清远见嵌入式学院讲师。

  U-boot(universal bootloader)是德国DENX小组开发的用于多嵌入式CPU的bootloader程序,遵循GPL条款。

  以s3c2410为例Uboot的启动过程大体可分为两个部分,第一部分是初始化系统为第二部分做准备,多用汇编实现,第二部分实现外围设备的初始化和内核的下载及参数的传递,开始用C实现。

  下面是uboot启动流程

  Uboot启动后的内存分配情况。

  34000000

  33f80000                                boot搬移地址

  ……

U-Boot SD卡启动的移植分析与功能扩展

01-19

摘要:针对U-Boot默认不提供使用SD卡启动嵌入式系统的支持,以及使用传统方法烧写安装嵌入式系统操作繁琐的问题,基于S3C6410处理器分析了SD卡启动系统的原理,并对U-Boot源码进行修改使其支持该启动方式,同时对U-Boot进行了功能扩展,添加了仅使用SD卡便可进行系统安装升级的功能。实验结果证明,该方法具有可行性,对U-Boot在其他平台上的移植工作具有一定的参考价值。

  0 引言

  通用Bootloader(Universal Bootloader,U-Boot)是系统上电后执行的段代码,其作用主要包括初始化硬件环境以及加载执行操作系统内核。在进行系统安装时,U-Boot通

uboot和BootLoader的区别和联系

weixin_42031299的博客

03-12

3167

1、bootLoader介绍

bootLoader是嵌入式设备中用来引导内核启动的一段代码。内核启动是需要一定条件的,当设备上电后会首先运行BootLoader,BootLoader会初始化必要的硬件,比如DDR、Flash、串口等,相关初始化完成后就会去启动内核。我的理解,BootLoader是一个概念并不是具体的代码,只要满足在设备启动初期启动内核功能的代码都可以叫做BootLoader。

2、uboot介绍

uboot(universal boot)是通用的启动代码,支持多种架构的CPU,并且是

BootLoader介绍

qq_51118175的博客

12-26

1万+

1.BootLoader的引入

2.BootLoader的启动方式

3.BootLoader的结构和启动过程

4.自己写一个BootLoader

uboot和bootloader有啥区别

usstmiracle的博客

03-29

907

uboot和bootloader都是嵌入式设备中用来启动操作系统内核的一段程序,但是:uboot是一种通用的、可移植的、支持多种处理器架构的bootloader,bootloader是一个泛指,可以有很多不同的实现,例如Redboot、ARMboot、Blob等。uboot是bootloader的一个子集,也就是说uboot是一种特定的bootloader。uboot的核心作用就是启动操作系统内核,uboot的本质就是一段裸机程序。uboot的执行模式有两种,一种是自启动模式,另一种是交互模式。

Bootloader详解,理解Bootloader看这篇就够了

热门推荐

iduuigdg的博客

12-25

4万+

这里写目录标题一、Bootloader作用(目的)二、完成Boot最终目的的前提条件三、对前提条件的详细说明3.1、对前提条件(1)的说明:3.2、对前提条件(2)的说明:3.3、对前提条件(3)的说明:3.4、对前提条件(4)的说明:3.4、对前提条件(5)的说明:四、loader是干啥的

一、Bootloader作用(目的)

Bootloader=Boot + loader

Boot的目的:

最终目的:跳到C语言中;为了C语言运行程序会进行一系列的初始化,系统一上电后如何通过一系列的设置让软件程序员

BootLoader这个玩意

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。

10-26

2110

有了前面的概念和源码描述,这里进行最后的总结。1)初始化看门狗。2)初始化时钟。3)初始化串口。4)设置CPU模式的栈指针,进入SVC模式。5)初始化RAM。6)初始化MMC控制器,并将内核映像从MMC设备中读到0x48000000处的RAM地址中。7)清除BSS段。8)做好调用内核前的准备工作。9)跳转到RAM中的内核的第一条指令,引导过程完成。(SVC和SYS的区别知道吗?我们在UBoot的内容学习过)

linux-uboot 移植三 uboot启动内核过程

u010681589的博客

06-19

3319

uboot 的本质工作是引导 Linux,所以 uboot 肯定有相关的 boot(引导)命令来启动 Linux。常用的跟 boot 有关的命令有: bootz、 bootm 和 boot。要启动 Linux,需要先将 Linux 镜像文件拷贝到 DRAM 中,如果使用到设备树的话也需要将设备树拷贝到 DRAM 中。可以从EMMC 或者 NAND 等存储设备中将 Linux 镜像和设备树文件拷贝到 DRAM,也可以通过 nfs 或者 tftp 将 Linux 镜像文件和设备树文件下载到 DRAM 中。不管用

uboot引导linux的实验笔记

屁神 的博客

11-23

851

zImage的头部有地址无关的自解压程序,因此刚开始执行的时候,zImage所在的内存地址(entry point)不需要同编译kernel的地址相同。此种情况下,bootm会把uImage header后的zImage move到load address(见上方代码),然后go到entry point开始执行。由此知道此时的load address必须等于entry point。结论:对于1G内存,当LOADADDR在0-0x2FFFFFFF之间时,可以正常启动,大于0x30000000的内存会有问题。

(一)U-Boot启动过程--详细版的完全分析

hare_Lee的专栏

10-29

3万+

-------------------------------------------------------------------------------------------------------------------------------------------

 我们知道,bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。

uboot引导内核 Load Address Entry Point

u011011827的博客

10-10

3038

前言

本次实验环境

linux-4.0.tar.xz

u-boot-2017.05.tar.bz2

问题描述

在系统移植的第一步,一般是 直接 找个 相似的 config ,然后配置一下,然后编译一下.直接tftp 然后bootm

如果 没有看到 Uncompressing Linux... done, booting the kernel

一般是因为 地址 的问题

这里面涉及到 四...

bootloader详解(转载)

sdulibh的专栏

11-05

7572

一。bootloader介绍

bootloader是硬件在加电开机后,除BIOS固化程序外最先运行的软件,负责载入真正的操作系统,可以理解为一个超小型的os。目前在Linux平台中主要有lilo、grub等,在Windows平台上主要有ntldr、bootmgr、grldr等。这里以grub-0.97为基础描述bootloader的启动过程。

一般grub主要分为stage1和stage2两个...

浅谈bootloader【谈的很清晰明白】

星Yeah 的博客

11-25

6667

浅谈bootloader【谈的很清晰明白】

U-Boot工作过程

weixin_30432179的博客

04-07

454

注:本帖转自:http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html

感谢作者:heaad

————————————————————————————————————————————————————————————————————————————————————

1.1U-Boot工作过程

U...

Linux内核移植 part2:uboot load_addr 释疑

叶玄青的博客

12-26

4409

uboot bootm在寻找OS镜像的时候会根据load_addr变量去对应的ram地址中找。/* common/image.c */

ulong genimg_get_kernel_addr_fit(char * const img_addr,

const char **fit_uname_config,

const char *

uboot启动和bootloader启动的区别

04-22

U-Boot是一种开源的启动加载程序,它支持多种处理器架构和嵌入式系统。U-Boot通常被用来加载操作系统内核或其他引导加载程序,比如GRUB等。而bootloader是一种在嵌入式系统中运行的程序,用于引导操作系统或其他应用程序。不同的嵌入式系统可能采用不同的bootloader,比如u-boot、aboot等。U-Boot可以作为bootloader的一种选择,但它与bootloader并不完全相同。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

kevin@1024

CSDN认证博客专家

CSDN认证企业博客

码龄8年

暂无认证

96

原创

3万+

周排名

12万+

总排名

103万+

访问

等级

6457

积分

588

粉丝

887

获赞

82

评论

4786

收藏

私信

关注

热门文章

cmake快速入门

226487

linux系统组成及结构

47043

i2c-tools使用及调试

46930

linux驱动最新面试题(面试题整理,含答案)

46114

安卓ListView总结(一)

35320

分类专栏

项目调试笔记

付费

camera

1篇

XR功能模块

1篇

Native

5篇

安卓系统相关

17篇

Android framework

18篇

Android UI

20篇

安卓应用基础

15篇

linux

21篇

C/C++

13篇

interview

3篇

java

4篇

命令及工具

14篇

最新评论

安卓ServiceManager启动:彻底理解ServiceManager启动流程,这一篇就够了

会瞬移的猪:

不戳不戳

安卓startService:让你彻底理解startService过程

cccccccccc2:

太深奥了我超

Android硬件服务框架实例之Vibrator(驱动到应用)

murphykwu:

整个流程从底层到框架层,再到上层,全部都非常详细。好奇硬件如何被上层操纵的朋友来说,推荐阅读。学习到很多,感谢博主的分享。

cmake快速入门

qq_58817647:

建立一个build文件夹,上级放CMakeLists.txt文件,执行cmke .. 将会把临时文件全部保存在build文件夹

安卓系统添加dropbear实例

LJ-SEU:

为什么我用网上所有的dropbear源码 mm编译的时候都会报 eng 被废弃 的错误,我把他改称optional后, 就是大量的语法类型转换错误。有人和我一样吗

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

从cameraprovider直接获取camera数据

1.Android Native Sensor(C++)实例

安卓RecyclerView+CardView使用总结

2023年1篇

2022年1篇

2021年6篇

2020年13篇

2019年14篇

2018年71篇

2017年32篇

2016年2篇

目录

目录

分类专栏

项目调试笔记

付费

camera

1篇

XR功能模块

1篇

Native

5篇

安卓系统相关

17篇

Android framework

18篇

Android UI

20篇

安卓应用基础

15篇

linux

21篇

C/C++

13篇

interview

3篇

java

4篇

命令及工具

14篇

目录

评论 2

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

打赏作者

kevin@1024

你的鼓励将是我创作的最大动力

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

安卓手机怎么进入bootloader模式 - 与非网

安卓手机怎么进入bootloader模式 - 与非网

Supplyframe

Supplyframe XQ

Datasheet5

Component Search Engine

Findchips

bom2buy

Siemens Xcelerator

关注我们

扫码关注获取工程师必备礼包板卡试用/精品课

设计助手

电子硬件助手

元器件查询

首页

电路设计

企业专区

应用/图谱

与非原创

资讯

视频

活动

搜索

热搜

搜索历史清空

创作者中心

加入星计划,您可以享受以下权益:

创作内容快速变现

行业影响力扩散

作品版权保护

300W+ 专业用户

1.5W+ 优质创作者

5000+ 长期合作伙伴

立即加入

电路方案

技术资料

数据手册

论坛

电路分析

拆解

评测

方案

1

基于普冉单片机的高性价比高速吹风筒解决方案

2

基于32位单片机XL32F002A的433超强拷贝滚动码遥控器解决方案

3

基于工业级32位MCU的高速吹风筒方案

资料

1

全集成高频同步降压变换器-MPQ8626产品手册

2

数字DC/DC电源模块-MPC12106产品手册

3

全集成高频同步降压变换器-MPQ8633B产品手册

企业中心

企业入驻

官方资料

新品发布NPI

官方参考设计

厂商社区

恩智浦技术社区

RF技术社区

ROHM技术社区

ST中文论坛

新热企业

MPS

芯科科技

瑞萨电子

ADI

树莓派

DFROBOT

汽车电子

工业电子

人工智能

通讯/网络

新热图谱查看更多

手机

汽车

工业机器人

XR

新闻/观察

科普/拆解

产业/互动

专题策划

最新原创查看更多

每周必看

与非研究院

与非观察

评测拆解

可编程逻辑

MEMS/传感技术

嵌入式系统

模拟/电源

射频/微波

测试测量

控制器/处理器

EDA/PCB

基础器件

汽车电子

人工智能

工业电子

通信/网络

消费电子

热点资讯

1

20 个最常被问到的射频工程师面试问题(含答案)

2

独家解秘:是谁切断了红海海底光缆?

3

产研:艰难的替代——车载以太网PHY芯片(一)

4

人形机器人产业链分析——伺服系统

5

Arm超预期业绩之后,AI驱动下一个大时代

6

半导体全景图丨各领域Top10出炉!

视讯

课程

直播

最新

1

2024研华智能设备新品发布会

2

蓝牙5.4时代到了,你准备好了吗?

3

Alitum Designer AD 软件教程电子档视频课程

原创

1

当贝盒子拆解:国产芯渗透的最好时代

2

龙芯2K2000 NUC评测拆解:比肩树莓派4单核性能

3

基于芯驰车规级芯片D9360的三屏异显方案:国产化正当时

行业活动

论坛活动

板卡申请

新热活动 查看更多

1

【参会得¥150京东卡】瑞萨电子RA8 超高性能MCU巡回技术研讨会

2

基于Xilinx MPSoC系列 FPGA视频教程

3

FPGA至简设计原理与应用

最新直播

首页

行业热点

安卓手机怎么进入bootloader模式

正文

1.确认设备型号

2.使用按键组合进入bootloader模式

3.使用ADB命令进入bootloader模式

4.使用第三方应用程序进入bootloader模式

相关推荐

电子产业图谱

申请入驻

产业图谱

安卓手机怎么进入bootloader模式

2021/01/30

作者:zhang1998

4122

阅读需 10

分钟

加入交流群

扫码加入获取工程师必备礼包参与热点资讯讨论

在Android手机中,bootloader是指引导加载程序或固件(如操作系统)时会首先运行的一段代码和数据。

1.确认设备型号

不同的Android手机使用不同的方法进入bootloader模式。在进行操作之前,请确保您已了解自己手机的型号和对应的操作方式。

2.使用按键组合进入bootloader模式

有些手机可以通过同时按下特定的按键组合来进入bootloader模式。例如,在Nexus手机上,同时按下“音量下”和“电源”键即可进入bootloader模式。

3.使用ADB命令进入bootloader模式

ADB(Android Debug Bridge)是用于在计算机和Android设备之间通信的命令行工具。使用ADB命令也可以进入bootloader模式。

以Windows操作系统为例,在CMD命令行窗口中输入以下命令:

adb reboot bootloader

以上命令将重启手机并进入bootloader模式。

4.使用第三方应用程序进入bootloader模式

一些第三方应用程序也可以帮助您轻松进入bootloader模式。例如,安卓中文网提供了一个名为“一键进入刷机模式”的应用程序,可帮助您快速进入bootloader模式。

版权声明:网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

侵权投诉

人工客服(售后/吐槽/合作/交友)

Bootloader

相关推荐

单片机需要使用Bootloader吗(1)

乐创客

1544

2021/07/02

资讯

bootloader模式怎么进入 bootloader模式是什么样的

eefocus_3781508

1.2万

2021/10/09

行业热点

bootloader是什么意思

短腿老头

1937

2021/08/04

行业问答

解锁bootloader是什么 解锁bootloader教程

eefocus_3706328

1万

2021/04/09

行业热点

详解KBOOT的三种形态:ROM、Flash-Resident和Flashloader

痞子衡

326

2019/11/21

资讯

通用MCU Bootloader-KBOOT的配置选项

痞子衡

328

2019/11/21

资讯

Linux从入门到精通

顶嵌开源科技

14

2015/03/26

课程

电子产业图谱

查看更多

手机

汽车

工业机器人

XR

推荐视频

编辑推荐

热门方案

热门视频

产品

技术

企业

芯片

华为将如何影响中国汽车产业格局?

芯片电子元件2024年将迎来增长反弹的一年吗?

详析如何在RS-485节点中隔离信号和电源

单片机软件开发-uart板间通信

探索RTOS之旅-Intewell操作系统入门教学视频第一期

TL6748-PlusTEB实验操作教程

MQTT通信协议通讯:华为云接入MQTT协议教程

Cadence Allegro 22.1编程下载器ST_LINK全套PCB设计教程

7KW汽车直流充电方案

下肢外骨骼康复训练机器人BEAR-H系列

逆变器电路方案设计和资料分享

实例分享-示波器电路设计方案

基于STM32的电路设计方案精选20篇

【电赛必备资料】历年电赛方案作品,立即收藏!

【芳心科技】基于STC89C52的51单片机语音播报时钟

广州眺望 | 基于Rockchip新一代旗舰RK3588处理器设计的arm核心板datasheet

汽车水泵控制器

255 W、80 PLUS® 银牌认证 ATX 电源 GreenPoint® 参考设计

Vision Pro爆了,TI赢麻了?

大模型的耐力游戏

2024年2月热门电路设计方案top20

CG-01 室外温湿度测量解决方案

CG-01 室外温湿度测量解决方案

一文理解Spark的基本概念和工作原理

SiC, GaN…新型半导体材料为何如此火爆?

罗克韦尔自动化携手1PointFive 签署直接空气捕获碳去除信用协议

智能电单车解决方案

血海飘香的ATE行业,92家供应商汇总

【微健科技】直播声卡方案,全面兼容直播类以及音乐K歌语聊类APP特效

【微健科技】K歌蓝牙耳机方案,支持蓝牙通话多种变声,趣味通话

Littelfuse推出适用于空间受限设计的超小型包覆成型磁簧开关解决方案

基于51单片机的多机串口UART通信Proteus仿真设计

四方维深圳创新实验室启用

守护复苏:行业领袖指点产业机会

电子元器件2024年供求预警

大算力时代, 如何打破内存墙

是德科技发布无线测试平台, 加速Wi-Fi 7性能测试

产品矩阵疾行,国产MCU仍缺高端线

冗余电源和ups电源二者之间有什么区别

万字长文推演智能汽车EE架构的终极形态

kw、kva和kwh 三个常见单位有什么区别

终止与ams OSRAM在芯片上的合作,Micro LED版本Apple Watch量产出现重大变量

英飞凌推出高密度功率模块,为AI数据中心提供基准性能,降低总体拥有成本

电爆驱动器和接触器驱动器如何帮助提高混合动力汽车/电动汽车电池断开系统的安全性和效率

微型计算机系统由哪些部分组成

艾默生新款小巧坚固的工控机为工业车间到云的连接而生

四方维和中国传感器与物联网产业联盟达成战略合作

基于SiC的完整“傻瓜型”逆变器参考设计为先进电机应用铺平了道路

白皮书外的ECAD:元器件产品新标配

工业元宇宙为CES 2024盛大开场

阿里云全面降价,释放了什么信号?

四方维与捷普协力提升制造工业数字化

意法半导体和Mobile Physics合作开发EnviroMeter

基于EdgeX+OpenVINO™ 的边缘智能融合网关YiFUSION

贸泽电子即日起开售TE Connectivity HDC浮动式充电连接器

激光垂准仪

激光测距传感器

DATALOGIC 和 DATASENSING 将亮相2024广州国际工业自动化技术及装备展览会

爆火的Sora将给自动驾驶带来怎样的改变?

电子设计与工程团队

芯品速递 | 希荻微推出业界领先的硅阳极锂离子电池专用DC-DC芯片HL7603

采购与供应链管理团队

市场与营销团队

四方维客户案例

基于STM32F030K6T6设计的工业缝纫机控制器电路方案(电路图)

汽车无刷水泵控制器电路设计方案(原理图+源文件)

高速吹风机控制器

2KW 程控dc-dc开关电源

工业无刷电机控制器

工业BLDC控制器_750W

基于STM32的电路设计方案精选20篇

12管电动摩托车控制器

7KW汽车直流充电方案

基于LKS32MC051C6T8的搬运机器人行走控制器

工业无刷水泵控制器

智能家居语音交互主控

【工控】无刷工业控制器

智能家电-智能扫地机器人

无线智能门锁

1300W高压无刷角磨机控制器,无感正弦波

基于TMC5160A的步进电机驱动方案

TMC5160A步进电机驱动电路

开关电源电路设计方案 (含原理图+源文件)

2024年1月热门电路设计方案top20

高效7kW+智能热泵

逆变器电路方案设计和资料分享

南芯智控 | 600W便携式储能方案

电路方案毕业设计-智能家居篇-热门方案top20

USB IO-Link 主控制器

热门电路方案-医疗电子篇毕业设计

铭瑞宏 | 380V无触点稳压电源

智能水传感器

电路方案毕业设计-51单片机篇-热门方案top20

2024年2月热门电路设计方案top20

IP5209  2.1A 充电 2.4A 放电集成 DCP 功能移动电源 SOC

广州眺望 | 基于Rockchip新一代旗舰RK3588处理器设计的arm核心板datasheet

英飞凌AURIX™ TC3xx车规级单片机和典型模块技巧及运用(CAN-FD、SMU、ADC)

“连”动数据无限可能

Python基础实战系列课程

蓝牙5.4时代到了,你准备好了吗?

2024研华智能设备新品发布会

龙芯2K2000 NUC评测拆解:比肩树莓派4单核性能

Alitum Designer AD 软件教程电子档视频课程

100分钟轻松掌握云原生监控平台Prometheus从部署到监控 (纯干货分享)

芯片电子元件2024年将迎来增长反弹的一年吗?

这家温控物流运输企业用Domo BI做对了什么?

揭秘解谜小游戏背后的故事——用Redis搭建一个寻宝游戏

2024年这些芯片会率先涨价?

当贝盒子拆解:国产芯渗透的最好时代

英伟达Orin X芯片凭什么成为智能驾驶顶流?

电车买磷酸铁锂电池还是三元锂?

IC芯片这些检测方式无法识别假货但却是大多数人在做的?

电车买磷酸铁锂电池还是三元锂?2

2024汽车价格战,掀桌子不能停!

32电子时钟温湿度设计

32单片机的超声波测距设计

3d打印机电路设计系统方案

3KW单相逆变器设计

51单片机八音盒课题设计

51单片机十六键电子琴设计方案

51单片机土壤湿度检测设计

51单片机实验彩灯控制器设计

51单片机心形流水灯电路设计方案

51单片机数字电子时钟电路设计方案

51单片机智能电饭煲系统设计

51单片机智能风扇设计

51单片机烟雾报警器

51自动售货机毕业设计课程

51酒精浓度检测仪的项目设计

555多谐振荡方案设计

555触摸延时开关设计方案

60w反激式开关电源设计

8路彩灯控制器设计仿真

AD7606采样模块设计

AD模数转换电路设计

android蓝牙语音遥控方案设计

arduino升降平台设计

Arduino智能闹钟设计

Arduino自动浇花系统设计

Arduino高压电源设计

BLDC无刷电机驱动电路设计

cc2530核心板电路设计

DIY键盘电路方案

esp32蓝牙硬件设计

便携式紫外线消毒器电路设计

基于stm32的智能药箱毕业设计

usb

充电器拆解

电路设计方案

无线充电

瑞萨电子

变频器

拆解报告

电脑

SiC

开源

存储器

新能源汽车

数字化转型

arduino

芯片

小米

Linux

电池

AMD

智能座舱

二极管

NFC

拆解

微软

智能制造

芯片设计

三星

安森美

快充

IGBT

动力电池

mems

超讯通信

LGD

万睿视

谷歌

AEG

易飞扬

华工正源

合力泰

Vector

立积电子

Simpack

磐仪科技

Ouster

Elliptic Labs

先科

TRACO POWER

海格科技

特发信息

SCHALTBAU

爱奇艺

赛格导航

韦尔股份

远峰科技

拓普联科

SprutCAM

中星恒通

昱品科技

研华科技

趣立科技

必易微

Trombetta

飞毛腿

AD7564ARZ

A3P250

DP83867

AD5235BRUZ250-R7

RC0603JR-070RL

MC34072ADR2G

CGA3E2C0G1H220J

HB5-3%2FOVP-AG

VND5E160AJ

CY8C5267AXI-LP051

SI5515CDC-T1-GE3

AD5235

STM32F429IGT6

NCP3063BDR2G

RC0402FR-074K7L

STW15NK90Z

25LC256-I%2FSN

FAN2001MPX

BSP317PH6327

LTC2980IY

SI7463DP-T1-GE3

ERA2AEB4321X

DS90UH949

LT1719IS6

ADS8422IBPFB

FQD2N80TM

OPA2170AIDGK

SQJ431EP-T1_GE3

MBR1645G

ATXMEGA128A4U

CY7C53120

AT89C51CC03UA

企业社区

ams OSRAM中文社区

RF中文社区

ROHM技术社区

恩智浦技术社区

ST中文论坛

产品矩阵

Datasheet5

bom2buy

Supplyframe XQ

Supplyframe CIQ

特色服务

产业图谱

成为与非星

企业入驻

客户服务

内容合作

电子新闻信

关于我们

公司介绍

联系我们

加入我们

用户使用协议

网站地图

集团旗下

Supplyframe DesignSense

Supplyframe Commodity IQ

Supplyframe DirectSource

Supplyframe CPQ

OEMsTRADE

Samacsys

Hackaday

© 2010 - 2024 苏州灵动帧格网络科技有限公司 版权所有

ICP经营许可证 苏B2-20140176 | 苏ICP备14012660号-6 | 苏公网安备

32059002001874号

扫码关注获取工程师必备礼包板卡试用/精品课

公众号

扫码加入获取工程师必备礼包参与热点资讯讨论

官方群

电子硬件助手

元器件查询

小程序

版权声明:本文由tp钱包下载app官网正版发布,如需转载请注明出处。

本文链接:https://www.siyuewuyu.com/article/76.html