iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >嵌入式Linux学习笔记—fastboot烧写Android
  • 482
分享到

嵌入式Linux学习笔记—fastboot烧写Android

嵌入式linuxLinux嵌入Android 2022-06-06 13:06:44 482人浏览 泡泡鱼
摘要

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

本系列为本人在自学过程中的学习笔记,如有错误欢迎大家指正。
学习资料为讯为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  \n");
		printf("fdisk   [  ]\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  \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;
}

下面的几个

ext3format
fatformat
差不多,格式化相关设备号的相关分区。

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 [ ] 将电脑上的内核下载到手机并用该内核启动系统.
7.flash:raw boot [ ] 创建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


作者:江北区冷漠铁锤


--结束END--

本文标题: 嵌入式Linux学习笔记—fastboot烧写Android

本文链接: https://www.lsjlt.com/news/29517.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作