1.HAL(HardwareAbstractionLayer)
单片机系统使用BSP(板级支持包BoradSupportPackage)可以直接进行应用开发;
日益增长的芯片种类和复杂度,直接使用BSP挑战大,为了程序的可阅读性以及可移植性提出了硬件抽象层HAL这一个概念;
HAL库的实现是基于BSP库的,只是将其进一步封装,形成统一的标准,操作系统使用HAL接口来实现对硬件的操作;
WinCE面向的硬件架构种类太多,x86, ARM, MIPS等,微软不可能把这些都做出来,因此硬件和内核通信的部分,交给了OEM厂商,这些厂商按照接口规范实现特定硬件的软件抽象,供内核调用。因此就加OEM抽象层(OAL)=HAL。
Windows HDL:hal.dll
参考:https://blog.csdn.net/tq384998430/article/details/53484512 板级支持包BSP和硬件抽象层HAL的区别和关联;
参考:https://bbs.csdn.net/topics/390886702 关于BSP与HAL的区别
硬件 --> BSP--> HAL --> 驱动--> OS -->SDK(中间件)--> 应用
2.1Kernel Mode内核模式(操作系统)
代码具有对硬件的所有控制权限,可执行所有CPU指令,访问内存所有地址。
操作系统最底层,任何异常都会导致整机停机。
2.1.1 Microkernel(微内核)
操作系统底层服务,线程调度,多处理器同步,中断/异常处理;
2.2.2 Kernel mode drivers(内核模式驱动)
硬件设备驱动程序含网络驱动程序,文件系统;
驱动程序分为 :字符设备,块设备和网络设备;
微软提供给用户的DDK 开发环境所提供的包含文件和链接用的库只支持C和C++语言,所以网络上开发驱动的人基本都是用C或C++语言.
Windows 95、98和NT,Microsoft引入了WDM(Windows Driver Mode)。
WDM的出现是因为Microsoft想要驱动程序代码和后面所有新的操作系统兼容[Microsoft WDM, 02]。因此,驱动遵守WDM规范的好处是,驱动程序只需编写一次,在Microsoft之后所有新版操作系统上使用时只需要重新编译该驱动即可。
参考:https://www.cnblogs.com/woshiweige/p/4518439.html Linux和Windows设备驱动架构比较
参考:https://baike.baidu.com/item/内核模式驱动/5112202
驱动是分层的;
L3:执行体(ntoskrnl.exe)
Windows操作系统基本服务,线程进程管理,内存管理,I/O管理等;
参考:https://blog.csdn.net/weixin_42135997/article/details/81032093 驱动初识与文件系统的理解
参考:https://blog.csdn.net/liyun123gx/article/details/29569189 驱动开发之用户模式和内核模式
User Mode用户模式
代码没有对硬件的直接控制权限,也不能直接访问内存地址。
应用程序通过调用系统接口(System APIs)来访问硬件。应用程序运行在用户模式
参考:https://blog.csdn.net/chy19911123/article/details/51089270 理解Windows内核模式与用户模式
参考:http://c.biancheng.net/view/1178.html 操作系统的运行机制(详解版)
参考:https://blog.csdn.net/tietao/article/details/8172411 误解程序运行(从单片机到开始)
参考:https://blog.csdn.net/liubing8609/article/details/80702818 理解用户模式(User Mode)和内核模式(Kernel Mode)
参考:https://www.zhihu.com/question/19849622/answer/15703017 Windows 8 是怎样做到同时支持 ARM 和 x86 架构的?