os lab0
os lab0
记录一些lab中需要掌握的东西
1.有关makefile和make
makefile文件是一个自动化构建和管理项目的脚本,相当于将一系列的编程语言项目编译成了可以让make命令使用的内容;之后,当你运行make命令时,其就会自动执行makefile文件中的指令和规则。
4.1 交叉编译工具链
这里面所谓的“套件”指的是一组相关的开发工具、软件和库,可以提供一个完整的功能集合;整个交叉工具编译链 的作用是使用 目标套件下的编译器 将源代码编译为 对应系统 下的 目标架构语法下的可执行文件。
执行以下任务时,对应的命令如下(我的文件名为helloworld.c):
- 生成对应的RISC-V汇编代码:
riscv64-linux-gnu-gcc -S helloworld.c -o helloworld.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
4.2 编译本地架构内核
需要掌握的内容: (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) 内核映像是指,如果内核是电脑各个部分的”主控“的话,那么内核映像就是记录这一系列信息的“图纸”。在启动的过程中,会被加载和运行。
4.3 交叉编译 RISC-V 架构内核
交叉编译不是让同一个内核映像在不同架构上运行,而是在一种架构上编译生成能在另一种架构上运行的内核映像。如下所示: 这个部分的核心命令在文档中如下所示:
因此,最终执行的命令应该为
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)就是按照那个格式来就可以了