按照孙老师github上的CLFS教程交叉编译并制作出liveusb,在3A5000机器时引导时报“cannot allocate memory”,进入UEFI Shell手动运行"BOOTLOONGARCH.EFI"也报同样错误,无法进一步启动grub(附件“cannot*allocate*memory.jpg”)。
辅助信息:
======
1. BOOTLOONGARCH.EFI改为BOOTLOONGARCH64.EFI的方法已经试过了,问题依旧;
2. 安装Loongnix 2.1可以正常引导,看了下它的EFI文件名也是BOOTLOONGARCH.EFI;
3.使用loongarch64/gnu-efi (github.com)编出示例程序AllocatePages.c(在3A5000的Loongnix 2.1环境中编译),在UEFI Shell中运行AllocatePage.efi示例也报错(按源码中的示例执行:“AllocatgePage.efi 2 3 5 200000”,返回的错误code是14),运行memmap,给出的内存地址都是“90000000*****”的地址,具体请看附件“memmap.jpg”;
4. 今天看到论坛中新世界/旧世界的内容,我想是否我板子的固件是旧世界的,而做出的CLFS是属于新世界的?我把固件(包括板子信息)和UEFI Shell版本信息都提供出来,具体请看附件"固件和主板信息.jpg"和"UEFI*Shell*版本.png"(机器是自己从淘宝买的3A5000整机)
5.grub2编译时与教程中的步骤有出入,不确定是否有关系。按教程步骤需要打两个补丁“grub-2.06-loongarch-li_to_liw.patch”、“grub-2.06-fix-initrd.patch”,但似乎它们都不适于与目前github中clone出的代码了:
5.1. 其中“grub-2.06-loongarch-li_to_liw.patch”找不到“grub-core/lib/loongarch64/efi/loongarch64_asm.S,” 而"grub-core/lib/loongarch64/relocator.c"中已经有了"li.w"的内容,不需要再打patch;
5.2. “grub-2.06-fix-initrd.patch”中涉及的“grub-2.06.orig/grub-core/loader/loongarch64/linux.c”的相关内容已经没有了,patch打不上去。github上查看该文件的history,发现patch要修改的内容在2021/12/29最后一次commit中(sha:198e55e)已经删除;
c. 因此判断这两个补丁可能已不适用目前代码,所以跳过这两步继续执行后续操作,直到制作出BOOTLOONGARCH.EFI都没有再出现错误
6. 如果需要其它信息请告知
其它:
===
目前对UFEI调试不熟,手头也没有串口线、也还没能调试环境来查看EFI程序运行过程中更详细的信息,下一步准备学习这些内容来debug看看内部到底发生了什么