核心层:
kernel,
IPC
MM
FS
NET
架构层:
arch
include,通用头文件
驱动与工具:
drivers,char、block、usb、i2c
uart
辅助
Documentation
lib
samples
init
scripts
定位内核入口
init/main.c/start_kernel()
chip_init
mm_init
sched_init
先查阅Documentation/目录
virtio_console.c random.c
目的是熟悉内核接口
如何阅读驱动代码:
复杂子系统subsys_
内核通用入口
所有通过module_init宏声明的模块初始化函数,最终都会在do_initcalls()函数中被统一调用执行。
设备Device,描述硬件资源信息,包括基地址与中断号、时钟频率配置、DMA通道分配;
驱动Driver,实现外设的具体业务功能,包括SD卡数据读写、网卡数据包收发、声卡音频录放;
总线Bus,作为设备与驱动的沟通桥梁,包括负责完成两者的匹配、建立关联关系、管理设备枚举;
聚焦probe函数,实现外设初始化、寄存器配置、具体硬件功能。
聚焦具体功能点:插入检测、复位机制、种类检测、电压验证、CID获取、数据传输。
SD、MMC、eMMC
页表是内核维护的一个映射表,页表被放在MMU中,地址转换是硬件执行的。以页为单位。
所有进程的内核空间均映射到同一物理内存区域,确保内核态切换时的数据一致性与高效访问。
用户空间的五大内存段
文件映射段,包含动态链接库
用户态内存分配,使用brk或mmap,大于128KB的内存
回收页缓存(Page Cache),优先回收最近最少使用的文件缓存页面。
换出内存
杀死进程(OOM killer),
RES(Resident Memory)
ps aux --sort=-%mem
pmap -x[pid]
/proc/

1648

被折叠的 条评论
为什么被折叠?



