大家好,本帖用于记录来自社区各个用户自行适配 Linux Lab 的实验案例情况。
欢迎图书作者、课程作者、社区用户根据需求自行适配并提交,需要贴上适配后的测试记录、使用步骤等。
TODO:
关键字。泰晓学院发布的课程一般都会提供完善的配套实验案例与实验开展过程介绍,请参考课程本身的相关章节。
$ cd src/examples/
$ ls
assembly c makefile README.md shell
// 所有主流处理器的 hello-world 汇编
$ cd assembly
$ ls | xargs -i make -C {}
// C 语言案例
$ cd c
$ make -C hello
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
Books | Versions | Authors |
---|---|---|
LDD3 | v2.6.10 | Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman |
LKD3 | v2.6.34.9 | Robert Love |
ULK3 | v2.6.11.12 | Marco Cesati, Daniel P. Bovet |
PLKA | v2.6.24.7 | Wolfgang Mauerer |
Books' fullname and their resources:
以 v2.6.24.7 为例:
$ make BOARD=i386/pc
$ make config LINUX=v2.6.24.7
$ make kernel
$ make boot
为降低维护开销,该部分不再开放,后续仅集成到 Linux Lab Disk,可以到某宝检索 “Linux Lab 真盘” 选购。
Linux Lab真盘中已集成,其他用户请自行 clone。
$ cd /labs/linux-0.11-lab
$ make help
为降低维护开销,该部分不再开放,后续仅集成到 Linux Lab Disk,可以到某宝检索 “Linux Lab 真盘” 选购。
Linux Lab真盘已集成,其他用户请自行 clone。
$ cd /labs/cs630-qemu-lab
$ make help
$ cd src/examples/
$ git clone https://gitee.com/wuzhangjin/riscv-operating-system-mooc rvos-lab
$ cd rvos-lab/code/os
$ make run
以下内容还未适配,为用户推荐,特此收集,大家可以参与适配,适配完以后更新在后面即可
https://github.com/VincentWei/best-practices-of-c
UEFI架构目前适配了多种CPU架构,包括X86、ARM、RISC-V,国产的龙芯、飞腾等。不同的CPU,有自己的汇编语言。这么多的架构,从现实的角度来看,是无法将所有硬件平台购置齐全进行学习的。在编写《UEFI编程实践》的过程中,对于此问题我甚是苦恼。
直到遇到吴老师的LinuxLab,非常完美地解决了这个问题。
具体来说,X86的开发和实验环境随处可得。而国产的龙芯和飞腾,对于普通开发者而言,不大容易获得。Linux Lab集成了Linux内核开发所需的编辑器、调试器、模拟器等,当然也包括我急需的汇编语言编译和运行环境,可以支持多种处理器架构。而其中,就包含了我迫切需要的飞腾(ARM)和龙芯架构。
在《UEFI编程实践》中,主要使用Linux Lab进行龙芯和飞腾的实验。以下内容节选自第11章。
Linux Lab是一个开源项目,它是一个使用Docker和Qmeu搭建的即时开发环境。在其内部,集成了Linux内核开发所需的编辑器、调试器、模拟器、根文件系统等。可以用来学习处理器架构、Linux内核、汇编语言等。当前版本中,已经支持了7大处理器架构,包括X86、ARM、PPC、RISC-V、Loongson和CSKY。
本节将介绍如何安装Linux Lab。Linux Lab主要是用来学习龙芯的汇编语言,以及下一章飞腾的汇编语言(也即ARMv8指令集)。我们学习龙芯和飞腾的汇编语言,需要的是对应平台的编译器,以及能运行程序的实验环境。这些组件,在Linux Lab中都已经预置安装了。
安装Linux Labb需要预留足够的硬盘空间,建议预留50GB至100GB的空间,内存则建议在4GB以上。笔者是在Ubuntu 18.04上搭建Linux Lab的,操作步骤如下。 (下略)
如果只是学习龙芯汇编语言,实际上有不少模拟器可以使用,比如Qtspim、MIPS等。笔者最初也是用这些模拟器学习龙芯的汇编语言的,然后自己搭建跨平台编译环境,再使用Qemu模拟MIPS64的CPU并启动操作系统。
这样一整套环境搭建下来,非常复杂而且费时。考虑到在学习UEFI编程的过程中,需要不断在ARM、MIPS和X86之间切换,笔者建议所有与汇编学习相关的环境搭建都转到Linux Lab下了,它刚好能满足对多平台汇编学习的需要。
本节分为两部分内容:一是关于龙芯汇编指令的基本用法,二是如何在Linux Lab下编译龙芯汇编程序,并在Qemu模拟的龙芯系统上进行测试。
(中间内容略...)
当然,也可以在实际的开发板上进行测试。另开一个终端,登录Linux Lab,并在启动开发板的时候,通过NFS启动根文件系统。命令如下:
ubuntu@Linux-lab:/labs/Linux-lab$ make boot ROOTDEV=nfs
在编译汇编程序的终端上,将执行文件拷贝到开发板的操作系统中,这实际上是在主机和Qemu系统之间传输文件。复制文件的命令如下:
ubuntu@Linux-lab:/labs/Linux-lab/src/examples/assembly/MIPS64el$ cp MIPS64el-hello
/labs/Linux-lab/boards/MIPS64el/ls3a7a/bsp/root/2020.08/rootfs/root/
进入开发板上的操作系统(使用用户名root即可登录),可以发现执行文件已经复制到了根目录下了,直接进行测试:
# ./MIPS64el-hello
Hello, UEFI world!
至此,我们完成了Linux Lab上的龙芯汇编语言的实验。 (后略)
虽然现在的UEFI BIOS开发,基本都转向了C语言。但针对平台的一些特定应用时,仍旧会用到平台相关的汇编语言。对于使用UEFI进行开发的第三方厂商,比如显卡、网卡、隔离卡厂商等,在进行Option ROM开发中,仍有机会使用汇编语言进行特别应用的开发。
如前所述,和C语言编写的UEFI程序不同,汇编语言是无法在非目标CPU架构上运行的。因此,拥有一个可以随时进行测试的、可支持各种CPU架构的实验环境,是非常方便的。
从Linux Lab中,我学到了不少有趣的知识,希望你也能乐在其中。
登录 后才可以发表评论