记录最近一年调试hisilicon 平台的相关经验,现已经转到互联网云存储方面的。话说嵌入领域,智能硬件领域,无非就是CPU,外设;但鉴于现在芯片原厂SDK 中基本都封装好啊! 改动的比较少,差不多就是按部就班的过程; 处于自己对互联网行业的向往, 现总结自己关于嵌入开发,特别是海思平台的开发; 鉴于自己的前期不重视,总结出三个字,“精,深,面”;精则为精通某一领域,深则为深挖其中的精髓,面则为逐步扩宽自己的知识面;
前面的纯属扯淡,欢迎调侃!
1. 3518EV200之Liteos
1.1 uboot篇
编译配置:make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- hi3518ev200_config
编译:make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-
生成bin档:./mkboot.sh reg_info_hi3518ev200.bin u-boot-hi3518ev200.bin
注意,reg_info_hi3518ev200.bin 为SDK中uboot_tools 目录生成的xls文件生成的io配置文件。
1.2 Liteos系统篇
编译Liteos系统:make CHIP=hi3518ev200
编译liteos APP程序:make CHIP=hi3518ev200 (原SDK Sample目录中会生成sample.bin程序,该程序主要实现驱动的初始化,文件系统的初始化,挂载文件系统,以及应用业务)
1.2.1 uboot 引导Liteos系统的启动CMD参数:
nand flash:
setenv bootcmd 'nand read 0x800080000x100000 0x700000; go 0x80008000’; saveenv
spi flash:
setenv bootcmd 'sf probe 0;sf read0x82000000 0x100000 0x700000;go 0x80008000'
注意,0x80008000 为Liteos 固定的启动地址,它是在编译时指定的连接启动地址,可在board.ld中修改。
1.3 Liteos 文件系统篇
1.3.1 Jffs2
JFFS2 (日志文件系统):管理在设备上实现的日志型文件系统;它主要应用与NOR型闪存,特点是可读写、支持数据压缩,并提供崩溃/掉电安全保护,提供写平衡支持。
初始化步骤:
(1)初始化头结点
init_head()
(2)添加JFFS2 分区
add_mtd_parttion(类型,分区起始地址,分区长度,分区号)
(3)挂载JFFS2
mount()实现设备节点和挂载点的挂载
shell 挂载命令 mount/dev/spinorblk1 /jffs1 jffs
判断是否挂载成功:在文件系统的根目录是否可以正常查看到挂载目录
将从串口得到如下回应信息,表明挂载成功。
HuaweiLite OS# mount /dev/spinorblk1/jffs1 jffs
挂载成功后,用户就能对norflash进行读写操作。
(4)卸载JFFS2
umount()
(5)删除JFFS2 分区
delete_mtd_partition 删除已经卸载的分区
jffspar 查看挂载分区的情况,如显示下列log 则说明挂载ok
jffs_partition num:0, devname:/dev/spinorblk0, mountpt:/jffs0, startaddr:0x0100000, length:0x0300000
1.3.2 FAT文件系统
它是File Alloction Table(文件配置表)的简称;它将硬盘分区为MBR、DBR、FAT、FDT、FADT区等5个区域;
ffconf.h FAT文件系统配置文件,可设置文件读写的相关属性
初始化步骤:
(1) 设备识别
(2) 文件系统挂载与卸载 mount /dev/mmcblk0p0 /sd0p0 vfat ;umount /sd0p0
1.4 Liteos NAND/NOR Flash 篇
初始化步骤:
(1) 初始化nand flash控制
Nand_init() /spinor_init() 初始化主控
(2)分区,flash 控制器初始化后,即可对其进行分区操作。
int add_mtd_partition( char *type, uint32_tstart_addr, uint32_t length, uint32_t partition_num)
[type]:存储介质类型,指定字符串为"nand"与"spinor"。分别代表两类存储介质。
[start_addr]:分区操作flash的物理开始地址。
[length]:分区操作Nand flash的分区大小。
[partition_num]:分区盘符。
eg:
add_mtd_p