第一季6:海思方案中uboot、kernel和rootfs的烧写方法

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

一、概述

因为所用的板子默认从SPI Flash启动,因此本文主要讲如何“使用tftp,烧写映像文件(uboot、kernel、rootfs)到SPI Flash”。另外海思还提供了“烧写映像文件到NAND Flash或者eMMC”的方法,但大同小异,只是命令和地址空间不同而已。

二、烧录uboot

(1)假如还没有烧录uboot,可以在PC端使用Hi_tool工具(/software/pc/Hi_TOOL目录下,效果类似于三星的DNW工具)来烧录uboot。

(2)使用Hi_tool时,需要先安装jre。

(3)烧写过程:

a、将映像文件从上位机下载到开发板的SDRAM中(即内存)。

b、擦除开发板的spiflash相应的分区。

c、将SDRAM中的镜像烧录到spi的分区内。

三、烧录uboot后

1、配置tftp服务器

(1)配置tftp服务器,见博客https://xiefor100.blog.csdn.net/article/details/125572043。

(2)将SDK中的/package/image_uclibc_hi3518ev200下的相关映像文件(这是SDK提供的已经制作好的镜像文件)拷贝到tftp服务器目录(我的是/tftpboot/)下。

root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/package/image_uclibc_hi3518ev200# ls
rootfs_hi3518ev200_128k.jffs2  rootfs_hi3518ev200_2k_128k_32M.img  rootfs_hi3518ev200_32M.ext4   u-boot-hi3518ev200.bin
rootfs_hi3518ev200_256k.jffs2  rootfs_hi3518ev200_2k_4bit.yaffs2   rootfs_hi3518ev200_64k.jffs2  uImage_hi3518ev200
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/package/image_uclibc_hi3518ev200# cp u-boot-hi3518ev200.bin /tftpboot/
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/package/image_uclibc_hi3518ev200# cp rootfs_hi3518ev200_64k.jffs2 /tftpboot/
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/package/image_uclibc_hi3518ev200# cp uImage_hi3518ev200 /tftpboot/
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/package/image_uclibc_hi3518ev200# 

2、uboot的参数配置

(1)设置uboot的serverip(即tftp服务器的ip)、ipaddr(开发版ip)和ethaddr(开发板的MAC地址)、netmask、gatewayip,使得与tftp服务器同一网段。

(2)然后在开发板上ping虚拟机,确保能够ping通,使得网络畅通。

3、在uboot控制台中,烧写映像文件到SPI Flash

(1)执行“du -h *”得知待烧录的各文件的大小如下。

root@ubuntu:/tftpboot# ls
rootfs_hi3518ev200_64k.jffs2  u-boot-hi3518ev200.bin  uImage_hi3518ev200
root@ubuntu:/tftpboot# du -h *
4.8M	rootfs_hi3518ev200_64k.jffs2
268K	u-boot-hi3518ev200.bin
2.6M	uImage_hi3518ev200
root@ubuntu:/tftpboot# du
7784	.
root@ubuntu:/tftpboot# 

(2)spiflash的地址空间如下,以下的烧写操作均基于该表格的地址空间分配,也可以根据实际情况进行调整。

分区大小起始地址截止地址
bootloader1M0x00000000 0x00100000
kernel3M0x001000000x00400000
rootfs12M0x004000000x01000000

另外,由手册查知开发板的内存(64MB的SDRAM)的地址范围是80000000~83FFFFFF。

(3)烧写u-boot

在uboot控制台上分条执行以下指令。其表示从虚拟机中下载uboot镜像到以地址0x82000000开始的内存中,然后再从内存中读取数据写到spiflash中。

sf probe 0
mw.b 82000000 ff 100000
tftp 0x82000000 u-boot-hi3518ev200.binsf probe 0
sf erase 0 100000
sf write 82000000 0 100000    reset

注意,重启后要设置环境变量serverip、ipaddr为同一网段并save。

set serverip '192.168.1.141'
set ipaddr '192.168.1.88'
save

