uboot下nand flash读写方法_鸿蒙HarmonyOS烧录方法总结

26aaae0ec8185b48e08f72bcdb50610d.png

1.烧录工具

理解HarmonyOS驱动框架,用户态APP和内核态驱动之间的通信机制。

HarmonyOS烧录使用的海思自研的烧录工具Hitool,使用起来相对来说比较简单。整体界面如图所示:

e7003857aeee51de738863e0046ea7c5.png

2. 烧录内容

烧录内容主要分为两部分,一部分是引导文件fastboot烧录,另一部分为项目文件烧录。这些文件分别是:OHOS_Image.bin可执行文件,rootfs.img和userfs.img镜像文件。

3. 烧录方法

本文以sample_test demo 为例讲解烧录方法,开发板类型是Hi3516DV300.

烧录的第一步是打开Hitool工具,选择对应的芯片类型。如果你的开发板使用的是Hi3518ev300的,请选择对应的芯片。

becc0c59b0a5a319d0f539898cceacb6.png

3.1 串口烧录

3.1.1 fastboot烧录

Hiburn请按照如图进行设置:

① 我手上用的开发板是Hi3516DV300的,它的外挂flash是spi nor类型的,你们自己的设置请根据实际情况确定。

② 本示例所用的串口设备,计算机识别成COM1,你们做开发时请设置成相应的端口号。

③ 烧录方式选择fastboot。

763f47482b439a65f1ed9738820951d4.png

cf6e537d5235fe956eb4da30c36f829b.png

Uboot所在目录(如果uboot不能正常启动,请从其他地方寻找相对老一点的版本uboot):

00cd5d6d51081a8fb1b12355420aa277.png

点击开始烧录,开发板电源拔掉并重新接上。

d29e2d63f286c7ce2687c576c4505fd7.png

烧写成功后,打开终端,连接串口可以进入hisilion命令行。

097e8978268dc85be69d9df6590bd7c1.png

3.1.2 应用文件烧录

3.1.2.1 Hitool设置:

首先软件的设置如下图所示,请参考图例正确设置:

c1570b4822e3abacd1b714f15f55752d.png

这里面比较重要的就是开始地址和文件长度的确定,这个部分的规则如下:

① Uboot占用了1M的存储空间,所以OHOS_Image.bin的开始地址是1M,

② 文件大小不足1M的取值1M,比如本示例中OHOS_Image.bin的大小是5656kb,Hiburn中它的长度设置为6M。所以rootfs.img烧录的起始地址是1M+ 6M = 7M。

③ 其余情况,以此类推。

本示例中,各文件长度如下图所示:

30c74672e2e84c2799976812a7692d1b.png

3.1.2.2 断开串口

开始烧录前,首先先断开打印信息的串口链接,把串口腾出来给烧录器使用。

ab0b894aa9514d23199b6b2596906291.png

3.1.2.3 开始烧录

点击“烧写”,并给开发板重新上电,烧录就开始了。16M的文件,用串口11500bps的烧写速度,是需要花费一段时间的,所以系统及应用文件的烧录一般不建议使用串口。

烧录过程截图:

db54d5e34e085dc71740086942090d5b.png

烧写完成,耗时28分钟。

b2cf08763f1ba4e14ae958455a83614d.png

3.2 网口烧录

本示例网口烧录,硬件设备使用的是UGREEN的usb转RJ45网线接口,仅供参考。

3.2.1 网口增加IP地址

首先为开发板互联网口添加IP地址:192.168.1.3,增加方法如下:

90bf5d90f6a69ec164153af0ea5fd36f.png

控制面板中找到与单板连接的网卡,右键打开属性。

选择Internet协议版本4(TCP/IPv4)。

按图配置IP地址和网关。

点击“确定”完成配置保存。

3.2.2 单板IP配置

单板与PC间连接串口后,将单板上电,自动进入U-boot,按键盘"回车"键可在命令窗口输入命令,为单板配置192.168.1.10的IP地址,并指定192.168.1.3的服务器IP地址,命令如下。

setenv serverip 192.168.1.3

