1. 文件系统(FS)
    1. Ext2
      1. 超级块
        1. ext2_super_block
    2. Ext3
      1. 超级块
        1. ext3_super_block
    3. sysfs
      1. 函数
        1. sysfs_create_file() 在sysfs下创建一个文件夹
    4. 全局变量
      1. dlm_kset /sys/kernel/dlm
    5. 进程数据文件系统(procfs)
      1. CPU 的信息 (型号, 构架, 缓存大小等) /proc/cpuinfo
        1. proc_cpuinfo_init()
        2. phys_proc_id 物理CPU booted_cores 代表核
      2. /proc/kcore proc_kcore_init()
      3. /proc/maps proc_nommu_init()
      4. /proc/ioports /proc/iomem ioresources_init
      5. /proc/schedstat proc_schedstat_init()
      6. /proc/swaps procswaps_init()
      7. /proc/timer_list init_timer_list_procfs
      8. 可用设备列表 /proc/devices
      9. 已加载的模块列表 /proc/modules
        1. proc_modules_init()
      10. 已加载的文件系统的列表 /proc/mounts
      11. 被支持的文件系统 /proc/filesystems
      12. 内核版本字符串 /proc/version
      13. 系统启动时输入的内核命令行参数 /proc/cmdline
        1. proc_cmdline_init()
      14. 内核配置压缩文件 /proc/config.gz
      15. 内存域信息 /proc/zoneinfo
      16. 伙伴系统信息 /proc/buddyinfo
      17. slab分配器信息 /proc/slabinfo
        1. slab_proc_init()
      18. 物理内存、交换空间等的信息 /proc/meminfo
        1. proc_meminfo_init()
      19. 虚拟内存的统计信息 /proc/vmstat
      20. 虚拟地址分配映射信息 /proc/vmallocinfo
      21. IO内存映射信息 /proc/iomem
        1. ioresources_init()
      22. IO端口映射信息 /proc/ioports
        1. ioresources_init()
      23. 内核软中断信息 /proc/softirqs
        1. proc_softirqs_init()
      24. 硬件中断信息 /proc/interrupts
        1. proc_interrupts_init()
      25. 内核符号信息,主要用于调试 /proc/kallsyms
      26. 内核日志接口文件 /proc/kmsg
      27. SysRq触发文件 /proc/sysrq-trigger
      28. 系统上电启动时间和空闲时间统计 /proc/uptime
      29. 系统硬盘或flash分区信息 /proc/partitions
  2. 虚拟文件系统(VFS)
    1. 文件系统类型
      1. 基于磁盘的文件系统,例如FAT32,Ext2/3
      2. 虚拟文件系统,例如/proc、/sys
      3. 网络文件系统
    2. VFS的结构
    3. 全局变量
      1. fs_kobj /sys/fs
    4. 注册文件系统 register_filesystem()
  3. 模块(Module)
    1. insmod流程
      1. SYSCALL_DEFINE3(init_module,...) 实际系统调用sys_init_module()
    2. modprobe流程
      1. call_modprobe()
  4. 设备驱动对象 drivers\base
    1. 内部函数
      1. __class_register
      2. device_to_dev_kobj
      3. devices_init
    2. 全局变量
      1. dev_kobj /sys/dev
        1. sysfs_dev_block_kobj /sys/dev/block
        2. sysfs_dev_char_kobj /sys/dev/char
      2. hypervisor_kobj /sys/hypervisor/
      3. firmware_kobj /sys/firmware/
        1. dmi_kobj /sys/firmware/dmi
          1. dmi_kset /sys/firmware/dmi/entries
          2. edd_kset /sys/firmware/dmi/edd
        2. stable_kobj /sys/firmware/stable
      4. devices_kset /sys/devices
        1. system_kset /sys/devices/system
      5. bus_kset /sys/bus
      6. class_kset /sys/class
      7. pci_slots_kset CONFIG_PCI_MSI
      8. paths_kset
  5. 内核
    1. 全局变量
      1. kernel_kobj /sys/kernel/
      2. module_kset
      3. queues_kset
      4. pcrypt_kset
    2. 内核启动流程
      1. 用户模式Linux(UML) arch\um
        1. main()
          1. linux_main()
          2. start_uml()
          3. start_kernel_proc()
      2. 非虚拟化
        1. startup_32 arch\x86\kernel\head_32.S or arch\x86\boot\compressed\head_32.S
          1. ?
          2. decompress_kernel arch\x86\boot\compressed\mise.c
          3. i386_start_kernel() arch/x86/kernel/header32.c
          4. proc_root_init()
          5. proc_init_inodecache()
          6. register_filesystem()
          7. kern_mount_data()
          8. proc_mkdir()
          9. proc_net_init()
          10. 子主题 3
          11. do_basic_setup()
          12. do_initcalls()
          13. -------------------------------
          14. kobject_create_and_add() 创建"cgroup"内核对象
          15. register_filesystem() 注册"cgroup"文件系统
          16. proc_create() 在proc文件系统中创建“cgroups”目录
          17. -------------------------------
          18. cpuset_init() 通过"cgroups"文件系统设置cpumask
          19. printk() 第一个控制台输出,显示内核版本,GCC编译版本 1.控制台信号量 2.控制台驱动 3.缓冲区
          20. page_address_init()
          21. 子主题 4
          22. 概要
      3. 虚拟化方案
        1. 准虚拟化方案lguest x86linux
          1. lguest_entry
          2. lguest_init()
        2. 虚拟化方案xen
          1. startup_xen
          2. xen_start_kernel()
        3. 虚拟化方案kvm arch\ia64\kvm arch\powerpc\* arch\s390\* arch\tile\* arch\x86\*
          1. 模块初始化,module_init(svm_init/vmx_init)
          2. vmx_init() Intel vmx技术
          3. 初始化硬件
          4. kvm_init() 在debugfs文件系统中创建目录, kvm_debugfs_dir
          5. svm_init() AMD svm技术
          6. 初始化硬件
          7. ...
          8. 初始化硬件
    3. 调度器
      1. 系统调用 sys_fork
        1. do_fork()
          1. copy_process()
          2. copy_thread()
          3. 内核线程 PF_KTHREAD
          4. new_thread_handler()
          5. run_kernel_thread
          6. fork_handler()
          7. arch_switch_to()
          8. arch_switch_tls()
      2. ?
        1. fork_idle()
      3. ?
        1. schedule()
          1. __schedule()
          2. context_switch
          3. switch_to()
          4. __switch_to()
  6. 数据结构
    1. device
      1. device
      2. kobject
        1. kobject
      3. bus_type
        1. device
      4. device_driver
        1. bus_type
        2. module
          1. kobject
      5. class
        1. module
        2. kobject
    2. class
      1. module
      2. kobject
    3. bus_type
      1. device
    4. device_driver
      1. bus_type
      2. module
        1. kobject
    5. module
      1. kobject
    6. kobject 内核对象
      1. kobject
    7. kset 对象集合
      1. kobject
  7. 中断和异常
    1. 中断向量
      1. 0-31
      2. 32-47
      3. 128
    2. 中断控制器
    3. 同步中断
    4. 子主题 4
  8. 内核对象
    1. kboject
  9. 内存管理
    1. 全局变量
      1. mm_kobj /sys/kernel/mm/
      2. slab_kset /sys/kernel/slab
  10. 电源管理
    1. 全局变量
      1. power_kobj /sys/power/
  11. 配置脚本 scripts
    1. 内核配置工具 kconfig
      1. 生成各种界面内核配置工具 make xconfig make menuconfig:
      2. Kconfig语法
  12. 工具集 tools
    1. 系统性能调优工具 perf
    2. Valgrind
    3. OProfile
    4. SystemTap