本文编写一个简单的 Linux 内核模块,然后在 QEMU 中使用 insmod 加载模块, lsmod 查看模块信息, rmmod 卸载模块来进行测试工作。
实验环境在前文Linux Kernel 从编译到运行 和 为 Linux Kernel 添加系统调用 中已经准备好了,这里不再赘述。
编译模块的工作流程如下:
-
环境准备
-
编写模块代码
-
编写 Makefile
-
编译模块
-
加载、卸载测试
本文编写一个简单的 Linux 内核模块,然后在 QEMU 中使用 insmod 加载模块, lsmod 查看模块信息, rmmod 卸载模块来进行测试工作。
实验环境在前文Linux Kernel 从编译到运行 和 为 Linux Kernel 添加系统调用 中已经准备好了,这里不再赘述。
编译模块的工作流程如下:
环境准备
编写模块代码
编写 Makefile
编译模块
加载、卸载测试
系统调用是用户空间和内核空间之间的接口,是用户程序与操作系统之间的桥梁。
Linux 内核提供了一系列的系统调用,用户程序可以通过这些系统调用来请求内核执行某些操作。
比如,open 系统调用用于打开一个文件,read 系统调用用于读取文件内容,write 系统调用用于写入文件内容等。
本文将介绍如何为 Linux Kernel 添加一个新的系统调用。
本文记录如何在 Ubuntu 24.04 系统上编译和运行 Linux kernel.
主机配置如下:
./+o+- wgxls@server
yyyyy- -yyyyyy+ OS: Ubuntu 24.04 noble
://+//////-yyyyyyo Kernel: x86_64 Linux 6.8.0-49-generic
.++ .:/++++++/-.+sss/` Uptime: 22h 2m
.:++o: /++++++++/:--:/- Packages: 1924
o:+o+:++.`..```.-/oo+++++/ Shell: bash
.:+o:+o/. `+sssoo+/ Resolution: 2560x1440
.++/+:+oo+o:` /sssooo. DE: GNOME 46.0.1
/+++//+:`oo+o /::--:. WM: Mutter
\+/+o+++`o++o ++////. WM Theme: Adwaita
.++.o+++oo+:` /dddhhh. GTK Theme: Yaru-purple-dark [GTK2/3]
.+.o+oo:. `oddhhhh+ Icon Theme: Yaru-purple
\+.++o+o``-````.:ohdhhhhh+ Font: Ubuntu Sans 11
`:o+++ `ohhhhhhhhyo++os: Disk: 701G / 2.3T (31%)
.o:`.syhhhhhhh/.oo++o` CPU: AMD Ryzen 7 4800U with Radeon Graphics @ 16x 1.8GHz
/osyyyyyyo++ooo+++/ GPU: AMD/ATI Renoir [Radeon RX Vega 6 (Ryzen 4000/5000 Mobile Series)]
````` +oo+++o\: RAM: 10147MiB / 15489MiB
`oo++. hexo-img-onerror 是一个为 Hexo 网站添加备用图片源的插件。
故名思义,它的实现原理是为每一个 img 标签添加一个 onerror 事件,当图片加载失败时,会自动替换为备用图片。
如图所示:

Scheduler 翻译成中文叫做调度器。
调度器这个词对于学计算机的同学来说应该并不陌生,因为在大学操作系统的课堂上我们学过很多关于进程调度的知识。
等等。
在这篇文章中,我们将会讨论高通 WLAN Host Driver 中调度器的实现。
为什么先学习调度器呢?
因为调度器是 WLAN Host Driver 中相对简单的部分,仅有 4 个源代码文件,而且调度器是 WLAN Host Driver 的核心部分,是各个模块之间沟通的桥梁。
源代码我转存到了我的 GitHub 仓库中,今天要看的部分在这里:
也可以使用我的 opengrok 服务器来查看源代码,如果它还在线的话。
https://opengrok.dijk.eu.org/xref/wlan-driver/qca-wifi-host-cmn/scheduler/
issue 的标题是你要执行的 docker pull 命令, 内容不需要写。
几分钟后,在这个 issue 下会收到一个包含下载链接的评论。

点击这个链接即可下载镜像到本地。
执行 docker load < xxx.tar.gz 即可加载镜像。
前段时间被封了一个圣何塞的甲骨文云账号,上面我开了一个 4C 24G 的 ARM 实例,跑了很多东西,几乎所有以 dijk.eu.org 结尾的域名都在上面跑着。
当然,就包括博客的图片服务器。
这下好了,博客的图片全都挂了。
然后我把博客的图片服务器指定成了家里的服务器。优点是国内访问的速度快,缺点是家里的服务器不稳定。
所以,一个自然的需求就是监控家里的服务器,看看它是否在线。
但是,如果监控服务器的服务器本身都不够稳定,那监控就失去意义了。(没错,我说的就是白嫖的服务器。)
又免费,又相对稳定的服务,我熟悉的就只有 GitHub Actions 了。
效果图