前一讲我们实现了一个简单的用户指令,在本系列文档中我们假定用户已经正确安装Nios II IDE开发环境并能创建和调试程序,对Nios II IDE开发环境不再介绍。
目前Nios II 的开发都是在HAL(hardware abstraction layer)的基础上进行的。在进一步介绍其他内容之前有必要介绍HAL。
HAL系统库是一个轻量级的运行环境,提供了简单的和硬件通讯的设备驱动程序。HAL API集成了ANSI C标准库,这些API允许你用标准C函数(例如:printf,fopen,fwrite等等)去存取设备。
HAL类似于ARM系统中的BSP(board-support package),提供了一个一致的设备存取界面。由于SOPC Builder和NIOS II IDE紧密的集成,在SOPC Builder生成硬件系统以后,NIOS II IDE 能够自动生成对应的客户HAL系统库。更新硬件系统设置以后,NIOS II IDE能自动更新HAL的驱动设置。在创建软件项目的时候,NIOS II IDE自动生成并管理HAL系统库。
HAL体系结构:
HAL系统库提供了下列系统服务:
1、 集成newlib。一个ANSI C标准库。(许多人都要求提供NIOS II中C库的说明,具体可以参考 http://sources.redhat.com/newlib)
2、 设备驱动。这些设备驱动程序提供了常用设备的驱动。同时也是我们学习设备驱动程序开发的范例。
3、 HAL API。提供了一个一致的设备存取、中断处理以及ALARM等工具。
4、 系统初始化。在main执行前完成相关的初始化任务。注意这里包含了BOOTLOAD以及程序重定位等工作。所以NIOS II开发中没有象ARM系统开发中涉及BOOTLOAD等问题。
5、 设备初始化。在main前分配设备空间,并初始化设备。
在NIOS II软件系统开发中,程序员划分为应用程序开发和设备驱动开发,从而为提高开发效率给出一条途径(实际开发中并不一定如此划分,实际我们都身兼数职披挂上阵J)。
1、 应用开发人员使用HAL API去完成开发工作
2、 设备驱动开发人员完成设备驱动的开发并融合到HAL体系中,供应用开发人员使用
设备类型:
在以后的文档中我们会给出NIOS II HAL设备被组织加入到双向设备链表中(在我的BLOG: http://www.pld.com.cn/blog/blog?name=jhljs中有设备组织的分析文挡)。并不是所有的设备被添加到同一个设备链表中而是分成了几个类型:
1、 字符模式设备
2、 时间模式设备
3、 文件系统设备
4、 以太网设备
5、 DMA设备
6、 FLASH设备
不同的设备有大体一致的模式,但内提供的设备驱动函数不同类型不一致。
在NIOS II 安装完毕以后,NIOS II IDE 中提供了上述类型的外设和相应的驱动程序。我们在以后的文档中会分析这些设备驱动程序,从而为开发自己的设备驱动提供有力的支持和坚实的基础。
OK,HAL就介绍这些了。点到为止,革命尚未成功,同志仍需努力。