当前位置:   article > 正文

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

uboot烧录

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

一、概述

因为所用的板子默认从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/)下。

  1. root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/package/image_uclibc_hi3518ev200# ls
  2. rootfs_hi3518ev200_128k.jffs2 rootfs_hi3518ev200_2k_128k_32M.img rootfs_hi3518ev200_32M.ext4 u-boot-hi3518ev200.bin
  3. rootfs_hi3518ev200_256k.jffs2 rootfs_hi3518ev200_2k_4bit.yaffs2 rootfs_hi3518ev200_64k.jffs2 uImage_hi3518ev200
  4. 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/
  5. 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/
  6. root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/package/image_uclibc_hi3518ev200# cp uImage_hi3518ev200 /tftpboot/
  7. 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 *”得知待烧录的各文件的大小如下。

  1. root@ubuntu:/tftpboot# ls
  2. rootfs_hi3518ev200_64k.jffs2 u-boot-hi3518ev200.bin uImage_hi3518ev200
  3. root@ubuntu:/tftpboot# du -h *
  4. 4.8M rootfs_hi3518ev200_64k.jffs2
  5. 268K u-boot-hi3518ev200.bin
  6. 2.6M uImage_hi3518ev200
  7. root@ubuntu:/tftpboot# du
  8. 7784 .
  9. root@ubuntu:/tftpboot#

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

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

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

(3)烧写u-boot

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

  1. sf probe 0
  2. mw.b 82000000 ff 100000
  3. tftp 0x82000000 u-boot-hi3518ev200.bin
  4. sf probe 0
  5. sf erase 0 100000
  6. sf write 82000000 0 100000    
  7. reset

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

  1. set serverip '192.168.1.141'
  2. set ipaddr '192.168.1.88'
  3. save

(4)烧写内核

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

  1. mw.b 82000000 ff 300000
  2. tftp 82000000 uImage_hi3518ev200
  3. sf probe 0
  4. sf erase 100000 300000
  5. sf write 82000000 100000 300000

(5)烧写文件系统

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

  1. mw.b 82000000 ff C00000
  2. tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2
  3. sf probe 0
  4. sf erase 400000 C00000
  5. sf write 82000000 400000 C00000

(6)设置启动参数

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

  1. set bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
  2. set bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)'
  3. 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移植专栏中写死的、静态分区表,这里是传参的、动态的分区表。传参分区表优先级比静态分区表高。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/173716
推荐阅读
相关标签
  

闽ICP备14008679号