1. linux学习的环境搭建

linux学习的环境搭建

今天心血来潮开始学习记录linux的过程。

  • 编辑工具:vscode编辑
  • 终端工具:mobaxterm
  • 运行工具:阿里云服务器
  • 学习记录:博客园(使用vscode插件,同步至博客园)

计划

先按照陈哥的视频进行学习,先做笔记。以下是陈哥的B站链接:
这里

争取向内核提交自己的patch。
然后学习riscv。


1. 内核代码下载和浏览

1.1 下载内核源码

下载内核源码使用国内的源,查看以下操作:

https://mirrors.tuna.tsinghua.edu.cn/help/linux.git/

1.2 配置内核浏览

使用vscode编辑,有两个插件用来跳转。不要同时存在。

1.2.1 gtags

使用vscode插件:
img
首先要安装
插件配置:
按下F1,输入:setting.json,选择远程的配置区。
img
然后在setting.json中添加以下配置:

    "gnuGlobal.globalExecutable": "/usr/bin/global",
    "gnuGlobal.gtagsExecutable": "/usr/bin/gtags",
    "gnuGlobal.encoding": "Big5",

PS:VS code 在配置成中文语言时,需要配置 "gnuGlobal.encoding": "Big5",不然会报错:Failed to get GNU Global version。
查看global版本,以确认是否安装成功,按下F1,输入global,选择 Show GNU Global Version,结果:
img
同样按下F1,输入global,选择 Global: Rebuild Gtags Database,编译global的索引,稍等片刻消息提示:
img
实际上就是在内核的目录下执行了以下命令:
生成跳转索引:

make gtags

参考:
https://blog.csdn.net/tanxjian/article/details/128841563
https://www.cnblogs.com/youchihwang/p/12651926.html
https://blog.csdn.net/qq_30317039/article/details/141642146

1.2.1 clangd

待补充
clangd 可以实现代码语义分析、代码补全、跳转等,能做到代码精准跳转、精准自动补全;其原理是通过读取工程编译自动生成的compile_commands.json 文件来索引其中包含的源文件和关联的头文件,因此能避免索引非编译的代码造成解析时语义混乱。compile_commands.json 文件是每个源文件的编译参数、路径等信息组成的一个json文件,clangd 通过这个文件可以准确定位源文件需要引用的头文件从而准确的找到各种宏定义、函数、变量声明的准确值。

参考:
https://blog.csdn.net/tanxjian/article/details/128885803

2. 编译内核:

# 编译前,先配置
make O=build defconfig
# X86_64是bzImage格式
make O=build bzImage -j4

报错:
img

把可信检查全部注释掉,编译之后,选Y,一路回车即可。
img
或者使用:

scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS

开始编译:
img

解决:
有点不一样
https://zhuanlan.zhihu.com/p/360061781

3. 制作文件系统

4. QEMU运行内核

用QEMU虚拟环境比较方便,不用更改运行环境的内核。

4.1 安装QEMU
# 安装 QEMU 和 KVM 加速
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
 
# 验证安装
qemu-system-x86_64 --version

参考:
https://blog.csdn.net/weixin_46281518/article/details/145797428

4.2 运行内核
sudo qemu-system-x86_64 \
-M ubuntu \
-cpu qemu64 \
-smp 8 \
-m 2048 \
-kernel /home/yangx/linux/linux/build/arch/x86/boot/bzImage \
-virtfs local,id=kmod_dev,path=/home/yangx/,readonly,mount_tag=9p,security_model=none \
-vga none \
-nographic \
-append "nokaslr console=ttyS0 root=/dev/vda rw kmemleak=on" \
-device virtio-scsi-pci \
-drive file=/home/yangx/linux/filesystem/debian/debian.qcow2,if=none,format=qcow2,cache=writeback,file.locking=off,id=root \
-device virtio-blk,drive=root,id=d_root \
-net tap

退出
ctrl + a 放开后,再按下x
⚠ 这里字母是小写!(不要按着大写键

5. 配置debug

posted @ 2025-08-21 16:07  潇汀  阅读(13)  评论(0)    收藏  举报