os lab0

os lab0

记录一些lab中需要掌握的东西

1.有关makefile和make

alt text makefile文件是一个自动化构建和管理项目的脚本,相当于将一系列的编程语言项目编译成了可以让make命令使用的内容;之后,当你运行make命令时,其就会自动执行makefile文件中的指令和规则。

4.1 交叉编译工具链

alt text 这里面所谓的“套件”指的是一组相关的开发工具、软件和库,可以提供一个完整的功能集合;整个交叉工具编译链 的作用是使用 目标套件下的编译器 将源代码编译为 对应系统 下的 目标架构语法下的可执行文件。

执行以下任务时,对应的命令如下(我的文件名为helloworld.c):

  1. 生成对应的RISC-V汇编代码:

    riscv64-linux-gnu-gcc -S helloworld.c -o helloworld.s

    解释一下:-S告诉编译器停止在汇编阶段即可;而后面的.s文件就是生成的对应的汇编文件。

(2)将其编译为 RISC-V 可执行程序:

riscv64-linux-gnu-gcc -c helloworld.c -o helloworld.o riscv64-linux-gnu-gcc helloworld.o -o helloworld

这两个代码的意思是,首先转化为编译后的目标文件(.o文件),-o的意思是指定生成文件的名字(仅此而已);之后通过这个.o文件和可能依赖的库文件等等链接起来解释,就生成了可执行文件

(3)将 RISC-V 可执行程序反汇编

riscv64-linux-gnu-objdump -d helloworld > helloworld.txt

三个步骤中,前两个使用了riscv64-linux-gnu下的gcc编译器,最后一个使用了objdump进行反汇编

4.2 编译本地架构内核

需要掌握的内容: alt text (1)执行完make help之后,会对这些命令有简单的解释。其中,对于上述运行的命令解释如下: defconfig - New config with default from ARCH supplied defconfig(也就是说,根据现有的文件生成一个默认的配置文件)

distclean - mrproper + remove editor backup and patch files(清除所有与配置相关的文件)

另外,make -j$(nproc) 将 -j 和 $(nproc) 结合起来,意思是 使用系统中所有可用的 CPU 核心数来并行编译。nproc会返回系统可用的 CPU 核心数。

(2)命令 make V=1 可以让编译的过程中显示出来详细的内容;make -d 可以诊断makefile等详细问题

(3)alt text 内核映像是指,如果内核是电脑各个部分的”主控“的话,那么内核映像就是记录这一系列信息的“图纸”。在启动的过程中,会被加载和运行。

4.3 交叉编译 RISC-V 架构内核

交叉编译不是让同一个内核映像在不同架构上运行,而是在一种架构上编译生成能在另一种架构上运行的内核映像。如下所示:alt text 这个部分的核心命令在文档中如下所示: alt text 因此,最终执行的命令应该为

make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig

make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j$(nproc)

也就是说,这和编译本地内核的情况很像,只不过是说由于要让其在不同架构上运行,因此使用了交叉编译工具。

回答问题:

(1)两个关键变量为ARCH与CROSS_COMPILE,其中第一个在arch目录下都是有效的架构名称,而第二个就是之前的交叉编译工具了

(2)就是按照那个格式来就可以了


os lab0
http://example.com/2025/09/22/os-lab0/
作者
zrw
发布于
2025年9月22日
许可协议