This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/TMDXEVM8148:无法从 ramfs 安装 syslink

Guru**** 2964790 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/676339/linux-tmdxevm8148-cannot-install-syslink-from-a-ramfs

器件型号:TMDXEVM8148

工具/软件:Linux

我有一个8148 EVM 配置为在启用了 syslink 的情况下引导 Linux。  我可以从 NFS 引导并运行 syslink Helloworld 示例、但当我创建 ramfs 时、会出现错误 syslink:重定位超出范围。  

相关系统没有足够的闪存来加载文件系统。  此外,加载内核映像的方法不适合使 initrd 文件系统与内核分开加载。

是否有方法让 syslink.ko 驻留在 ramfs 中?

在做一些研究时、我发现在从 ramfs 中运行.ko 模块时出现问题。  以下链接详细说明了原因。

groups.google.com/.../

当您添加另一个模块时、模块会被放置在 PAGE_OFFSET 下面的16M2B 中
~16MiB initramfs 在它们和内核符号之间、您会超过
分支指令的偏移范围。

可以通过将 initramfs 放在的末尾来解决这个问题
内核映像、而不是初始化的其余部分
数据。  虽然您也应该这样做、但下面的内容应该起作用
可能需要注意对齐、并在释放此段时释放此段
初始化数据的其余部分将被释放。

diff --git a/arch/arm/kernel/vmlinux.lds.s b/arch/arm/kernel/vmlinux.lds.s
索引 b16c079..05ad361 100644
-- a/arch/arm/kernel/vmlinux.lds.S
++ b/arch/arm/kernel/vmlinux.lds.S
@@-46、7 + 46、6 @@截面
                 init_calls
                 CON_INITCALL
                 SECURITY_INITCALL
-                init_RAM_FS

 #ifndef CONFIG_XIP_kernel
                 _init_begin =_stext;
@@-170、6 +169、11 @@段

                 _edata =.;
         }
+
+.initramfs        :{
+                init_RAM_FS
+        }
+
         _edata_loc =_data_loc + SIZEOF (.data);

 #ifdef CONFIG_have TCM

我应用了此修补程序、并且能够安装 syslink.ko (modprobe syslink)。  

正在加载 modprobe syslink
SysLink 版本:2.20.02.20
SysLink 模块创建日期:2018年2月26日时间:16:07:22

load-HD-firmware 脚本等待 syslinkipc_ProcMgr 和 syslinkipc_ClientNotifyMgr 响应。  他们从不做。  因此、即使加载了 syslink.ko、也看不到通知。  

希望这个问题已经得到解决。  我做了一些搜索、找不到任何东西。

Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用 ramfs 的.ko 模块创建的临时文件似乎不会更新/dev/。 从 NFS 引导中复制了/dev/dev 的内容、将其放入 ramfs 中、并成功运行了 syslink 应用程序。 作为 ramfs 专家、我无法判断应该加载什么、不应该加载什么以及需要将哪些内容硬复制到 ramfs 中。 认为可以合理地预计这些文件将以与使用 ramfs 作为 NFS 相同的方式创建。 有人可以验证吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Steven、

    请参阅以下有关 ramfs 信息的指针:

    processors.wiki.ti.com/.../Initrd
    processors.wiki.ti.com/.../Creating_a_RAMDISK
    processors.wiki.ti.com/.../Modifying_contents_of_a_RAMDISK

    processors.wiki.ti.com/.../TI81XX_PSP_UBOOT_User_Guide

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    感谢您提供有关创建 RAMDISK 的文档。 我在创建系统中使用的 ramfs 时使用了这些文档。 在我需要加载 syslink.ko 之前、我的 ramfs 可以正常工作。 当我执行 modprobe syslink 时、应该在/dev/dev 中创建一些文件。 当从 ramfs 运行时、不会创建这些文件。 对此问题的一些研究指出、ramfs 只能用$root 上下文编写。 我正在内核上下文中执行 modprobe。 内核是否具有写入 ramfs 的正确权限?

    Stee
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Stee、

    内核在 ARM 监控器/特权模式下运行、因此应该能够写入 ramfs。

    此致、
    帕维尔