Linux设备驱动 | 构造和运行内核模块

1. 将模块链接到内核 ​ 内核具有非常小的栈,可能和一个4096字节大小的页那样小。 在内核API中,函数名称中(__)通常表示接口底层组件,谨慎使用。 内核代码不能实现浮点数运算,如果打开浮点支持,在某些架构上,需要在进入和退出内核空间时保存和恢复浮点处理器的状态。这种额外的开销没有任何价值,内核代码中也不需要浮点运算。 ​ 2. 装载和卸载模块 insmod:将模块的代码和

- 阅读全文 -

Linux设备驱动 | 简述内核模块

1. 内核功能模块 ​ ​ 2. 设备和模块的分类 字符设备:可通过字节流(类似文件)进行访问的设备,字符设备驱动程序通常至少要实现open、close、read和write系统调用。 块设备:进行IO操作,可进行传输若干个完整的块的设备。 网络接口:任何网络事务都经过一个网络接口形成,网络接口由内核中的网络子系统驱动,负责发送和接收数据包,不需要了

- 阅读全文 -

Linux内核 | 系统调用

1. 系统调用 内核提供的用户空间和内核进行交互的一组接口,应用程序受限地访问硬件设备,提供创建新线程并与已有的进程进行通信,也提供了申请操作系统其他资源的能力。 1.2 系统调用形式 asmlinkage long sys_getpid(void) asmlinkage限定词是一个编译指令,通知编译器仅从栈中提取该函数的参数,每个系统调用都需要这个限定词。 为了兼容32位和64位系统,函数返回l

- 阅读全文 -

Linux内核 | 进程调度

1. 进程调度原理 最大限度地利用处理器时间,只要有可以执行的进程,那么就总会有进程正在执行。 按多任务系统分类 抢占式多任务 非抢占式多任务 按进程分类 IO消耗型:进程的大部分时间用来提交I/O请求或是等待I/O请求。 处理器消耗型:进程的大部分时间在执行代码 1.1 进程优先级 根据进程的价值和其对处理器的时间需求对进程进行分级。 Linux采用了两种优先级范围 nice值,范围[

- 阅读全文 -

Linux内核 | 进程管理

1. 进程和线程 1.1 定义 进程是处于运行状态的程序和相关资源的总称,是资源分配的最小单位。 线程是进程的内部的一个执行序列,是CPU调度的最小单位。 有一段可执行程序代码。 有一段进程专用的系统堆栈空间和系统空间堆栈。 有进程描述符,用于描述进程的相关信息。 有独立的存储空间,也就是专有的用户空间,相应的又会有用户空间堆栈。 Linux系统对于线程实现非常特殊,他并不区分线程和进程,线

- 阅读全文 -