器件型号:TMDXEVM8148
工具/软件:Linux
我有一个8148 EVM 配置为在启用了 syslink 的情况下引导 Linux。 我可以从 NFS 引导并运行 syslink Helloworld 示例、但当我创建 ramfs 时、会出现错误 syslink:重定位超出范围。
相关系统没有足够的闪存来加载文件系统。 此外,加载内核映像的方法不适合使 initrd 文件系统与内核分开加载。
是否有方法让 syslink.ko 驻留在 ramfs 中?
在做一些研究时、我发现在从 ramfs 中运行.ko 模块时出现问题。 以下链接详细说明了原因。
当您添加另一个模块时、模块会被放置在 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