Linux内核编程知识集锦
编译内核
下载源码
1 |
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git |
根据需要,切换分支。
安装工具
1 |
apt install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison |
配置内核
你也可以手工直接编辑.config文件。每个选项都可以设置以下值之一:
取值 | 说明 |
y | 将相应特性构建到内核中 |
n | 不包含此特性 |
m |
构建为模块,这样可以按需加载 注意:
|
12 years ago
0
Linux内核学习笔记(五)
调试
内核的调试比用户级程序困难的多,并且风险高——内核中的一个错误可能导致系统立即崩溃。驾驭内核调试的能力很大程度上取决于经验和对内核的深刻理解。
通过打印来调试
内核提供的打印函数 printk() 与对应的C库函数功能几乎相同,但是它有一些特殊的特性:
健壮性
printk()函数是个弹性极佳的函数,可以在中断上下文、进程上下文、持有任何锁时、…
阅读全文
13 years ago
0
Linux内核学习笔记(四)
I/O系统架构
当Linux内核组件要读写一些数据时,并不是请求一发出,内核便立即执行该请求,而是将其推迟执行。当传输一个新数据块时,内核需要检查它能否通过。Linux IO调度程序是介于通用块层和块设备驱动程序之间,所…
阅读全文
13 years ago
0
Linux内核学习笔记(三)
Linux使用虚拟内存技术。它是一种位于应用程序内存请求与内存管理单元(MMU,一般是集成于CPU的硬件)硬件之间的抽象层。虚拟内存计数有以下优势:
- 多个进程可以同时并发的运行,使用重复的虚拟内存地址
- 应用程序所需内存大于物理内存时也可以运行
- 程序代码中,只有部…
13 years ago
0
Linux内核学习笔记(二)
x86平台中,一个进程调用C库函数读取文件内容,其经历的处理步骤可能如下:
- 在用户空间,进程调用fread()库函数
- 库函数触发read()系统调用
- 0x80软中断被触发,CR0寄存器的PE位被置0,进入内核态
- read()系统调用对VFS层发起调用file_op…
13 years ago
0
Linux内核学习笔记(一)
Linux内核代码结构
代码目录 | 说明 |
arch | 特定体系结构的代码 |
block | 块I/O层 |
crypto | 加密API |
Documentation | 内核源代码文档 |
drivers | 设备驱动 |
firmware | 特定驱动需要的设备固件 |
fs | VFS和各文件系统 |
include | 内核头文件 |
ini… |
13 years ago
0