摘要:
介绍: block layer在内核中起着承上(文件系统层)启下(设备驱动层)的作用,struct bio是block层的基本数据结构,可以理解成将bio输入block层,由block layer对其加工处理,然后再由block层输出给底层。与bio相关的代码涉及bio内存管理、提交、合并拆分、完成 阅读全文
摘要:
一、编译内核 内核源码:linux-5.10.3 root@linux:/home/gsf/linux-5.10.3# export ARCH="x86_64" root@linux:/home/gsf/linux-5.10.3# make x86_64_defconfig root@linux:/ 阅读全文
摘要:
rootfs是linux的根文件系统,就是我们看到的 /目录及其中一些重要的子目录,比如/etc ,/lib,/sbin等等,在linux中,一切都是文件,一切都是从/目录开始的,没有rootfs,linux就没法运行。 可以通过buildroot制作rootfs(比较方便,建议用这种方式),也可以 阅读全文
摘要:
ubuntu官网下载ubuntu-20.04.1-desktop-amd64.iso,系统安装完成后,更新Software Update,然后按下面步骤配置环境。 由于Ubuntu官网的iso会升级,建议从网盘下载本文用的版本(https://pan.baidu.com/s/1v0804hVqQNT 阅读全文
摘要:
背景 本文介绍一种抓取网络数据包的方法,基本思想是通过netfilter/iptables在TCP /IP网络层过滤出网络报文,然后将数据压缩、加密后,上传至云端服务器分析。 过滤出的数据为上行的原始的TCP报文,包括MAC首部、PPP首部(如果是PPPOE连接), IP首部、TCP首部以及部分或全 阅读全文
摘要:
一、引入trace point的背景 当需要获取内核的debug信息时,通常你会通过以下printk的方式打印信息: void trace_func() { …… printk输出信息 …… } 缺点: 内核中printk是统一控制的,各个模块的printk都会被打印,无法只打印需要关注的模块。如果 阅读全文
摘要:
问题: 1)加电后CPU从哪里执行代码? 2)boot loader如何加载到RAM? 3)内核镜像如何加载到RAM并运行的?注意分两次加载,需要解压。 4)protect mode何时开启?分页模式何时开启? 5)0号进程、1号进程何时创建的? 一、流程 CPU加电复位后处于real mode且C 阅读全文
摘要:
一、背景 1)通过命令ln a b创建硬链接b->a后(a是一个普通文件),stat a命令看到Links值是多少? gsf@ubuntu:~$ stat a File: 'a' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 阅读全文
摘要:
背景 本文描述内核找伙伴块的算法,根据给定order及page_idx(buddy块中第一个page的index),找到伙伴块的page_idx。如果需要查阅buddy的原理知识,请参考其他资料。 算法分析 内核找伙伴块的代码如下: mm/page_alloc.c /* * Locate the s 阅读全文
摘要:
前言 本文通过分析rename的代码,让读者对rename流程有清晰的认识。对于文中涉及的dentry、inode、ext3 disk layout、rcu锁、dcache等基础知识,请参考其他博文。 为避免用大篇篇幅介绍dentry lookup过程,我们假设路径名中各级分量的dentry存在dc 阅读全文