序言
近来想给开发板做Linux内核移植,一进来发觉水很深,有好多东西可以研究linux下内核与应用程序之间的通信,在边移植边学习的过程中好多概念之间的关系仍然有点迷糊,干脆就停一下把这块的东西学一下再出发。
这儿的关系总结都是本着每一层之间的联系来的,概念的概括也都是以与下一级概念关联为目的来概括的所以不是很权威,仅供参考,以理清思路为使用目的
应用程序
程序员调用API或则库函数编撰新的程序实现目标功能构成应用程序
API
API(用户编程插口)是操作系统供给用户便捷设计应用程序的函数,是一个提供给应用程序的插口,是与程序员进行直接交互的一组函数,它与库函数的区别是库函数是一门编程语言本身支持的一些基本函数。
因为在linux中,将程序的运行空间分为内核和用户空间(内核态和用户态);逻辑上它们互相隔离,因而应用程序不能访问内核数据linux vi命令,也难以调用内核函数,所以用户使用系统提供的API在用户空间编撰的程序要想运行linux下内核与应用程序之间的通信,必须得用到系统调用,由API和系统调用共同完成用户态和内核态的数据访问
系统调用
操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务
作用:按照用户程序中的API调用情况向内核发软中断恳求
内核
构成:由各类硬件的检查程序和控制各类硬件工作的内核模块构成使用时内核加载内核模块才能实现对硬件的控制
作用:处理系统调用中的各类软中断,完成对各类硬件的操作和控制,产生系统资源的调配
内核模块
驱动程序可以编译成为内核模块。
这点是linux做得比较好的地方,假如有新硬件设计下来linux设置默认网关,我们只要以向厂家发起联名的方式,强烈要求硬件开发商发展Linux上的驱动程序之后将其编译成内核模块,使用时加载这个模块到内核就可以在不改变内核情况下驱动新硬件了
驱动程序
是硬件厂商按照操作系统编撰的配置文件,主要作用是计算机系统与硬件设备之间完成数据传送的功能,把硬件的功能告诉笔记本系统,但是也将系统的指令传达给硬件
设备
为了管理设备,系统为每位设备分配一个编号,一个设备号由主设备号和次设备号组成。主设备号标识某一种类的设备,次设备号拿来分辨同一类型的设备。linux操作系统中为设备文件编号分配了32位无符号整数,其中前12位是主设备号,后20位为次设备号,所以在向系统申请设备文件时主设备号不好超过4095,次设备号不好超过2^20-1,设备号经常会在mknode创建设备文件时用到