hi3516 uboot


原文链接: hi3516 uboot

setenv serverip 192.168.1.100;setenv ipaddr 192.168.1.10;
mw.b 0x82000000 0xff 0x300000;tftp 0x82000000 uImage;sf probe 0;sf erase 0x100000 0x300000;sf write 0x82000000 0x100000 0x300000;boot

mw.b 0x82000000 0xff 0x300000;tftp 0x82000000 uImage_hi3516dv300_uart3;sf probe 0;sf erase 0x100000 0x300000;sf write 0x82000000 0x100000 0x300000;boot
mount -t nfs -o nolock 192.168.1.100:/Volumes/linux/nfs/imx335 /nfsroot/;cd /nfsroot/rootfs ; sh run.sh ; vi /etc/machine-id

mw.b 0x82000000 0xFF 0x1C00000;tftp 0x82000000 rootfs-imx335.jffs2;sf probe 0;sf erase 0x400000 0x1C00000;sf write 0x82000000 0x400000 0x1C00000

《海思Hi35xx开发日记——之No.2》_chen_2008_good的博客-CSDN博客

3516dv300-imx327

arch=arm
baudrate=115200
board=hi3516dv300
board_name=hi3516dv300
bootargs=mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000
bootdelay=2
cpu=armv7
ethact=eth0
soc=hi3516dv300
stderr=serial
stdin=serial
stdout=serial
vendor=hisilicon
verify=n

bootargs=mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)
bootcmd=sf probe 0;sf read 0x81000000 0x100000 0x400000;bootm 0x81000000
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'

烧写 kernel 到 0x100000 - 0x500000

    setenv serverip 192.168.100.100;setenv ipaddr 192.168.100.10; mw.b 0x82000000 0xFF 0x400000;tftp 0x82000000 imx335/uImage_hi3516dv300_smp;
    sf probe 0;sf erase 0x100000 0x400000;sf write 0x82000000 0x100000 0x400000

烧写rootfs文件系统 16M 0x500000 -

    setenv serverip 192.168.100.100;setenv ipaddr 192.168.100.10; tftp 0x83000000 rootfs_hi3516dv300_64k.jffs2; sf probe 0;sf erase 0x500000 0xb00000;sf write 0x83000000 0x500000 0xb00000

setenv serverip 192.168.100.100;setenv ipaddr 192.168.100.10; mw.b 0x83000000 0xFF 0x1000000; tftp 0x83000000 16DV300+327.307.bin; sf probe 0;sf erase 0x100000 0x400000;sf write 0x83100000 0x100000 0x400000

烧写全部镜像

16DV300+327.307.bin

setenv serverip 192.168.100.100;setenv ipaddr 192.168.100.10;mw.b 0x83000000 0xFF 0x1000000; tftp 0x83000000 16DV300+327.307.bin; sf probe 0;sf erase 0x100000 0xf00000;sf write 0x83000000 0x100000 0xf00000

0x8000_0000 - 0xFFFF_FFFF DDR 存储空间 2GB

BoardType=600116006-BV-H1606
arch=arm
baudrate=115200
board=hi3516dv300
board_name=hi3516dv300
bootargs=mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=hi_sfc:1024K(Uboot),3072K(kernel),28672K(rootfs)
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000
bootdelay=1
chiptype=hi3516DV300
cpu=armv7
ethact=eth0
ethaddr=d0:22:12:88:88:88
fileaddr=82000000
filesize=9ee8b0
gateway=192.168.1.1
ipaddr=192.168.1.10
mac=D0:22:12:88:88:88
netmask=255.255.255.0
sensortype=imx307
serverip=192.168.1.100
uuid=1f26bb61-7a05-4517-962d-e5e84dae892b


Environment size: 727/65532 bytes

setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=hi_sfc:1024K(Uboot),3072K(kernel),28672K(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
setenv ethaddr d0:22:12:88:88:88

1.编译烧录uboot

编译方法:
cd /root/hi3516/u-boot-2010.06
./mk3516.sh

最终生成的u-boot-hi3516dv300.bin这个文件烧到板子上面去,编译命令在mk3516.sh这个脚本里面,客户自行查看

不建议客户乱动板子uboot,搞坏板子上的uboot就比较麻烦,需要拆flash下来
客户可以tftp下载进板子运行
setenv serverip 192.168.100.100;
setenv ipaddr 192.168.100.10;
tftp 0x82000000 u-boot-hi3516dv300.bin
go 0x82000000

2. 烧写内核kernel hi3516+imx385

编译内核
cd ./linux-4.9.y
./mk3516.sh

mk3516.sh 脚本里面包含了编译linux内核所需的所有的命令,具体看mk3516.sh文件,编译成功将生成在目录arch/arm/boot/uImage文件,这个就是要烧录到板子上的

制作rootfs文件系统
./mkfs.jffs2 -d ./rootfs -l -e 0x10000 -o rootfs-imx385.jffs2
生成的rootfs.jffs2这个就是要烧录到板子上的文件

以 32M SPI NOR Flash 为例

地址空间说明

    |    1024    |      3072K    |      28672K           |
    |------------|---------------|-----------------------|
    |    boot    |     kernel    |     rootfs            |

板子上电时按住crtl+c,进入uboot里面烧写内核,rootfs这些
uboot里面烧写内核
启动调试:
setenv serverip 192.168.100.100;setenv ipaddr 192.168.100.10;mw.b 0x82000000 0xFF 0x300000;tftp 0x82000000 hi3516dv300-imx335/uImage;bootm 0x82000000

烧写内核到 flash

setenv serverip 192.168.1.100;setenv ipaddr 192.168.1.10;

mw.b 0x82000000 0xff 0x300000;tftp 0x82000000 hi3516dv300-imx335/uImage;
mw.b 0x82000000 0xff 0x300000;tftp 0x82000000 uImage_hi3516dv300_uart3;
sf probe 0;sf erase 0x100000 0x300000;sf write 0x82000000 0x100000 0x300000

烧写rootfs文件系统
mw.b 0x82000000 0xFF 0x1C00000;tftp 0x82000000 rootfs-imx385.jffs2;sf probe 0;sf erase 0x400000 0x1C00000;sf write 0x82000000 0x400000 0x1C00000

设置启动参数和启动命令
setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=hi_sfc:1024K(Uboot),3072K(kernel),28672K(rootfs)';setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000';saveenv;reset

1、使用NFS文件系统进行开发
挂载:mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.2.155:/opt/rootfs_uclibc /mnt
卸载:umount /mnt

2、SPI NOR Flash烧写指令
烧写u-boot
3.3.1 SPI -Nor Flash 烧写方法 SPI-Nor Flash 烧写方法如下:
步骤 1. 在内存中运行起来之后在超级终端中输入:

mw.b ff 0x100000 /* 对内存初始化*/

tftp u-boot-hi3516cv500.bin /U-boot下载到内存/ # sf probe 0 /探测并初始化SPI-Nor flash/

sf erase 0x0 0x100000 /擦除 1M大小/

sf write 0x0 0x100000 /从内存写入SPI-Nor Flash/

Hi3516CV500 平台的可用地址 0x82000000。
步骤2. 上述步骤操作完成后,重启系统可以看到U-boot烧写成功。

sf probe 0
mw.b 82000000 ff 100000
tftp 0x82000000 u-boot-hi3516a.bin

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

【mw.b】mw.b表示按字节显示,内存初始化,填充内存。把内存 0x82000000 开始的 0x10000 字节设为 0xFF。
【sf probe 0】 探测并初始化SPI FLASH;
【0x82000000】内存地址
【erase】 表示从地址0擦除了1M的文件
【write】 表示从内存地址0x82000000写入1M文件

3、uboot相关参数
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
setenv bootdelay 3  /设置启动延时为2秒

bootargs各参数的含义如下:
mem:设置操作系统内存大小。以上设置mem=64M表示分配给操作系统内存为64M。
console:设置控制台设备。格式为console=ttyAMA0,115200表示控制台为串口0,波特率115200。
root:设置根文件系统挂载设备。格式为root= /dev/mtdblock3表示从Flash第3个分区挂载(Flash分区编号从0开始)。
rootfstype:设置挂载文件系统类型。
mtdparts:Flash分区描述,格式为mtdparts=hi_sfc:256K(boot),3M(kernel),1M(rootfs),5M(data)  //表示有4个分区,分区0大小为256用于bootloader启动,分区1大小为3M用于内核启动,分区2大小为1M用于根文件系统启动,5M为用户数据。

5、烧写类型

烧写uboot都是串口烧写方式,而tftp命令烧写为网口烧写。tftp也可以使用串口烧写,方法如下:

SecureCRT_CN  的时候  loady 0ox82000000 115200
传入-> 发送Ymodem  填写 要烧写的程序如 u-boot-nfs.bin
然后 Go  0x82000000
烧写成功

6、设置网络

ifconfig eth0 192.168.2.102 netmask 255.255.255.0
route add default gw 192.168.2.1  (会掉电丢失!)

想不掉电不丢失,则在/etc/init.d/rcS 写入:

ifconfig eth0 192.168.2.102 netmask 255.255.255.0
route add default gw 192.168.2.1

无法ping通外网

想ping通外网,则创建一个 /etc/resolv.conf

nameserver 8.8.8.8

7、tftp上传下载文件

tftp -g -r 1.mp3  192.168.151.52   从PC 传到 开发板

tftp -p -r 1.mp3  192.168.151.52   从开发板 传到 PC

8、开启telnet服务

先在开发板上开启 telnetd,执行:

telnetd &

然后在虚拟机上执行:

telnet 192.168.2.102  (开发板的IP地址)

Trying 192.168.2.102...
Connected to 192.168.2.102.
Escape character is '^]'.
(none) login: root
Password: 
Welcome to HiLinux.
None of nfsroot found in cmdline.
~ # 

用户名为:root

密码为:空  (直接回车即可)

————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/52583635

一、使用HiTool烧写:

nor/nand flash与emmc使用的镜像不一致,nor/nand flash可使用官方SDK中编译好的镜像来烧写,emmc需配置config为emmc方式重新编译出镜像才能烧写;

烧写nor/nand flash或emmc前,先将启动模式配置到相应模式:

参考《HiBurn 工具使用指南.pdf》将镜像烧写到flash/emmc中

二、配置u-boot:

nor flash-32M:

setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),4M(kernel),27M(rootfs)'  