setenv ipaddr 192.168.1.10

saveenv

配置完成后使用pri命令确认查看配置结果,如下图所示。

155c7ee64397efc37f41e05221acc4e7.png

检查网络:在PC端使用ping命令确定单板与PC的网络,命令为"ping 192.168.1.3"。

08e997c99fa19c8b82e005be541bc207.png

3.2.3 断开串口

开始烧录前,首先先断开打印信息的串口链接,把串口腾出来给烧录器使用。

ab0b894aa9514d23199b6b2596906291.png

3.2.4 配置Hitool并烧录

Hitool配置如下,请参考。

f89a7474a78a51dc4444d3d2bbfca03e.png

配置完成后,点击烧录。烧录成功截图:

b597a02d1e1417db3cb3d5af2c2204ae.png

3.2.5 网口烧录的命令分析

网口烧录的命令删去中间的细节输出,整理如图所示:

start download process.

Boot started successfully!

Send command:getinfo version

version: U-Boot 2016.11

[EOT](OK)

Send command:sf probe 0//选择spi flash 0

[EOT](OK)

Send command:getinfo spi

Block:64KB Chip:16MB*1

ID:0xC2 0x20 0x18

Name:"MX25L128XX"

[EOT](OK)

waiting phy ready, it will take 8s.

Send command:setenv serverip 192.168.1.3

[EOT](OK)

Send command:setenv ethaddr 00:8c:55:07:b0:88

[EOT](OK)

Send command:setenv ipaddr 192.168.1.10

[EOT](OK)

Send command:setenv netmask 255.255.255.0

[EOT](OK)

Send command:setenv gatewayip 192.168.1.1

[EOT](OK)

Tftp server Download Home switched to

Send command:mw.b 0x81000000 0xFF 0x590000//把内存中从0x81000000 开始的0x590000个字节全部置1

[EOT](OK)

Send command:tftp 0x81000000 OHOS_Image.bin//把OHOS_Image.bin文档加载到内存中去起始地址为0x81000000.

Hisilicon ETH net controler

eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M

Using eth0 device

TFTP from server 192.168.1.3; our IP address is 192.168.1.10

Filename 'OHOS_Image.bin'.

Load address: 0x81000000

Bytes transferred = 5791744 (586000 hex)

[EOT](OK)

Send command:crc32 81000000 586000

crc32 for 81000000 ... 81585fff ==> 78b90ed7

[EOT](OK)

Send command:sf probe 0//选择spi flash 0

[EOT](OK)

Send command:sf erase 0x100000 0x600000//把flash存储器中从0x100000开始的6M字节的存储空间清零

Send command:sf write 0x81000000 0x100000 0x590000//把内存中从0x81000000开始的0x590000字节的内容copy到flash中flash中存储的起始地址是0x100000

device 0 offset 0x100000, size 0x590000

Send command:mw.b 0x81000000 0xFF 0x780000//把内存中从0x81000000 开始的0x780000个字节全部置1

[EOT](OK)

Send command:tftp 0x81000000 rootfs.img//加载rootfs.img到内存中去存储单位的起始地址是0x81000000

Hisilicon ETH net controler

eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M

Using eth0 device

TFTP from server 192.168.1.3; our IP address is 192.168.1.10

Filename 'rootfs.img'.

Send command:crc32 81000000 772314

crc32 for 81000000 ... 81772313 ==> ba26d341

[EOT](OK)

Send command:sf probe 0//选择spi flash 0

[EOT](OK)

Send command:sf erase 0x700000 0x800000//把flash存储器中从0x700000开始的8M字节的存储空间清零

Send command:sf write 0x81000000 0x700000 0x780000//把内存中从0x81000000开始的0x780000字节的内容copy到flash中flash中存储的起始地址是0x700000

device 0 offset 0x700000, size 0x780000

Send command:mw.b 0x81000000 0xFF 0x10000//把内存中从0x81000000 开始的0x10000个字节全部置1

[EOT](OK)

Send command:tftp 0x81000000 userfs.img//加载userfs.img到内存中去存储单位的起始地址是0x81000000

Hisilicon ETH net controler

eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M

Using eth0 device

TFTP from server 192.168.1.3; our IP address is 192.168.1.10

Filename 'userfs.img'.

Load address: 0x81000000

Loading: *##

 0 Bytes/s

done

Bytes transferred = 3020 (bcc hex)

[EOT](OK)

Send command:crc32 81000000 bcc

crc32 for 81000000 ... 81000bcb ==> 0361fc92

[EOT](OK)

Send command:sf probe 0//选择spi flash 0

[EOT](OK)

Send command:sf erase 0xf00000 0x100000//把flash存储器中从0xF00000开始的1M字节的存储空间清零

Send command:sf write 0x81000000 0xf00000 0x10000//把内存中从0x81000000开始的0x10000字节的内容copy到flash中flash中存储的起始地址是0xf00000

device 0 offset 0xf00000, size 0x10000

Writing at 0xf10000 -- 100% complete.

SF: 65536 bytes @ 0xf00000 Written: OK

[EOT](OK)

Partition  burnt successfully!

Send command:reset

reset success!

Partition burnt completed!

Serial channels were closed successfully.

3.3 USB烧录

硬件使用的双母口USB线。

3.3.1 Hitool工具配置

656e0b8d0fc992c7e2e199b53dd9fe81.png

文件目录中只要包含OHOS_Image.bin,rootfs.img,userfs.img三个文件即可,不限定位置。

烧写方式一定要选择DDR烧写。

3.3.2 烧录步骤:

3.3.2.1 烧录OHOS_Image.bin文件

在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:

mw.b 0x80000000 0xff 0x600000;// 0x600000就是OHOS_Image.bin所占的空间(取整)

usbtftp 0x80000000 OHOS_Image.bin;

sf probe 0;sf erase 0x100000 0x600000;sf write 0x80000000 0x100000 0x600000;//起始地址为0x100000

如果是Hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。

57d7cacb761d43c631e6448fdaaddd20.png

3.3.2.2 烧录rootfs.img文件

在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:

mw.b 0x80000000 0xff 0x800000;//0x800000就是rootfs.img所占的空间(取整)

usbtftp 0x80000000 rootfs.img;

sf probe 0;sf erase 0x700000 0x800000;sf write 0x80000000 0x700000 0x800000;//起始地址为0x100000 + 0x600000 = 0x700000

如果是Hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。

 8d0e258ff2abae87d6fcf9fe264bab69.png

3.3.2.3 烧录userfs.img文件

在串口终端中输入以下命令,每条命令的具体含义请参考网口烧录相关部分的描述:

mw.b 0x80000000 0xff 0x100000;//0x100000就是userfs.img所占的空间(取整)

usbtftp 0x80000000 userfs.img;

sf probe 0;sf erase 0xf00000 0x100000;sf write 0x80000000 0xf00000 0x100000;//起始地址为0x100000 + 0x600000 + 0x800000= 0xf00000

如果是Hi3518ev300的板子,请把命令中的0x80000000改成0x40000000。

c46706eb4f636d2e59817b2f7b65a9cb.png

3.3.2.4 烧录过程中控制台信息:

f278c240aca74971b441531e364f20e4.png

4. 开源板emmc烧录

烧录的时候,选择eMMC方式。我们这里选择通过网口烧录eMMC,网口的配置参考上文。

1d062c277655cfa5f8a99cb7a639f3f1.png

烧录完成之后,uboot的启动命令还有所不同,在eMMC中,存储是以512B为单位的,如果我们的文件(比如是OHOS_Image.bin)大小为6M(10进制),我们需要把它转换成16进制,具体转换的公式如下:

10进制中文件总大小:6* 1024 * 1024 Byte=6291456Byte,那么总共是多少个512KB的块呢?我们用6291456/512= 12288个块(十进制),再把十进制中的12288个块转换成16进制,得0x3000。那么也就是说一共有0x3000个512Byte的块。

setenv bootcmd "sf probe 0;mmc read 0x0 0x80000000 0x800 0x3000;";

setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=7M rootsize=15M rw"; saveenv;

5. 不同烧录方法之间的比较

