代码版本:linux-4.9.327
(最老的一个 long term 版)
多年来第一次鼓起勇气开 linux 源码
感觉也没有那么吓人(?)
不得不感慨 open source 以及 free software 真的是好文明

想想应该早点来看的

linux kernel 绝对是软件工程上的高质量代码典范
有效注释和函数命名让代码可读性极高
开源社区的巅峰
比某些屎山代码高到不知道哪里去了

代码结构

linux 
    block : 块设备
        blk-mq : 多队列
    drivers : 一坨驱动?
        android / gpu / fpga ... etc ...
    include : 常用头文件
        linux
            list.h 
            types.h
            blkdev.h : request_queue
    lib : 常用功能函数 ?
        sbitmap.c : fast and scalable bitmaps

比较奇怪的是linux中文件和目录的命名,分隔符用 -_ 的都有,不知道这两个方法之间有没有什么区别,个人来讲 c 写多了会更习惯下划线。查了一下两种在 linux 里面都是可接受的

defs

硬件中断处理优先级最高,因为如果不立即处理,则会引入高延迟降低用户体验,或者硬件 buffer 填满导致数据丢失

EXPORT_SYMBOL_GPL : GPL 协议的外部模块可以使用的函数
irq : interrupt request from device 
BUG_ON(cond) : cond 为真时触发 bug

系统相关

wait_event(wq, condition) : 当前进程 sleep 直到 condition 为 true
percpu_ref : 引用计数,通常引用计数使用 atomic_t,在多次使用的情况下 percpu_ref 提高扩展性

数据结构

list

struct list_head {
    struct list_head *next, *prev;
};

tricks

continer_of

def in tools/virtio/linux/kernel.h

#define container_of(ptr, type, member) ({            \
    const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
    (type *)( (char *)__mptr - offsetof(type,member) );})

指针 ptr 指向一个 type 类型结构体中 member 参数,返回该结构体的指针

计时相关

kernel 版本 3.10
计时函数 ktime_get 定义在 include/linux/hrtimer.h 中,实现在 kernel/time/timekeeping.c
在内核模块中 #include<linux/***.h> 对应 include/linux 下的头文件

标签: linux

添加新评论