LINUX内核的特点:
1).可移植性很强.从其支持众多的CPU及DEMO板可以知道;
2).上层APP的统一.
这两点都得归功于内核设计的思想模型,简而言之就是驱动子系统的功劳.
最粗糙、最笼统的LINUX内核驱动设计思想模型图如下:
下面分析上述的框架图:
(1).直接面向用户空间(UserSpace)的是内核驱动子系统,比如一些用户空间的系统调用直接对接过去的就是子系统(SubSystem).如UART子系统、RTC子系统、FBI子系统、SPI子系统、IIC子系统、USB子系统等.以RTC子系统为例,BUSYBOX在启动过程中可以读取时间.一些用户空间的驱动如IIC、libusb等.也是得益于子系统(SubSystem).这使应用程序不用作大模块的改动便从一个平台移植到另外一个平台的重要保障.是应用程序和底层硬件完全隔离的"保证层";
(2).为了其可移植性,子系统(SubSystem)是平台无关性的.它向上对接了用户空间的应用程序,往下定义了一些结构体函数接口(需要根据我们平台相关的结构体信息去初始化这些结构体信息,此时子系统(SubSystem)被赋于浓重的平台相关性了),自身是子系统的代码逻辑(由于这部分代码很少改动,而且每个CPU平台都路由此代码,因此,是比较扎实可靠的);
(3).Device_Driver对子系统(SubSystem)而言,只是个"插件",把平台相关的信息插入到平台无关的子系统里面.
(4).HardWare,硬件层.没啥好说的,只是原理图上的电路,还有一些协议(如IIS、IIC、L3、SPI等).一般来说,SOC都集成这些协议的主控.功能电路一般很少.