Usb烧录方式和网口烧录方式想象,不同之处比较如下:

烧录方式

文件导入命令

内存起始地址

命令输入方式

校验环节

Usb烧录

usbtftp

0x80000000

手工

网口烧录

tftp

0x81000000

自动

网口烧录和USB烧录的速度基本是相同的,相比之下串口烧录就太慢了,所以正常情况下不推荐串口烧录。

综上比较,只从效率的角度看,烧录器的选择优先级为:

网口烧录>  USB 烧录>串口烧录

6. 其他问题

我们现在用的开发板Flash只有16M,如果程序过大,则无法进行烧录。所以做项目的时候,外挂的flash尽可能大一些,留有足够的预备空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合成孔径雷达_合成孔径雷达(SAR)基础:汇总

详细分析:合成孔径雷达成像技术对雷达成像的几点补充消费级小型无人机的合成孔径雷达成像我国微型合成孔径雷达发展现状对比三种天基系统,看SAR成像模式星载SAR详解:“高分三号”微波遥感卫星机载Pol-InSAR系统,新体制SAR成像结果…

将命令结果赋给变量_不得不了解的quot;变量quot;(2)—— 变量的赋值

祝大家圣诞快乐,今天晚上下班后去滑雪,第一次尝试单板,看着别玩玩得挺酷的,自己耍起来摔得差点骨头没散架!愈挫愈勇啦,就像我们学习脚本一样,要坚持学下去练下去才能熟练,才能日后装…

vscode代码库登录配置_VSCode 配置 Sonar Lint支持代码检查提效

安装SonarQube插件在VScode的扩展里面,安装SonarQube support for Visual Studio Code extension, 在安装了 SonarQube 之后,使用打开 VSCode 命令搜索功能,输入 Sonar,搜索结果如下:sonar lint 全局配置文…

数据立方体_立方体纹理

立方体纹理就是包含6个2D纹理的纹理.6个纹理有序排列在立方体的6个面.其可以通过方向向量采样立方体纹理上的纹素.创建立方体贴图跟创建2D贴图一样,但是绑定到GL_TEXTURE_CUBE_MAP上.glGenTextures(1, &CubeMapID); glBindTexture(GL_TEXTURE_CUBE_MAP, CubeMapID);立方体纹…

华为官方强制线刷工具_一加8/8Pro 线刷救砖

9008线刷是高通平台设备底层的刷机模式,是降级救砖必备良品,有了它,放心刷不想自己动手或遇到困难,可在后台回复: 远程刷机如果你是新手,要9008降级或者救砖,请先准备好充足的时间和良好的心态,…

centos vsftp mysql_CentOS6.4 实现基于mysql的vsftpd

大纲一、安装所需要的软件包二、创建虚拟用户账号三、配置vsftpd四、启动vsftpd服务并查看五、关闭防火墙与SElinux六、配置虚拟用户有不同的访问权限一、安装所需要的软件包1. 安装开发环境[rootftp ~]# yum -y groupinstall "Development Tools" "Development…

java实时监听mysql_java实时监控mysql数据库变化

