驱动开发入门
1.Linux设备驱动程序
是一个允许计算机软件与硬件交互的程序。这种程序建立了一个硬件与软件沟通的界面。CPU经由主板上的总线(Bus)或其他沟通子系统(Subsystem)与硬件形成连接,这样的连接使得硬件设备之间的数据交换成为可能。
驱动程序是提供硬件到操作系统的一个接口,并且协调二者之间的关系。
1.2Linux开发下的两种状态
- 用户态和内核态:
用户态处理上层的软件工作。
内核态用来管理用户态的程序,完成用户态请求的工作。 - Linux下的开发一般有两种:一是应用程序开发,二是内核驱动程序开发,这两种开发分别对应用户态和内核态两种Linux状态。当我们在用户态的应用程序空间打印一个“Hello”程序的时候,在调用
printf("Hello");
之前的所有代码都运行在用户态。 - 当库函数
printf()
开始往lcd显示屏打印“Hello”的时候,会调用write()
函数系统调用实现打印“Hello”。这个操作就是让该进程从用户态跳转到内核态来执行。此时Linux内核的代码会调用lcd驱动提供的接口函数,把"Hello"输出到lcd显示屏上面。完成这些工作以后,write()
函数系统调用会返回,该进程也更跟从内核态返回到用户态。