加载论坛时出错,请强制刷新页面重试。

BOOTLOONGARCH.EFI启动报"cannot allocate memory"错误 [已解决]

ad_h

按照孙老师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看看内部到底发生了什么


杜比

clfs 5.0 以上版本,需要刷新版固件,相关主题可以在社区里查找


ad_h

杜比 好的谢谢,我查了一下,新固件是指这个吗:loongson/Firmware: Firmware Of LoongArch Machines (github.com)


杜比

ad_h 可以通过如下的主题,了解自己的主板,然后在loongson/Fireware里找是否有对应的固件。

https://bbs.loongarch.org/d/76-smbios/14

刷机推荐使用固件里面的shell,有个spi命令,具体用法可以看它的帮助

有了充足的准备再刷固件,毕竟刷机有风险,动手需谨慎


ad_h

杜比 多谢!我先消化您给的这些内容,网购的烧录器在路上,到了就试。
我昨天先用https://github.com/yangxiaojuan-loongson/qemu-binary这个环境验证了一下,制作出的CLFS的BOOTLOOGNARCH.EFI可以正常启动,并进入grub rescue


杜比

ad_h

之前有过关于BOOTLOOGNARCH.EFI的讨论,参见

https://bbs.loongarch.org/d/60-loongarch/17

在真机环境下,文件名后加64能正常引导,是验证的结果,供参考


ad_h

杜比 谢谢。改文件名方式已经试过不起作用,现在已经确认是使用旧世界固件的问题,刷成新固件就好了。


ad_h

A1201主板刷github上的pre-beta8固件可以正常进入到grub,不再出现之前提的问题,因此可以确认之前是用了旧固件引起的。

但目前在“Loading Linux Kernel”后出现“invalid arch-independent ELF magic”。可能gub和kernel用的不太合适,这个不属于这边帖子的范畴了,我自己再搞搞。

至少烧录流程和新固件都走通了,参考了不少各位大佬的帖子,对我这个新手来说收获还是不少的,感谢!


知识共享许可协议
本站文章除其作者特殊声明外,一律采用CC BY-NC-SA 4.0许可协议进行授权。
进行转载或二次创作时务必以相同协议进行共享,严禁用于商业用途