setenv bootcmd 'sf probe 0;sf read 0x81000000 0x100000 0x400000;bootm 0x81000000'

nand flash-32M:

setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_nand:1M(boot),4M(kernel),27M(rootfs)'  

setenv bootcmd 'nand read 0x81000000 0x100000 0x400000;bootm 0x81000000'

emmc-16G:

setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rootwait rootfstype=ext4 rw blkdevparts=mmcblk0:1M(boot),4M(kernel),14905M(rootfs)'  

setenv bootcmd 'mmc read 0 0x81000000 0x800 0x2000;bootm 0x81000000'

说明:

bootargs:

mem=xxxM 分配给Linux操作系统的内存大小;

root=/dev/xxx 指定根文件系统所在的设备号、分区号;

rootfstype=xxx 指定根文件系统类型;

rw 声明启动权限,即以读写方式启动;

rootwait 指等待设备/dev/mmcblk0p1设备就绪后才尝试挂载rootfs,仅emmc需要该参数;

mtdparts/blkdevparts 根据flash/emmc总容量划定各分区大小;

bootcmd:

 sf read 0x81000000 0x100000 0x400000; 

OR nand read 0x81000000 0x100000 0x400000;

           0x81000000 将flash读取到内存的地址

           0x100000 flash读起始地址    

           0x400000 flash读长度

mmc read 0 0x81000000 0x800 0x2000;

           0 emmc设备号

           0x81000000 将emmc读取到内存的地址

           0x800 emmc读起始块号

           0x2000 emmc读长度块计数

emmc 块号/块计数计算方法:

根据u-boot启动时打印的信息,得知emmc的块大小为512byte(如上图);

kernel起始地址为1M(1*1024*1024byte),则起始块号为:blk#=1*1024*1024/512=2048,转换为16进制为0x800;

kernel长度为4M(4*1024*1024byte),则块长度计数为:cnt=4*1024*1024/512=8192,转换为16进制为0x2000。
————————————————
版权声明:本文为CSDN博主「yt123456yt」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yt123456yt/article/details/96310422

`