linux内核设计与实现——第二章从内核出发
2.1 获取内核源码2.2 内核源码树arch——特定体系结构的源码crypto——Crypto APIDocumentation——内核源码文档drivers——设备驱动程序fs——VFS和各种文件系统include——内核头文件init——内核引导和初始化ipc——进程间通信代码kernel——像调度程序这样的核心子系统lib——通用内核函数mm——内存管理子系统和V...
·
2.1 获取内核源码
2.2 内核源码树
- arch——特定体系结构的源码
- crypto——Crypto API
- Documentation——内核源码文档
- drivers——设备驱动程序
- fs——VFS和各种文件系统
- include——内核头文件
- init——内核引导和初始化
- ipc——进程间通信代码
- kernel——像调度程序这样的核心子系统
- lib——通用内核函数
- mm——内存管理子系统和VM
- net——网络子系统
- scripts——编译内核所用的脚本
- security——Linux安全模块
- sound——语音子系统
- usr——早期用户空间代码
2.3 编译内核
- 配置内核:make menuconfig
- 编译:make
- 安装内核
2.4 内核开发的特点
- 内核编程时不能访问C库:对于内核来说,完整的C库太大了——几遍是从中抽取一个合适的子集——大小和效率都不能被接受,不过大部分常用的C库函数在内核中都 已经得到了实现;如操作字符串的函数组就位于lib/string.c文件中;内核打印用printk函数;
- 内核编程时必须使用GNU C:定义一个内联函数的时候,需要使用static作为关键字,如static inline void dog(),在内核中,为了类型安全的原因,优先使用内联函数而不是复杂的宏;gcc编译器支持在C函数中嵌入汇编指令;
- 内核编程时缺乏像用户空间那样的内存保护机制
- 内核编程时浮点数很难使用
- 内核只有一个很小的定长堆栈
- 由于内核支持一步中断、抢占和SMP,因此必须时刻注意同步和并发:解决办法是自旋锁和信号量
- 要考虑可移植性的重要性
更多推荐
已为社区贡献1条内容
所有评论(0)