目前手头有空,就玩了下hi3516dv300的开发板子,进行了sdk的编译(uboot +kernel+ko),详见下一篇;然后要进行固件分区烧录,现将步骤作个笔记。
0.前提:机器已经烧录好uboot,可以使用串口进入uboot模式;
1.打开tftp server ,请要烧录的文件(uImage/rootfs.camfs)放到其目录;
2.在uboot里找开系统分区信息:
Hit any key to stop autoboot: 0
hisilicon #
hisilicon # printenv
arch=arm
baudrate=115200
board=hi3516dv300
board_name=hi3516dv300
bootargs=mem=256M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rootfstype=ext4 ro rootwait blkdevparts=mmcblk0:1M(boot),8M(kernel),16M(rootfs),256M(appfs),8M(configfs),1280M(datafs),-(mntfs) reset=0
bootcmd=mmc read 0 0x82000000 0x800 0x4000;bootm 0x82000000
bootdelay=1
bootfile=uImage
cpu=armv7
ethact=eth0
ipaddr=192.168.1.10
netmask=255.255.255.0
phyaddrd=0
phyaddru=0
serverip=192.168.1.63
soc=hi3516dv300
stderr=serial
stdin=serial
stdout=serial
vendor=hisilicon
verify=n
Environment size: 585/262140 bytes
hisilicon #
3.烧录uImage:
由2中的红色部分可以看到kernel分区大小为8M,从1M地址开始。
mw.b 0x82000000 ff 0x800000;tftp 0x82000000 uImage
mmc erase 800 4000; mmc write 0 0x82000000 800 4000
cmd详解如下:
mw.b 0x82000000 ff 0x800000
ram start 0x82000000
ram set 0xff
ram length 0x800000 = 8M
tftp 0x82000000 uImage
从tftp server download uImage 到 0x82000000
mmc erase 800 4000;
emmc erase start addr(block):0x800 (=1MB, 1block =512Byte)
emmc erase length(block) 0x4000(8MB)
烧录log如下:
hisilicon # mw.b 0x82000000 ff 0x800000;tftp 0x82000000 uImage;mmc erase 800 4000; mmc write 0 0x82000000 800 4000
Hisilicon ETH net controler
eth0 : phy status change : LINK=DOWN : DUPLEX=FULL : SPEED=100M
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
TFTP from server 192.168.1.63; our IP address is 192.168.1.10
Filename 'uImage'.
Load address: 0x82000000
Loading: #################################################################
#################################################################
#################################################################
######################################
474.6 KiB/s
done
Bytes transferred = 3411694 (340eee hex)
MMC erase: dev # 0, block # 2048, count 16384 ... 16384 blocks erased: OK
MMC write: dev # 0, block # 2048, count 16384 ... 16384 blocks written: OK
4:烧录rootfs rootfs.camfs 16MB
cmd如下:
mw.b 0x82000000 ff 0x1000000;tftp 0x82000000 hi3516.rootfs.img
mmc erase 4800 8000; mmc write 0 0x82000000 4800 8000
烧录log如下:
hisilicon # mw.b 0x82000000 ff 0x1000000;tftp 0x82000000 hi3516.rootfs.img;mmc erase 4800 8000; mmc write 0 0x82000000 4800 8000
Hisilicon ETH net controler
eth0 : phy status change : LINK=DOWN : DUPLEX=FULL : SPEED=100M
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
TFTP from server 192.168.1.63; our IP address is 192.168.1.10
Filename 'hi3516.rootfs.img'.
Load address: 0x82000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#############################################################
599.6 KiB/s
done
Bytes transferred = 4706980 (47d2a4 hex)
MMC erase: dev # 0, block # 18432, count 32768 ... 32768 blocks erased: OK
MMC write: dev # 0, block # 18432, count 32768 ... 32768 blocks written: OK
5.如果rootfs是ext4格式,且flash是emmc,则使用如下的烧写方法:
mw.b 0x82000000 ff 0x1000000;tftp 0x82000000 hi3516.rootfs.img;
mmc erase 4800 8000; mmc write.ext4sp 0 0x82000000 4800 8000