源码学习

linux 源码学习环境搭建过程

看了网上的教程,发现用 souce insight 这个软件可以快速跳转到对应的 文件,非常使用用来学习源码

  1. 安装 souce insight 4

虚拟机环境配置

  1. 配置ssh
  2. 挂载宿主机文件夹
  3. 利用 sshfs 搭建宿主机访问 虚拟机文件目录环境

sshfs-win下载地址

ssfhs可以通过ssh方式将远程的服务器上硬盘挂载到本地硬盘,也就是说只有你的虚拟机支持ssh链接,你就可以将虚拟机的硬盘挂载到本地,然后采用本地的方式来操作硬盘里的文件。

安装win-sshfs依赖Dokan,所以先安装Dokan再正常安装win-sshfs,其过程略过不表,但有点需注意,Dokan也许需要翻墙下载

参考教程

上文提到,sshfs-win依赖WinFSP,因此我们要首先安装WinFSP:https://github.com/billziss-gh/winfsp。

WinFSP安装结束后,我们再安装sshfs-win:https://github.com/billziss-gh/sshfs-win。

两者都安装完毕后,我们在Windows的文件资源管理器中点击『映射网络驱动器』:

参考教程2

1
\\sshfs.r\username@remote_ip!port\

使用 qmenu调试linux

参考视频

学习资料

linux源码版本 2.6

配合书籍:

视频教程

linux源码搭建调试 github地址

学习路线记录

  1. 汇编语言:
    1. assmbly 王爽
    2. x86 汇编语言-从实模式到保护模式
    3. orange 操作系统实现
    4. 操作系统真象还原
    5. 30天自己制作操作系统
  2. 内核驱动之类的编写
    1. linux设备驱动程序
    2. linux设备驱动开发详解: 基于linux 4.0内核
  3. 内核理论与机制
    1. linux内核设计与实现
  4. 深入理解内核理论和源码解析
    1. 深入理解linux虚拟内存管理
    2. 深入理解linux网络技术内幕
    3. 奔跑吧 linux内核: 基于linux。。。
    4. 深入理解linux内核
    5. 深入linux内核架构
  5. 操作系统理论
    1. 线代操作系统
    2. 操作系统设计与实现
    3. 操作系统概念,第七版,翻译版

动手

1
2
 git clone git@github.com:torvalds/linux.git
 # checkout 到你先要学习的分支,然后想办法编译

基于 qemu 调试内核

b站教程

知乎教程

linux kernel 下载页面

1
tar -zxvf 压缩文件名.tar.gz

腾讯云的博客

torvalds 大神的 github仓库

项目地址 : https://github.com/Vizdl/linux-lib

学习资料

内核源码讲解教程

调试 redis 源码

参考教程

docker 源码调试环境配置

参考这个教程 docker-ce moby 源码debug教程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
echo '{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Docker Daemon Debug",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/cmd/dockerd/",
        }
    ]
}' > ./.vscode/launch.json

上面的方法我试过,失败了,看到一个新的方法

参考博客

1
docker run --rm -i --privileged -e BUILDFLAGS -e KEEPBUNDLE -e DOCKER_BUILD_GOGC -e DOCKER_BUILD_PKGS -e DOCKER_CLIENTONLY -e DOCKER_DEBUG -e DOCKER_EXPERIMENTAL -e DOCKER_GITCOMMIT -e DOCKER_GRAPHDRIVER=devicemapper -e DOCKER_INCREMENTAL_BINARY -e DOCKER_REMAP_ROOT -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -v "$GOPATH/src/github.com/docker/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "dockercore/docker:latest" bash
1
docker run -i  --privileged -e BUILDFLAGS -e KEEPBUNDLE -e DOCKER_BUILD_GOGC -e DOCKER_BUILD_PKGS -e DOCKER_CLIENTONLY -e DOCKER_DEBUG -e DOCKER_EXPERIMENTAL -e DOCKER_GITCOMMIT -e DOCKER_GRAPHDRIVER=devicemapper -e DOCKER_INCREMENTAL_BINARY -e DOCKER_REMAP_ROOT -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -v "$GOPATH/src/github.com/docker/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "dockercore/docker:latest" bash

用 vscode atttach进入容器之后,运行这个命令

1
2
3
cd /go/src/github.com/docker/docker
DOCKER_GITCOMMIT=3385658 ./hack/make.sh binary
# 注意,要指定编译版本,不然会报错

在docker 内无法调试 go代码,只能把go重新装一遍了

1
2
apt-get install golang
# 要 230M

docker 容器无法联网: https://www.jianshu.com/p/205c6ece019b

https://jimmysong.io/docker-handbook/docs/docker_compile.html