您现在的位置是:首页 >技术交流 >linux-0.11 研究网站首页技术交流

linux-0.11 研究

Li-Yongjun 2023-06-14 12:00:03
简介linux-0.11 研究

前言

多阅读优秀代码,才能提高快速、深刻理解代码的能力。linux 内核源码无疑是最好的选择,不过当前 linux 内核版本为 6.3,代码量是相当庞大了,别说看完整个代码了,就算是看完一个子系统,都是不太现实的。因此,我的打算是看老版本的内核代码,再加上有《Linux0.11 内核完全注释3.0》这本书,所以,就开始看 linux-0.11 吧。

源码下载

http://www.oldlinux.org/Linux.old/Linux-0.11/sources/system/linux-0.11.tar.Z
这份源码,配合赵炯老师的内核完全注释正好。

编译

在看源码的同时,如何能够编译、运行,就再好不过了,如果还能调试,那就锦上添花了。
所以我们先尝试编译,在
ubuntu编译linux0.11
编译linux-0.11的第二种方法
两份武功秘籍的加持下,最终磕磕绊绊,我终于还是没编过。。。😂
那就转变思路,找一份能编过的,最终找到了
https://github.com/yuan-xy/Linux-0.11
编译方法参考下面这篇博客
Linux 0.11-调试 Linux 最早期的代码-36

运行

编译好后,可以使用 qemu 运行,

$ make start

在这里插入图片描述

调试

在这里插入图片描述
代码不理解的地方,可以使用 gdb 调试,比单纯看书有意思多了。

进阶

经常调试,每次手敲 gdb、打断点、看变量,还是有些呆板和琐碎的,所以我们继续借助工具,vscode 登场,
.vscode 目录下添加文件 launch.json,内容如下

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "qemu-kernel-gdb",
            "type": "cppdbg",
            "request": "launch",
            "miDebuggerServerAddress": "127.0.0.1:1234",
            "program": "/home/liyongjun/project/c/linux-0.11-source/tools/system",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": false,
            "logging": {
                "engineLogging": false
            },
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                },
                {
                    "description": "设置体系结构",
                    "text": "-gdb-set arch i386:x86-64",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

执行完 make debug 后,在 vscode 上点击调试按钮,打断点,运行,单步。
可以实时显示:寄存器数据、监视变量、调用堆栈、当前执行的代码等,非常方便。
在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。