第一季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.bin

sf 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_hi3518ev200

sf probe 0
sf erase 100000 300000
sf write 82000000 100000 300000

(5)烧写文件系统

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

mw.b 82000000 ff C00000
tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2

sf 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移植专栏中写死的、静态分区表,这里是传参的、动态的分区表。传参分区表优先级比静态分区表高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天糊土

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值