(4)烧写内核

在uboot控制台上分条执行以下指令。

mw.b 82000000 ff 300000
tftp 82000000 uImage_hi3518ev200sf probe 0
sf erase 100000 300000
sf write 82000000 100000 300000

(5)烧写文件系统

在uboot控制台上分条执行以下指令。

mw.b 82000000 ff C00000
tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2sf probe 0
sf erase 400000 C00000
sf write 82000000 400000 C00000

(6)设置启动参数

在uboot控制台上分条执行以下指令。注意mem=32M,实际硬件是64M,硬件上的64M内存有两个用途,一部分给OS用,一部分给MPP使用。这里32M指的是OS使用的。

set bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
set bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)'
save

4、上述指令含义

sf probe 0

  • 整句表示查找spiflash。
  • sf表示spiflash,probe表示查找,0表示板载spiflash的编号(可能有多个,这里0表示编号)。

sf erase 0 100000

  • 整句表示擦除uboot分区。
  • 0表示要擦除的起始地址,(16进制的)100000表示长度,这里刚好1M,和设置uboot长度1M相符。

sf write 82000000 0 100000

  • 整句表示将数据从SDRAM烧写到spiflash。
  • 82000000表示源文件所在的SDRAM地址,后二者表示起始位置和长度。

mw.b 82000000 ff 100000

  • mw.b表示以字节为单位写内存。
  • 82000000表示写内存时的起始地址,100000表示要写1M长度,ff表示内存的每个字节都写成1111_1111。

sf read 0x82000000 0x100000 0x300000

  • 整句表示从spiflash的kernel分区中读取kernel。
  • 表示从spiflash的0x100000开始,读取长度为0x300000的内容,写到SDRAM以0x82000000开始的位置中。

root=/dev/mtdblock2

  • 表示根文件系统在第2个分区。

mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)

  • 表示分区表。
  • 对比uboot移植专栏中写死的、静态分区表,这里是传参的、动态的分区表。传参分区表优先级比静态分区表高。

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

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

相关文章

CSS如何正确显示人民币符号¥

我们做网页时要正确显示人民币符号可以用如下办法:CSS:在中文输入法下用shift4输出的¥在微软雅黑(Microsoft YaHei),华文细黑(STXihei),(MingLiu)…

java模式之装饰模式

1. 什么叫装饰模式? 根据业务的需求,需要对一个类的方法进行增强的处理。 2. 为什么需要装饰模式? 拓展性更加的好,当觉得这个装饰不好的时候,可以直接拿下,不需要改变任何的代码。 3. 装饰模式的一个具体的应用&…

字体文件解析 c语言,如何正确地从C语言的文件中读取某些字符串?

您试图从文件中读取的内容并不简单,但可以通过设置一个标志来处理,该标志告诉您是否已经看到a或b,跳过所有空白和:字符,将所有其他字符存储在缓冲区中,根据需要重新分配,然后在第二个“A”或“B”找到了,把那个角色放回FILE*流与ungetc,nul终止并返回缓冲区。听起来很简单——对…

如何判断linux系统是32位还是64位的?

最简单的是输入命令:uname -m 查看输出,如果输出是i686这种ixxx系列的,都是32位系统,如果出现x86_64这样的,就是64位。

02 - 替换SetInput方法 VTK 6.0 迁移 (2013-06-30 16:22)

VTK6 引入了许多不兼容的变化,这其中就包括用SetInputData()和SetInputConnection()替换SetInput()方法。在先前的版本中,VTK4 引入了SetInput()方法,VTK5中引入了SetInputConnection()。 下面举一些例子:在如下例子中&#xff0c…

c语言中怎么 写子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*************************************************************************************** 外部中断0实验 *实现现象:下载程序后按下K3按键可以对D1小灯状态取反。注意事项:无。***********************…

Java Web笔记之Struts2.1 +Hibernate3.3 +Spring3.0

