本系列为本人在自学过程中的学习笔记,如有错误欢迎大家指正。
学习资料为讯为ITOP4412开发板。

fastboot烧写Android

1、主要工具

OTG 接口烧写方式也叫 fastboot 烧写方式。
硬件:开发板、OTG线。
软件:文件夹“USB_fastboot_tool” 工具。
镜像组合: Uboot 镜像“u-boot-iTOP-4412.bin” 、 内核镜像“zImage” 、文件系统“ramdisk-uboot.img”和“system.img”。
文件说明
1.“USB_fastboot_tool”是一个刷机工具,我把它理解为刷机脚本。flashtool不需要解锁bootload,通常刷写的是.img镜像文件。

2.Uboot 镜像“u-boot-iTOP-4412.bin。uboot,就是bootloader。在嵌入式Linux系统中最先启动的是uboot。uboot用于启动后检测内存,存储等设备,并且设置处理器等设备的时钟等。最后引导内核,把zImage内核文件拷贝到内存,并去运行。

3.内核镜像“zImage” 。驱动都在内核当中,内核负责对各种外设进行驱动初始化,比如SPI、蓝牙、以太网等。内核运行到最后挂载文件系统。

4.文件系统“ramdisk-uboot.img”和“system.img”。ramdisk.img,system.img,userdata.img是由Android 源码编译后生成的三个镜像文件。ramdisk.img是根文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据。
ramdisk根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据 init.rc,init.goldfish.rc来初始化并装载系统库、程序等直到开机完成。
system.img文件是system目录的一个映像,类似于linux的根文件系统的映像,放着android的应用程序,配置文件,字体等。

2、命令分析

教程如下

进入uboot模式 – 上电,启动开发板,超级终端中,按“回车”键(一上电就按),进入 uboot模式
•分区命令,超级终端中,输入命令:
– 输入分区命令“fdisk -c 0”
• 格式化命令,超级终端中输入命令:
– fatformat mmc 0:1
– ext3format mmc 0:2
– ext3format mmc 0:3
– ext3format mmc 0:4
• 连接命令,超级终端中输入命令:
– fastboot
运行“platform-tools”文件夹中的文件“cmd.exe”,打开 windows命令行

•烧写命令,在windows命令行输入 – 烧写uboot命令(不建议烧写,已经有了):
– fastboot.exe flash bootloader u-boot-iTOP-4412.bin
– 烧写zImage内核命令:
–fastboot.exe flash kernel zImage
– 输入烧写ramdisk 命令:
– fastboot.exe flash ramdisk ramdisk-uboot.img
– 输入烧写system 文件系统命令:
– fastboot.exe flash system system.img
– 输入擦除命令:
– fastboot -w
– 输入重启开发板命令:
– fastboot reboot
• 输入重启命令之后,开发板重启,超级终端打印启动信息,第一次 Android启动需要解压和安装一些初始化文件,花费的时间长一点。 这些文件初始化一次之后,再次启动速度就会快一点。

2.1、格式化命令分析

作用:对eMMC的设备的格式化。

fdisk -c 0
fatformat mmc 0:1
//对mmc 0设备的第一分区格式作fat格式化
ext3format mmc 0:2
ext3format mmc 0:3
ext3format mmc 0:4
//上面三个指令是分别对eMMC的分区2,3,4作ext3格式化。

利用vscode的全局搜索功能搜索fdisk,找到fdisk相关的函数,如下所示

