linux内核设计与实现——第二章从内核出发

2.1 获取内核源码

2.2 内核源码树

  1. arch——特定体系结构的源码
  2. crypto——Crypto API
  3. Documentation——内核源码文档
  4. drivers——设备驱动程序
  5. fs——VFS和各种文件系统
  6. include——内核头文件
  7. init——内核引导和初始化
  8. ipc——进程间通信代码
  9. kernel——像调度程序这样的核心子系统
  10. lib——通用内核函数
  11. mm——内存管理子系统和VM
  12. net——网络子系统
  13. scripts——编译内核所用的脚本
  14. security——Linux安全模块
  15. sound——语音子系统
  16. usr——早期用户空间代码

2.3 编译内核

  1. 配置内核:make menuconfig
  2. 编译:make
  3. 安装内核

2.4 内核开发的特点

  1. 内核编程时不能访问C库:对于内核来说,完整的C库太大了——几遍是从中抽取一个合适的子集——大小和效率都不能被接受,不过大部分常用的C库函数在内核中都 已经得到了实现;如操作字符串的函数组就位于lib/string.c文件中;内核打印用printk函数;
  2. 内核编程时必须使用GNU C:定义一个内联函数的时候,需要使用static作为关键字,如static inline void dog(),在内核中,为了类型安全的原因,优先使用内联函数而不是复杂的宏;gcc编译器支持在C函数中嵌入汇编指令;
  3. 内核编程时缺乏像用户空间那样的内存保护机制
  4. 内核编程时浮点数很难使用
  5. 内核只有一个很小的定长堆栈
  6. 由于内核支持一步中断、抢占和SMP,因此必须时刻注意同步和并发:解决办法是自旋锁和信号量
  7. 要考虑可移植性的重要性

你可能感兴趣的:(学习笔记)