更多内容请访问:https://harmonyos.51cto.com,与华为官方共同建立的鸿蒙技术社区当时购买的Hi3516开发板到了,于是开始研究Hi3516开发板。Linux下DevEco新建Hi3516工程,通过HPM下载代码,一键构建,out目录下有三个重要文件:OHOS_Image.bin(大小5M)、rootfs.img(大小14M)、userfs.img(大小50M),在//vendor/hisi/hi35xx/hi3516dv300/uboot/out/boot/u-boot-hi3516dv300.bin(大小231K)上添加,共4个文件,可以烧写到开发板.编程前一定要认真学习官网的《Hi3516系列开发板编程》说明。windows下去润和官网下载串口驱动(“USB-to-SerialCommPort”+”PL2303_Prolific_DriverInstaller_v1_12_0”)并安装。还有一个Hi3516-HiTool工具可以在windows下烧录,不需要的不要下载。这里翻回来,还有一个HiUSBBurnDriver驱动可以下载,需要安装这个驱动才能通过USB口进行烧录。1、连接开发板和虚拟机中DevEco开发板的USB转串口线。虚拟机中DevEco开发板自带的USB转串口线默认直接连接Windows主机。切换到连接Linux虚拟机,如下图,选择“连接(断开主机连接)”。在Linux的DevEco中,在Hi3516工程的配置中的“upload_port”中选择对应的设备,将开发平台与DevEco连接起来。2、不建议烧写串口上面的upload_protocol。选择“hiburn-serial”模式开始串口烧录。该模式下,开发板只需要连接电源线和USB转串口线(连接Linux虚拟机DevEco),按照官网提供的步骤操作即可烧录。不过不推荐串口编程,速度太慢,烧一次要半个多小时,不得已。3.U盘烧录不成功。官网说只需要连接USB线(包括电源)和串口线即可。按照官方文档操作,平台需要“重启开发板(断电再上电)”。您无法拔下USB数据线并重新插入。开发板串口线插座侧面有一个SW3按钮(原理图UPDATE_MODE),实际按下去没有反应。估计你需要先做一些配置。.所以暂时还没有通过U盘烧录成功,先放下,以后再研究。4、将烧录虚拟机的网口的网络设置为桥接模式,这样虚拟机、windows主机、Hi3516开发板在当前局域网环境下就可以并排了。开发板需要通过网线连接到当前局域网,这样操作会比较复杂简单。【还没试过NAT模式,不知道行不行】如上图,upload_protocol选择“hiburn-net”模式,DevEco会自动生成:分别是IP地址,掩码,网关而虚拟机的IP地址为Hi3516开发板分配的IP(这个可以自己改成别的地址,只要不和局域网内的设备冲突即可)。至此,Hi3516开发板连接电源线,网线连接局域网,USB转串口线连接Linux虚拟机。首先阅读下一节“不要刻录fastboot”。去掉fastboot的烧录后,按照官方的操作说明。如果烧录不成功,可能需要检查网络配置是否正常。网口编程一般两三分钟就可以完成,缺点是需要联网。5.不要烧fastboot。如果平时开发中没有修改fastboot,则不需要烧录fastboot。如果在Windows下使用Hi3516-HiTool工具烧录,fastboot不勾选即可。如果是在Linux下通过DevEco烧录,必须手动删除fastboot。DevEco通过HPM创建和下载安装Hi3516工程时,默认勾选烧录的fastboot,这个坑。可以在Hi3516工程配置中的“hi3516dv300”标签下的“upload_partitions”工程中删除“partition:hi3516dv300_fastboot”,这样左边的“PROJECTTASKS”下就没有“hi3516dv300_fastboot”的烧录选项了。烧录密钥时避免烧录fastboot。当你需要燃烧时,只需添加它。如果不删除“partition:hi3516dv300_fastboot”,那么烧录时不要点击“上传”进行一键烧录,可以通过如下kernel/rootfs/userfs标签单独烧录一个分区。6.如果烧fastboot后修改了uboot代码,一定要烧fastboot,否则烧错了fastboot,然后开机机会会停留在:Hitanykeytostopautoboot:0##Error:"distro_bootcmd"notdefinedhisilicon#这一步需要重新设置bootcmd和bootargs。可以参考官方的操作说明。特别注意:setenvbootcmd"mmcread0x00x800000000x8000x4800;go0x80000000";我们之前已经将OHOS_Image.bin烧写到FLASH(emmc)中(烧写地址和大小就是下图中的Address和Length)。这个bootcmd是uboot启动鸿蒙内核的指令,意思是:从FLASH(emmc)的地址0x800开始(单位是512B,即1MByte),读取大小为0x4800的内容(unit:512B,即9MByte)(包括整个OHOS_Image.bin和部分空闲空间)到地址0x80000000的内存(DDR),从内存地址0x80000000开始执行指令,从而进入汇编代码引导LiteOS-A内核启动阶段(见《鸿蒙系统的启动流程》第二阶段)。这里0x4800的大小(9MB)必须和DevEco中填写的OHOS_Image.bin文件的大小一致(注意不是实际大小,而是下面的Length)。如下:文章开头提到编译好的OHOS_Image.bin(大小5M),这里给的9M空间足够了,不要随便修改。以后如果修改内核编译的OHOS_Image.bin大小超过9M,需要修改这里的Length参数。具体可以在“NewOption”中选择“partition_length”,然后进行设置。改成这个之后,后面的rootfs/userfs的起始地址也必须跟着相应的值。setenvbootargs"console=ttyAMA0,115200n8root=emmcfstype=vfatrootaddr=10Mrootsize=15Mrw";表示设置启动参数,输出方式为串口输出,波特率为115200,数据位为8,rootfs挂载在emmc设备上,文件系统类型为vfat,"rootaddr=10Mrootsize=15Mrw”对应填写的rootfs.img编程起始位置和长度,这里和DevEco填写的rootfs.img文件大小必须一致。之前的fastboot占用1M空间,kernel占用9M空间(虽然OHOS_Image.bin实际只用了5M),所以rootfs的起始地址从10M开始。对于size,根据DevEco(0x1400000)的配置,这里的rootsize=15M要改为rootsize=20M,如下图:本文开头的rootfs.img(size14M)其实只占用20M的前14M,暂时不用修改这个参数。修改系统代码,添加一些库文件等后,rootfs超过20M,Length参数也需要修改,会影响后续userfs的起始地址。目前userfs默认为50M,其余先按默认值处理即可。确认无误后执行:saveenvreset保存设置重启,应该可以正常启动。如果还是不能正常启动,需要看日志分析是哪一步异常。7、uboot命令行hisilicon#uboot启动到Hitanykeytostopautoboot:2这一步按任意键中断uboot对鸿蒙系统内核的启动,进入uboot命令行模式。导致进入uboot的命令行模式]。在hisilicon#下,键入“?”或“帮助”查看支持的命令。8、WindowsHi3516-HiTool烧录以上都是在Linux虚拟机的DevEco上烧录,这里我们也可以使用Hi3516-HiTool在windows下烧录。需要先做一些准备工作:在Linux下,按照上一节的操作进入uboot命令行,写入命令:setenvserverip192.168.1.114setenvipaddr192.168.1.55saveenvwindows主机作为服务器端,其ip地址为192.168.1.114,Hi3516开发板地址为192.168.1.55。然后将linux编译好的OHOS_Image.bin、rootfs.img、userfs.img、u-boot-hi3516dv300.bin复制到windows目录下。按照第一节的描述,断开USB转串口与linux的连接,回到windows主机的com6口。Windows下打开Hi3516-HiTool,确认以下配置与实际一致,尤其是四个文件的起始地址和大小,必须与上面setenvbootcmd和setenvbootargs的参数匹配,否则烧录后重启,并且启动会失败。确认无误后点击编程,将开发板断电重新上电即可开始编程。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区
