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插件:

首先要安装
插件配置:
按下F1,输入:setting.json,选择远程的配置区。

然后在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,结果:

同样按下F1,输入global,选择 Global: Rebuild Gtags Database,编译global的索引,稍等片刻消息提示:

实际上就是在内核的目录下执行了以下命令:
生成跳转索引:
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
报错:

把可信检查全部注释掉,编译之后,选Y,一路回车即可。

或者使用:
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
开始编译:

解决:
有点不一样
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
本文来自博客园,作者:潇汀,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/18897557,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号