OSH-2022 / OSH-2022.github.io

USTC OSH 2022 course homepage
https://osh-2022.github.io
Apache License 2.0
5 stars 2 forks source link

平台兼容性报告 #1

Closed WCIofQMandRA closed 2 years ago

WCIofQMandRA commented 2 years ago

我在今天尝试编译 Raspberry Pi 的 Linux 内核时发现了无法完成完成实验一的平台,助教可以考虑将它添加到 不同平台兼容性 中。

平台:Ubuntu 20.04.3+NTFS3G 实验:实验一 出错现象:aarch64-linux-gnu-ld: 最后的链结失败: 设备上没有空间 原因分析:(暂不明确) 解决方案:一种可行的办法是把源代码放在ext4文件系统下,但这可以视为更换平台,所以暂时没有在原平台下的解决方案。

编译的内核的版本:1.20220118 (未裁剪) 触发错误的命令和终端输出:

$ KERNEL=kernel8 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j 6
  CALL    scripts/atomic/check-atomics.sh
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  AR      init/built-in.a
  LD      vmlinux.o
  MODPOST vmlinux.symvers
  MODINFO modules.builtin.modinfo
  GEN     modules.builtin
  LD      .tmp_vmlinux.kallsyms1
aarch64-linux-gnu-ld: 最后的链结失败: 设备上没有空间
make: *** [Makefile:1179:vmlinux] 错误 1

挂载选项:/sbin/mount.ntfs /dev/sda5 /media/zzc/DATA -o rw,nodev,permissions,users,exec,suid(这以为着完全与POSIX兼容,包括但不限于权限和文件名,比如,命令touch \\ && chmod 600 \\ && ls -l \\的输出是-rw------- 1 zzc zzc 0 2月 26 16:23 '\') 分区的剩余空间:58.1GiB

WuTianming commented 2 years ago

有点好奇你的分区是什么情况?根分区是什么文件系统?因为我好像看到 ld 是会使用 /tmp 来存储临时文件的,不知道会不会与此有关。

可否贴一下 df -h

myl7 commented 2 years ago

本轮实验不一定会继续进行 Raspberry Pi Linux kernel 的编译,不过我们确实会对相关情况进行注意的。

WCIofQMandRA commented 2 years ago

抱歉,没有及时跟进。

我昨日用当时遇到问题的设备编译了Linux 5.17.2,仍然有相同的问题。引起错误的命令是

ld -m elf_x86_64 -r -o vmlinux.o --whole-archive arch/x86/kernel/head_64.o arch/x86/kernel/head64.o arch/x86/kernel/ebda.o arch/x86/kernel/platform-quirks.o init/built-in.a usr/built-in.a arch/x86/built-in.a kernel/built-in.a certs/built-in.a mm/built-in.a fs/built-in.a ipc/built-in.a security/built-in.a crypto/built-in.a block/built-in.a lib/built-in.a arch/x86/lib/built-in.a lib/lib.a arch/x86/lib/lib.a drivers/built-in.a sound/built-in.a net/built-in.a virt/built-in.a arch/x86/pci/built-in.a arch/x86/power/built-in.a --no-whole-archive --start-group --end-group

进一步研究:把-o vmlinux.o改成-o ~/vmlinux.o-o /media/zzc/SOFTWARE/vmlinux.o-o /media/zzc/PHOTO/vmlinux.o都能正常链接。值得注意的是,后两个分区的文件系统也是NTFS,而且剩余空间更少。

部分分区信息:

$ df
文件系统           1K-块      已用     可用 已用% 挂载点
/dev/sda8      179555728  98706748 71685052   58% /
/dev/sda3      209698812 200231048  9467764   96% /media/zzc/PHOTO
/dev/sda5      209715196 159180932 50534264   76% /media/zzc/DATA
/dev/sda4      209715196 161974292 47740904   78% /media/zzc/SOFTWARE

$ df -i
文件系统         Inodes 已用(I)  可用(I) 已用(I)% 挂载点
/dev/sda8      11436032 1129212 10306820      10% /
/dev/sda3       9566068   60062  9506006       1% /media/zzc/PHOTO
/dev/sda5      50894712  242254 50652458       1% /media/zzc/DATA
/dev/sda4      49149928  306480 48843448       1% /media/zzc/SOFTWARE

注:

  1. sda8的文件系统是ext4,sda3、sda4和sda5的文件系统是NTFS。

  2. /tmp目录和/home目录都位于/dev/sda8

  3. vmlinux.o的大小是59278176字节,远小于四个列出的分区的剩余容量。

WuTianming commented 2 years ago

只有这个 ld 命令会触发 “空间不足” 信息吗?对 DATA 分区写入其他数据会不会造成这个错误呢?

我找到了一个页面,不知道有没有用。