int do_fdisk(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{if ( argc == 3 || argc ==6 ) //判断参数个数{//判断参数的第二个参数是否为"-c",如果为"-c"就执行格式化分区命令if ( strcmp(argv[1], "-c") == 0 )return create_mmc_fdisk(argc, argv);//如果为"-p",就打印当前分区信息else if ( strcmp(argv[1], "-p") == 0 )return print_mmc_part_info(argc, argv);}else  //如果参数个数不正确,就打印错误提示信息,结束{printf("Usage:\nfdisk <-p> <device_num>\n");printf("fdisk <-c> <device_num> [<sys. part size(MB)> <user part size> <cache part size>]\n");}return 0;
}

当我们输入fdisk -c 0时,参数个数为3,满足要求,进入下一层判断,由于第二个参数为"-c",所以会执行格式化分区命令。分区具体是如何创建的,可参考create_mmc_fdisk函数。

第二个命令是fatformat mmc 0:1,利用vscode的全局搜索功能搜索fatformat,在cmd_fat.c这个文件中找到了一个相关的函数,如下所示

int do_fat_format(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{int dev = 0;int part = 1;char *ep;block_dev_desc_t *dev_desc = NULL;//判断参数个数是是否正确if (argc < 2) {printf ("usage : fatformat <interface> <dev[:part]>\n");return(0);}//获取设备区块号dev = (int)simple_strtoul (argv[2], &ep, 16);//获取设备号dev_desc = get_dev(argv[1], dev);//如果设备号不存在,则输出错误信息if (dev_desc == NULL) {puts ("\n ** Invalid boot device **\n");return 1;}//初始化设备init_part(dev_desc); //mj fixed the bug//这里需要先去上网了解一下simple_stroul的功能,ep指向":xxx"这样一个字符串,下面就是判断":"后面的数字是否满足要求if (*ep) {if (*ep != ':') {puts ("\n ** Invalid boot device, use 'dev[:part]' **\n");return 1;}part = (int)simple_strtoul(++ep, NULL, 16);if (part > 4 || part <1) {puts ("** Partition Number should be 1 ~ 4 **\n");}}//打印开始格式化提示信息printf("Start format MMC&d partition&d ...\n", dev, part);//开始格式化,如果对具体是如何格式化的感兴趣,可以去这个fat_format_device里面看看if (fat_format_device(dev_desc, part) != 0) {printf("Format failure!!!\n");}return 0;
}

下面的几个ext3formatfatformat差不多,格式化相关设备号的相关分区。

2.2、烧写命令分析

教程中烧写命令摘录如下

在超级终端界面输入
fastboot
然后在PC的cmd命令行下输入fastboot.exe的一系列命令:fastboot.exe flash bootloader u-boot-iTOP-4412.bin
fastboot.exe flash kernel zImage
fastboot.exe flash ramdisk ramdisk-uboot.img
fastboot.exe flash system system.img
fastboot -w
fastboot reboot

这里来看下fastboot命令,用到的烧写命令为如下高亮部分。

可用命令:
1.update <文件名> 从官方update.zip升级系统.该update.zip必须是官方的
2.flashall ‘flash boot’ +‘flash system’
3.flash <分区名> [ <文件名> ].如:fastboot flash system system.img 将文件写入分区.文件必须正确.
4.erase <分区名> 清空一个分区.如,fastboot erase system
5.getvar <参数名> 显示一个启动参数.如:fastboot getver:version(查看版本号)
6.boot <内核文件> [ <ramdisk文件> ] 将电脑上的内核下载到手机并用该内核启动系统.
7.flash:raw boot <内核文件> [ <ramdisk文件> ] 创建boot.img并下载到手机启动系统.
8.devices 列出所有与电脑连接的设备.
9.reboot 正常启动系统
10.reboot-bootloader 启动系统到hboot

选项
-w 清空用户数据分区和缓存分区.
-s <串口号> 指定要操作的设备的串口号
-p <产品名> 指定要操作的设备的产品名.比如hero,bravo,dream…
-c <命令行> 用命令行替换系统的启动命令行.

补充
当我们反复调试安卓系统的时候重复输入这些烧录命令会比较麻烦,我们建立一个脚本用来自动烧录。
建一个脚本用于烧录内核和系统镜像存放在“platform-tools”文件夹中,脚本名称:auto_fastboot_ALL.bat,脚本内容:

fastboot.exe flash kernel zImage
fastboot.exe flash ramdisk ramdisk-uboot.img
fastboot.exe flash system system.img
fastboot -w
fastboot reboot

以后就可以自动烧录了。
1.开终端,输入fastboot
2.双击运行脚本 auto_fastboot_ALL.bat
3.等待烧录完成。

美滋滋

参考
1.https://www.cnblogs.com/YinShijia/p/12018460.html
2.https://blog.csdn.net/MENGHUANBEIKE/article/details/56009674?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158676275519725211944265%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158676275519725211944265&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-blog_SOOPENSEARCH-1

嵌入式Linux学习笔记—fastboot烧写Android相关推荐

  1. 嵌入式linux学习笔记--TCP通讯整理

    嵌入式linux学习笔记–TCP通讯整理 之前的项目中使用到了比较多的tcp 通讯相关的知识,一直也没有进行整理,今天准备拿出时间好好的整理一下TCP通讯的整个过程.预计会整理linux和window ...

  2. 迅为嵌入式Linux学习笔记5——进程间通信

    迅为嵌入式Linux学习笔记5--进程间通信 管道通信 无名管道 无名管道只能实现有亲缘关系的进程之间的通信,比如父子进程. pipe函数: #include <unistd.h> int ...

  3. 迅为嵌入式Linux学习笔记4——进程

    迅为嵌入式Linux学习笔记4--进程 进程指的是正在运行的程序,是操作系统分配资源的最小单位. 进程ID 每个进程都有唯一的标识符,这个标识符就是进程ID,简称pid 进程间通信的方法 管道通信:分 ...

  4. android 编译fastboot,Android应用开发之Fastboot烧写Android镜像文件到eMMC

    本文将带你了解Android应用开发之Fastboot烧写Android镜像文件到eMMC,希望本文对大家学Android有所帮助. < Fastboot烧写Android镜像文件到eMMC 以 ...

  5. android自动烧写工具,利用fastboot烧写Android平板镜像典型步骤举例

    1.准备fastboot烧写工具 在windows下下载fastboot软件,并将如下文件: bootloader.fex, env.fex,boot.img,recovery.img ,userda ...

  6. 使用u-boot的USB下载功能烧写程序到Nand Flash ——韦东山嵌入式Linux学习笔记06

    本文实验环境: 1. windows 7(64bit) 2. JZ2440(V2) 假设板子的Nor Flash上已经烧好了u-boot,如果我想利用u-boot的USB下载功能,把一个裸板程序烧写到 ...

  7. 烧写文件系统——韦东山嵌入式Linux学习笔记11

    本文实验环境: 1. windows 7(64bit) 2. JZ2440(V2) 使用 u-boot 烧写文件系统,一般有两种方法. 1. 通过USB下载功能 2. 通过TFTP功能 通过USB下载 ...

  8. 使用 u-boot 烧写内核——韦东山嵌入式Linux学习笔记10

    本文实验环境: 1. windows 7(64bit) 2. JZ2440(V2) 使用 u-boot 烧写内核,一般有两种方法. 1. 通过USB下载功能 2. 通过TFTP功能 通过USB下载功能 ...

  9. win7下不能使用dnw烧写的解决办法——韦东山嵌入式Linux学习笔记05

    本文实验环境: 1. windows 7(64bit) 2. JZ2440 一. 问题的提出--没有驱动 假设板子的 Nor Flash 上已经烧好了 u-boot,那么如何通过 u-boot 的US ...

最新文章

  1. Virtual Machine--Vmware(2)
  2. OJ1041: 数列求和2(高阶递推)
  3. SOA和微服务架构的区别?
  4. 测量程序运行时间的几个函数
  5. linux mysql jdk路径配置,Linux下的jdk1.5+eclipse+mysql开发环境配置的经验总结
  6. python可以和java共存吗_python3 and python2 共存
  7. 用java编写一个故事的程序_使用Java怎么编写一个递归程序
  8. 分布式架构的核心要素和设计方法
  9. 初识 InnoDB存储引擎
  10. 和利时HOLLYSYS MACS-K系列DCS介绍
  11. 分枝定界法matlab,分支定界法 求混合0-1规划问题
  12. unity摄像头实物识别_“千万别让女朋友擦倒车摄像头,太tm可怕了哈哈哈哈哈!”...
  13. Ubuntu安装deb包
  14. 2020 Jiangsu Collegiate Programming Contest-A.Array
  15. 蜡笔小新配音怎么做?简单小技巧,软萌可爱的小新音你get了吗
  16. 【解决U盘无法访问】
  17. 重构之处理IE浏览器兼容问题
  18. bash install.sh ********错误
  19. SAR+L波段+森林生物量估计+高度反演
  20. Python——柱状图(条形图、堆叠图)

热门文章

  1. 大地测量员职业技能鉴定实操考核工作方案
  2. 英语经典口语999句
  3. 《炬丰科技-半导体工艺》光刻胶回流特性在金刚石微透镜制造中的应用
  4. 虚拟化Proxmox VE 6.x安装
  5. 100的阶乘末尾有多少个零
  6. 计算机控制系统课程设计ad转换,计算机a/d转换器与系统的连接及举例
  7. 抑郁症患者,该如何自我疗愈?
  8. 直立两轮平衡车核心代码
  9. PhoneRescue for Mac(iOS数据恢复软件)v4.1.0.20201020中文激活版
  10. 超越前端Beyond Frontend — 吉密斯/gMIS 增加点选/PickUp概览功能