1、编译好SDK之后,在osdrv/pub/image_uclibc生成我们需要的镜像,可以看一下文件大小
接下来我们需要用到uboot、kernel、rootfs,其中rootfs是rootfs_hi3518ev200_64k.jffs2
2、烧录原理
开发板中用的是spiflash,有16M的大小。通过主芯片提供的isp下载的机制来下载。通过串口发送数据给主芯片(hi3518e),主芯片接收完数据后暂存到内存中去,之后通过spi接口将数据写入flash中。
这种方式不要求flash中有任何工具,所以很方便。
isp代码固化在了在了芯片的irom中。
一启动会默认的先从uart中接收数据(第一启动顺序),如果烧录工具和芯片通信的上,就会触发isp下载。如果没有就会进行第二顺序启动,即从flash中load代码,里面的细节就先不了解了。
3、烧录工具HI_Tool
这个工具是基于java开发的,所以要先安装jre-6u45-windows-i586,安装完后,
启动Hi3518E V200R001C01SPC030\01.software\pc\Hi_TOOl目录中的HiTool.exe
点击hitool平台中的hiburn,进入到工具界面。
之后可以看到以下界面,hitool支持串口和网路下载,这里我们仅使用串口进行下载,网路这块,以后有机会在试试看吧。
首先一开始要给开发板接上串口和电源,然后再打开这个hitool工具。
1、如果一开始看不到串口的话,点击刷新,就会出现串口号。
2、传输方式选择串口。
3、选择要下载的文件,只能是我们事先编译好的uboot。
4、器件是spi
5、开始地址和长度这个根据我们自己设置的大小来设即可,但不能小于烧录文件的大小。
最后点击烧录就可以开始烧录了。如果还是提醒串口啥的,那就先关闭这个工具,在开发板不断电的情况下,再从第一步开始做起。
开始烧录的时候,会出现以下窗口,但是进度条不会动的,这时候就要将开发板断电再上电,就可以正常下载了,这个下载方式和51单片机一模一样。下载完成会有提示。
4、这里只能下载我们编译好的uboot,否则下载一半会出现串口错误。主要原因是因为hitool的下载机制
、它先将我们要下载的东西存放在内部内存中(0x81000000)然后使用uboot的flash命令去烧写。
以我们现在烧录的uboot来说
1、Send command: getinfo version
2、Send command: getinfo bootmode
3、Send command: getinfo spi
4、Send command: sf probe 0
5、Send command: sf erase 0x0 0x100000
6、Send command: sf write 0x81000000 0x0 0x50000
7、Send command: reset
5、因为嵌入式系统为了简化,没有使用分区表来自动管理flash,所以都是事先定死的。所以在部署一个嵌入式系统前都要人为的定下一个分区
分区名 分区大小 起始地址 截至地址
bootloader: 1M 0x00000000 0x00100000
kernel: 3M 0x00100000 0x00400000
rootfs: 12M 0x00400000 0x01000000
6、接下来的kernel和rootfs则需要用tftp的下载方式下载到内存中去,然后再用uboot中的命令来下载到flash中。
7、tftp更新并重新烧写uboot的命令序列:
mw.b 0x82000000 ff 0x100000
tftp 0x82000000 u-boot-hi3518ev200.bin
sf probe 0
sf erase 0x0 0x100000
sf write 0x82000000 0x0 0x100000
————————————————–
tftp更新并重新烧写kernel的命令序列:
mw.b 0x82000000 ff 0x300000
tftp 0x82000000 uImage_hi3518ev200
sf probe 0
sf erase 0x100000 0x300000
sf write 0x82000000 0x100000 0x300000
—————————————————
tftp更新并重新烧写rootfs的命令序列:
mw.b 0x82000000 ff 0xc00000
tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2
sf probe 0
sf erase 0x400000 0xc00000
sf write 0x82000000 0x400000 0xc00000
8、正确的bootcmd和bootargs对应的设置命令:
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)
其中mtdparts是告诉内核将来我们的flash各分区大小是和名字是啥。
到内核后会打印出我们设置是分区名称和范围