裸机驱动一般针对没有操作系统支持的层面,不用考虑操作系统对它的调用。
Linux驱动是在裸机驱动基础上,按照一定的规范来实现, 虽然实现的都是同一个东西,不过你发现在 Linux驱动 搀杂 了许多维护信息。
总之,Linux设备驱动就是比裸机驱动多了一些框架。
裸机底层驱动设计方法:
所谓裸机在这里主要是指系统软件平台没有用到操作系统。在基于ARM处理器平台的软件设计中,如果整个系统只需要完成一个相对简单而且独立的任务,那么可以不使用操作系统,只需要考虑在平台上如何正确地执行这个单任务程序。不过,在这种方式下同样需要一个Boot Loader,这个时候的Boot Loader一般是自己写的一个简单的启动代码加载程序。大家所熟悉的各种Boot Loader下的设备驱动,其实就是很好的裸机驱动程序。比如说U-Boot下的网卡驱动、串口驱动、LCD驱动等。
在裸机方式下,ARM的软件集成开发环境就显得极为重要,因为在这种方式下可以把所有代码都放在这个环境里面编写、编译和调试。在这种方式下测试驱动程序,首先要完成CPU的初始化,然后把需要测试的程序装载到系统的RAM区/或者SDRAM中。当然,如果需要处理一些复杂的中断处理的话,最好也把CPU的复位向量表放到RAM区中。把所有程序都调试好之后,再把最后的程序烧写到Flash里面去执行。
BOOTLOADER 对NANDFLASH的操作是为读取(装载)存储在NAND上的内核,当内核已由BOOTLOADER 读取到内存中去后,系统控制权交有内核控制,此时,一般是BOOTLOADER中的一些参数内核需要用到,其它基本上没有用了,原来用于存放BOOTLOADER的内存(有的开发板NANDFLASH中有前面的4K存储空间与内存地址重叠,小点的BOOTLOADER可一直接在这4K 的空间中执行)基本上可以由内核回收利用,所以内核不会用到BOOTLOADER上的NAND的驱动,也就就是内核需要自己的NANDFLASH驱动,不然文件系统无法加载。