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