2019独角兽企业重金招聘Python工程师标准>>> 1、Struts2 1.1、了解Struts2 Struts2是基于MVC设计模式的Java Web框架技术之一,按照MVC设计思想把Java Web应用程序分为: 控制器层,包括核心控制器FilterDispatcher和业务控制器Actio…

高地址和低地址、高字节与低字节、大小端模式的转换、存储顺序

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 一、高地址和低地址 二、高字节低字节 如int a16777220,化为十六进制是0x01 00 00 04,则04属于低字节,01属于高字节。 三、大小端模式 (1)如果a在内…

漫谈数据挖掘从入门到进阶

入门:数据挖掘入门的书籍,中文的大体有这些:Jiawei Han的《数据挖掘概念与技术》Ian H. Witten / Eibe Frank的《数据挖掘 实用机器学习技术》Tom Mitchell的《机器学习》TOBY SEGARAN的《集体智慧编程》Anand Rajaraman的《大数据》Pang-Nin…

C语言程序设计二期末考试,C语言程序设计期末考试试卷2.doc

C语言程序设计期末考试试卷2选择题(单选题,每小题2分,共15题,30分)注意:请将答案写在每小题的题号左边1.一个C程序由若干个C函数组成,各个函数在文件中的位置为_____A______。A) 任意B) 第一个函数必须是主…

(转)Asp.Net生命周期系列一

原文地址:http://www.cnblogs.com/skm-blog/archive/2013/07/07/3176713.html Asp.Net生命周期对于初级甚至中级程序员来说,一直都是一个难题,很多程序员不了解生命周期,导致使用Asp.Net做开发感觉很不灵活,感觉太多东…

c语言枚举法礼泡声次数,C语言枚举类型举例

C语言枚举类型举例注:以下全部代码的执行环境为VC 6.0宏和枚举的区别宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不存在了。而枚举是在程序运…

【IOS】集成zxing(二维码扫描)

现在zxing已经到了2.2版本,以前的集成方式出了点问题。下面我做出一点修正。以前的版本的集成方法,参考:http://blog.devtang.com/blog/2012/12/23/use-zxing-library/按照以前的方式做好后 然后就是适配以下现在的版本的修改1.增加 SenTe…

与TCP有关的面试内容

以下内容源于网络资料的学习与整理。 参考博客 TCP/IP四层模型 - BlueTzar - 博客园(OSI参考模型和TCP模型的详解,包括格式) TCP/IP协议-为什么说TCP是可靠连接_shuaixio的博客-CSDN博客(为什么可靠及优缺点) 两张动图…

登录后跳转到原页面

可以在点击登录页面时,进行url传值,比如从a.html到b.html,可以a.html?oldurlb.html 带有特殊符号、中文的可以加个encodeURIComponent()转载于:https://www.cnblogs.com/wuchao/p/3179350.html

c语言建立一个链表,每个结点包括姓名和成绩,求C语言几道题的答案~~拜托了~~...

#include#include#include#include#include#includevoid pause();typedef struct STUDENT{char studentNumber[20]; //学生学号char studentName[20]; //学生姓名char className[20]; //班级名称float chinese; //语文绩float maths; //数学成绩float english; //外语成绩float…

嵌入式面试中常见的编程题目

以下内容源于网络资料的学习整理,如有侵权,请告知删除。 目录 1、将字符串反转 2、数字翻转和回文判断 3、大小端问题 (1)判断大小端 (2)大小端转换 4、实现函数memcpy(), strcpy(), strcmp(), strc…

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表,我去看了一下,丢失了很多个表; 问题: 直接拷贝data下的数据库数据进行备份…

回旋矩形C语言,C语言回旋函数解释下,该如何处理

当前位置:我的异常网 C语言 C语言回旋函数解释下,该如何处理C语言回旋函数解释下,该如何处理www.myexceptions.net 网友分享于:2013-06-08 浏览:30次C语言回旋函数解释下给定两个整数M,N,生成一个M*N的矩阵,矩阵中元…