1.基于linux的单片机开发和裸机开发的区别
\qquad单片机的裸机开发和基于linux的单片机开发,是有这本质的不同。
\qquad单片机的裸机开发更加底层,它是直接对寄存器进行操作,进而实现单片机的各种功能,即使有些MCU提供了库函数,但是本质还是对寄存器的种种操作。
\qquad基于linux的单片机开发,这里的意思是单片机的芯片上要运行linux操作系统。linux操作系统包括三部分,一是操作系统内核,二是驱动程序,三是应用程序。这里面,驱动程序获取外设,传感器的数据,控制外设;驱动程序获取的数据,可以提交给应用数据,再进行各种利用和处理。所以不同于裸机开发的直接操作寄存器,基于linux的单片机开发,需要编写驱动程序,与单片机的各种外设打交道,从而获取外设的数据,或者控制外设;从外设获取的数据,提交给应用程序,可以进一步加工利用。
2.驱动程序和应用程序
\qquadlinux的操作系统内核和驱动程序运行在内核空间,应用程序运行在用户空间。应用程序访问内核空间时,有三种方式:系统调用,异常和陷入。基于linux的单片机开发,最重要的就是驱动程序的开发,其次是还有一些应用程序的开发,比如一些测试程序。
3.驱动程序的开发
\qquad驱动程序的开发是基于linux下的各种驱动框架的开发;linux下一切皆文件,驱动程序设备的最终表现也是文件,一般表现为/dev/×××,涉及的操作有对文件的打开,关闭,读写等等。
4.驱动程序的开发分类
\qquad字符设备驱动、块设备驱动、网络设备驱动
\qquad字符设备驱动:I/O传输过程中,以字符为单位进行传输。用户对字符设备发出读写请求,硬件设备读写操作基本同时开始。
\qquad块设备驱动:数据以块为单位进程传输,用户对块设备读写时,硬件设备不会立即开始。磁盘类,闪存类都封装成块设备。
\qquad网络设备驱动:网络设备是一类特殊的设备,它不像字符设备和块设备那样通过特定的设备文件进行访问,而是通过socket函数进行访问