对于二次开发来说,很大一部分就找找文件和找数据库的变化情况对于数据库变化。还没有发现比较好用的监控数据库变化监控软件。今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化1、打开数据库配置文件my.ini (一般在数据库安装目录)(D:\MYS…

python中cmd如何切换盘_redis 中如何切换db

redis 中如何切换dbredis数据库个数是可以配置的,默认为16个如上图我们如何切换呢?我在redis客户端查询如下 通过用select N 你想要的数据库 就能切到对应的数据库去了每个数据库的key值不会冲突,是分开存储的java代码中如何切换redis db&…

mysql max字符串报错_mysql [Warning] max_join_size报错问题解决办法

文章介绍了关于mysql [Warning] max_join_size报错问题解决办法,有需要的同学看看。100716 06:32:45 d started100716 6:32:45 [Warning] option max_join_size: unsigned value 18446744073709551615 adjusted to 4294967295100716 6:32:45 [Warning] option max_join_size: u…

jdbc odbc java mysql数据库连接_Java数据库连接之配置ODBC数据源

java使用JDBC-ODBC桥接连接SQLServer数据库需要配置ODBC数据源,配置步骤如下:1.进入控制面板,找到管理工具2.看到ODBC数据源,有64位和32位的,如果你的数据库是64位的就要选择64位的,32位的数据库也要选择对…

kali mysql停止服务器_从零开始:手把手教你黑客入门攻破服务器并获取ROOT权限...

有许多人对神秘的黑客一直感兴趣,却苦于网上资料繁杂,无法入门,在学黑客之前,你要知道什么是黑客,黑客就是那些对计算机有着强烈探索欲的人,一个真正的黑客,必须要至少掌握一门编程技术和熟悉系…

堆排序不稳定的例子_【译】Python中的堆排序

作者:Olivera Popović翻译:老齐介绍堆排序是高效排序算法的另一个例子,它的主要优点是,无论输入数据如何,它的最坏情况运行时间都是O(n*logn)。顾名思义,堆排序在很大程度上依赖于堆数据结构——优先级队列…

安卓手机备份_安卓手机数据备份与恢复方法汇总和操作详解

世界那么大,谢谢你来看我!!关注我你就是个网络、电脑、手机小达人每次使用电脑时,我们都会自觉的将重要的文件保存好并且备份起来防止丢失。那同样的,我们在使用手机时,也要养成手机备份的好习惯。今天就来…

mysql索引的使用及优化方法_MySQL中索引和优化的用法总结

1、什么是数据库中的索引?索引有什么作用?引入索引的目的是为了加快查询速度。如果数据量很大,大的查询要从硬盘加载数据到内存当中。2、InnoDB中的索引原理是怎么样的?InnoDB是MySQL的默认存储引擎,InnoDB有两种索引:…

苹果屏幕上的小圆点_苹果或明年部署miniLED屏幕 最早用在Macbook上

中关村在线消息:苹果将举行WWDC 2020开发者大会即将召开,昨日,业内人士手机晶片达人透露:“苹果明年即将在Macbook上与iPad导入Mini LED产品,效果非常非常的好。相关供应链都开始动了起来。”苹果明年即将在Macbook上与…

mysql默认字符集和排序_MySQL字符集和排序规则

MySQL在创建数据库是,需要设置数据库的字符集和排序规则,如图所示:我觉得这里有必要解释下字符集和排序规则这两个概念。字符集说到字符集,需要先提下字符、字符集和字符编码这几个词的含义。字符(Character)是各种文字和符号的总…

图形驱动程序和显卡驱动什么区别_以后你的手机也需要单独安装显卡驱动程序了...

在桌面平台制造商通常会定期发布显卡驱动优化和提高性能,对于多数用户来说安装显卡驱动应该是很平常的事。不过在智能手机方面还不需要安装额外的驱动程序,因为制造商通常会通过每年的安卓系统更新来发布新版驱动。有趣的是从明年开始我们的智能手机也要…

有向加权图 最大弱连通分支_开盘引来大涨,当下股市最大的风险是它?

何为昨天的大涨定性?昨天的大涨,上午的加权量能水平达到了2921亿元,一个非常健康的温和放量状态;下午的加权量能水平快速下降到2242亿元的水平,这是略高于五日均量的量能水平;大幅高开,集合竞价…

axure文本框提示文字_Axure教程:一个中继器实现密码验证

本文给大家介绍用一个中继器实现axure登录时账号密码验证效果,一起来看看~实现效果如下图:工具/原料:账号文本框密码文本框登录按钮中继器记录密码的文本标签(隐藏)提示框(隐藏)验证按钮(隐藏)方法/步骤步骤1设置中继器:新增列acc…

深度学习 autoencoder_笔记:李淼博士-基于模仿学习的机器人抓取与操控

说明:本文是Techbeat平台上李淼博士的讲座:“基于模仿学习的机器人抓取与操控”的总结笔记。原视频:TechBeat - 让AI大有可为​www.techbeat.net视频介绍:近四十年来,研究人员对机器人抓取的研究逐渐深入,涉…