海思方案中uboot、kernel和rootfs的烧写方法

以下内容源于朱有鹏课程的学习,以及海思方案的学习资料整理。如有侵权,请告知删除。

这里主要讲“使用tftp,烧写映像文件(uboot、kernel、rootfs)到SPI Flash”。(对比:开发阶段,我们一般使用NFS来烧写rootfs)海思还提供了“烧写映像文件到NAND Flash”、“烧写映像文件到eMMC”的方法,但大同小异,只是命令和地址空间不同而已。因为所用的板子默认从SPI Flash启动,因此介绍烧写映像文件到SPI Flash的方法。

一、烧录uboot

 假如没有烧录uboot,可以使用Hi_tool(/software/pc/Hi_TOOL目录下,效果类似于三星的DNW工具)来烧录uboot。使用Hi_tool时,需要先安装jre

知识储备:

1)DDR(64MB的SDRAM)的地址范围:80000000-83FFFFFF,地址范围是由手册查知的。

(2)一些命令含义

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

sf erase 0 100000 (擦除分区,0表示要擦除的起始地址,10000表示长度,这里刚好1M,和之前设置uboot长度1M相符)

sf write 82000000 0 100000(写spiflash分区,82000000表示源文件所在的SDRAM地址,后二者表示起始位置和长度)

mw.b 82000000 ff 100000(mw.b表示以字节为单位写内存,82000000表示起始地址,100000表示1M长度,ff表示全写成ff) 

(2)烧写过程

a、将映像文件从上位机下载到开发板的sdram中

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

c、将sdram的镜像烧录到spi的分区内

二、烧录uboot后

1、配置tftp服务器

  • 可以使用任意的tftp服务器(我的是虚拟机里的linux系统);
  • 将SDK中的package/image_uclibc(或image_glibc)下的相关映像文件拷贝到tftp服务器目录(我的是/tftpboot/)下。

2、参数配置

  • 单板上电后,敲任意键进入u-boot。设置serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。

    setenv serverip xx.xx.xx.xx
    setenv ipaddr xx.xx.xx.xx 
    setenv ethaddr xx:xx:xx:xx:xx:xx
    setenv netmask xx.xx.xx.xx
    setenv gatewayip xx.xx.xx.xx
    ping serverip,确保能够ping通,使得网络畅通。

3、在板载uboot界面中,烧写映像文件到SPI Flash(以16M SPI Flash为例)

从下图可以知道各文件的大小

(1)地址空间说明
        |      1M       |      3M       |      12M     |
        |---------------|---------------|---------------|
        |     boot      |    kernel    |     rootfs    |

分区 大小 起始地址 截止地址
bootloader 1M 0x00000000  0x00100000
kernel 3M 0x00100000 0x00400000
rootfs 12M 0x00400000 0x01000000

以下的操作均基于图示的地址空间分配,也可以根据实际情况进行调整,但注意对应。

(2)烧写u-boot

        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

(3)烧写内核

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

(4)烧写文件系统

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

(5)设置启动参数

1)参数含义

sf probe 0,表示查找spiflash;

sf read 0x82000000 0x100000 0x300000,表示从spiflash的0x100000开始,读取长度为0x300000的内容,写到SDRAM以0x82000000开始的位置中;(从spiflash的kernel分区中读取kernel)

root=/dev/mtdblock2,表示根文件系统在第2个分区中(0,1,2);

mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs),表示分区表(对比以前说过的、写死的、静态分区表,这里是传参的、动态的分区表,传参分区表优先级比静态分区表高)。

2)注意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

猜你喜欢

转载自blog.csdn.net/oqqHuTu12345678/article/details/82812123