WZH
发表于 2022-2-23 15:06:55
xad74 发表于 2022-2-22 08:03
好东西,这样是不是就意为着当程序出现问题时不用整体更新了,只需更新问题程序就行
对
morning_enr6U
发表于 2022-4-9 18:45:21
楼主还在更新吗? 谢谢!{:3:}
WZH
发表于 2022-4-9 21:10:59
morning_enr6U 发表于 2022-4-9 18:45
楼主还在更新吗? 谢谢!
兄弟还惦记呢,明天我试着在更新下{:8:}
jasondong388
发表于 2022-4-10 10:58:31
WZH 发表于 2022-4-9 21:10
兄弟还惦记呢,明天我试着在更新下
:victory::hug:
morning_enr6U
发表于 2022-4-10 19:31:36
期待更新,好东西自然有粉丝{:34:}
WZH
发表于 2022-4-15 20:17:22
morning_enr6U 发表于 2022-4-10 19:31
期待更新,好东西自然有粉丝
已经更新啦{:34:}
morning_enr6U
发表于 2022-4-15 22:27:10
已经找到你开的新帖了, 写得非常好,学习中!!!{:8:}{:8:}{:8:}
WZH
发表于 2022-4-16 00:32:29
morning_enr6U 发表于 2022-4-15 22:27
已经找到你开的新帖了, 写得非常好,学习中!!!
加油!欢迎交流
wander
发表于 2022-4-19 08:59:15
看了这个帖子,我对跳转与动态加载的区别有了更深刻的理解,学无止境
jiaoxiake
发表于 2022-4-19 12:27:43
楼主大牛啊!
jiaoxiake
发表于 2022-4-19 12:28:44
学习了!!!:)
renzhen
发表于 2022-4-20 15:58:27
楼主你应该有发现用你这种方法(按你的工程进行编译)是有bug的.比如重定位时多个字符串的地址是同一个地址
renzhen
发表于 2022-4-20 16:01:24
楼主你应该有发现用你这种方法(按你的工程进行编译)是有bug的.比如重定位时多个字符串的地址是同一个地址
WZH
发表于 2022-4-20 17:33:05
renzhen 发表于 2022-4-20 15:58
楼主你应该有发现用你这种方法(按你的工程进行编译)是有bug的.比如重定位时多个字符串的地址是同一个地址
可以详细说说嘛,最好有图片
renzhen
发表于 2022-4-20 18:30:32
源码和反汇编以及readelf
WZH
发表于 2022-4-20 19:19:00
renzhen 发表于 2022-4-20 18:30
源码和反汇编以及readelf
这没问题,第一个Relocation为代码中引用全局变量的地址,这个肯定是不同的。
第二个是符号值,这个符号值其实是代表的这个全局变量在整个elf文件中的偏移地址,代码中多次引用同一个全局变量就会出现这种情况。
renzhen
发表于 2022-4-20 20:33:43
WZH 发表于 2022-4-20 19:19
这没问题,第一个Relocation为代码中引用全局变量的地址,这个肯定是不同的。
第二个是符号值,这个符号 ...
str = "test string\r\n"; 这句代码通过重定位后,str获取的地址是"hello world\r\n"的地址, 你认真看下,里面有三对movw movt需要重定位, offset 0006 000e 这一对是获取str的地址,其他两对是本来分别是要获取"hello world\r\n" 和 "test string\r\n" 的地址, 但是后面两对都是获取"hello world\r\n"字符串的地址.
WZH
发表于 2022-4-21 09:37:11
renzhen 发表于 2022-4-20 20:33
str = "test string\r\n"; 这句代码通过重定位后,str获取的地址是"hello world\r\n"的地址, 你认真看下, ...
这汇编确实有点问题,你用的编译器版本是什么呀,我一样的代码,和你的反汇编完全不一样。
file:///C:/Users/wzh/Desktop/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-04-21%20093251.png
file:///C:/Users/wzh/Desktop/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-04-21%20093439.png
file:///C:/Users/wzh/Desktop/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-04-21%20093453.png
WZH
发表于 2022-4-21 09:39:05
renzhen 发表于 2022-4-20 20:33
str = "test string\r\n"; 这句代码通过重定位后,str获取的地址是"hello world\r\n"的地址, 你认真看下, ...
建议检查一下,重新编译生成一下试试
WZH
发表于 2022-4-21 09:40:57
renzhen
发表于 2022-4-21 13:17:12
这是我的版本截图,你的也发下我看看是不是版本不一样
renzhen
发表于 2022-4-21 13:25:03
WZH 发表于 2022-4-21 09:40
你把你现在截图生成的.axf文件使用readelf 查下重定位的代码,截图下我看看
renzhen
发表于 2022-4-21 13:30:21
WZH 发表于 2022-4-21 09:40
你工程配置是不是改掉了?
WZH
发表于 2022-4-21 13:51:52
我用的不是readelf工具查看的,使用的是fromelf查看,我直接把程序镜像还有源码给你吧,你自己找找看看哪里不同。
renzhen
发表于 2022-4-21 14:20:49
WZH 发表于 2022-4-21 13:51
我用的不是readelf工具查看的,使用的是fromelf查看,我直接把程序镜像还有源码给你吧,你自己找找看看哪 ...
用你DLL_PROG.zip编译的和你的结果一样,也就是说跟你原来的工程(APP_Elf_Generate.zip)是不一样的.
希望楼主能研究出一个确实可用的工程(考虑到大代码量时遇到的种种问题).
lindabell
发表于 2022-4-23 09:20:40
contiki里面也实现了动态加载
https://github.com/contiki-os/contiki/blob/master/core/loader/elfloader.c
eric2013
发表于 2022-4-23 09:29:55
lindabell 发表于 2022-4-23 09:20
contiki里面也实现了动态加载
https://github.com/contiki-os/contiki/blob/master/core/loader/elfload ...
好资料,分享下
The dynamic loader · contiki-os/contiki Wiki (github.com)
zhengwending
发表于 2022-5-4 16:47:52
sxw101320 发表于 2021-12-5 18:06
牛,之前做国网产品的时候,国网提供的操作系统就是动态加载app,知道是rtt的lwp模块,但是一直没有弄清楚 ...
在做国网产品?
sxw101320
发表于 2022-5-5 21:22:26
zhengwending 发表于 2022-5-4 16:47
在做国网产品?
之前做,离开一年了
会飞的猪_2020
发表于 2022-5-18 13:47:20
gitee仓库要公开申请。
之前我的仓库现在都无法访问了,估计楼主你的仓库也这样了。
这波操作难道是为了配合净网???
感觉被恶心到了。
但是github连接实在太慢了,只能用gitee..
WZH
发表于 2022-5-18 23:23:11
会飞的猪_2020 发表于 2022-5-18 13:47
gitee仓库要公开申请。
之前我的仓库现在都无法访问了,估计楼主你的仓库也这样了。
确实挺恶心的,刚刚才知道gitee有这个问题,已经申请了
chenyingchun
发表于 2022-5-21 19:53:05
WZH 发表于 2021-12-5 19:13
大家可以在评论下动态加载的实战意义大不大,如果大的话,我后面写一篇详细一点的关于实现原理的技术文档。 ...
动态加载,有时挺有用的,我总结了几个场景:
应用场景分析
1. 我们目前在MCU上跑dlmodule,可能更多是抱着学习,了解原理的心态,一般来说,
动态模块会使用在RAM大于4MB的平台中。
2. 动态模块可以对未来不可预知的一些功能的扩展
3. 可以做到类似于安卓app,把一些特殊功能的应用交给第三方的模块独立完成
4. 调试使用,比如调试某个具体功能时,如果每次都修改整个项目工程的源码,然后
编译,下载,如果整体烧写flash效率比较低,此时就可以使用动态模块调试
leeeeeeeeee
发表于 2022-5-25 14:07:07
WZH 发表于 2021-12-14 20:38
对,我的实现方法和这篇文章大体思路是一样的,但在具体操作上略有不同。我没做符号表的支持,也就 ...
不知道是否可以通过APP工程生成的.o文件连接base工程生成的elf内函数和变量的地址,完成APP.bin文件生成
471813942
发表于 2022-5-27 14:54:41
对于这些如何移植过来,还有一些疑问,实际自己需要动态加载的.axf和动态解析的功能模块是怎么工程配置的呢?
WZH
发表于 2022-5-27 15:54:35
471813942 发表于 2022-5-27 14:54
对于这些如何移植过来,还有一些疑问,实际自己需要动态加载的.axf和动态解析的功能模块是怎么工程配置的呢 ...
基于STM32动态加载实现原理V1.0
https://www.armbbs.cn/forum.php?mod=viewthread&tid=112099&fromuid=24016
(出处: 硬汉嵌入式论坛)
可参考此帖子的内容
WZH
发表于 2022-5-27 15:56:56
leeeeeeeeee 发表于 2022-5-25 14:07
不知道是否可以通过APP工程生成的.o文件连接base工程生成的elf内函数和变量的地址,完成APP.bin文件生成
这个不太好实现,因为在每次编译工程时,函数地址一般都会变化。
pokemonds
发表于 2022-10-15 13:28:53
用楼主的工程没有生成SHT_REL的,MDK5.37,是哪里不对吗?
pokemonds
发表于 2022-10-15 13:29:31
** ELF Header Information
File Name: dll_generate.axf
Machine class: ELFCLASS32 (32-bit)
Data encoding: ELFDATA2LSB (Little endian)
Header version: EV_CURRENT (Current version)
Operating System ABI: ARM BPABI with Symbol Versioning
ABI Version: 0
File Type: ET_EXEC (Executable) (2)
Machine: EM_ARM (ARM)
Image Entry point: 0x00000005
Flags: EF_ARM_HASENTRY + EF_ARM_ABI_FLOAT_HARD (0x05000402)
ARM ELF revision: 5 (ABI version 2)
Conforms to Hard float procedure-call standard
Header size: 52 bytes (0x34)
Program header entry size: 32 bytes (0x20)
Section header entry size: 40 bytes (0x28)
Program header entries: 3
Section header entries: 10
Program header offset: 52 (0x00000034)
Section header offset: 756 (0x000002f4)
Section header string table index: 9
========================================================================
** Program header #0 (PT_LOAD)
Size : 180 bytes
Virtual address: 0x00000000 (Alignment 4)
====================================
** Program header #1 (PT_LOAD)
Size : 0 bytes
Virtual address: 0x000000b4 (Alignment 4)
====================================
** Program header #2 (PT_DYNAMIC)
Size : 96 bytes
Virtual address: 0x00000000 (Alignment 4)
========================================================================
** Section #1 'ER_IROM1' (SHT_PROGBITS)
Size : 180 bytes (alignment 4)
Address: 0x00000000
** Section #2 '.dynstr' (SHT_STRTAB)
Size : 52 bytes
** Section #3 '.dynsym' (SHT_DYNSYM)
Size : 64 bytes (alignment 4)
String table #2 '.dynstr'
Last local symbol no. 0
** Section #4 '.hash' (SHT_HASH)
Size : 36 bytes (alignment 4)
Symbol table #3 '.dynsym'
** Section #5 '.version' (SHT_GNU_versym)
Size : 8 bytes (alignment 4)
Symbol table #3 '.dynsym'
** Section #6 '.version_d' (SHT_GNU_verdef)
Size : 56 bytes (alignment 4)
String table #2 '.dynstr'
** Section #7 '.dynamic' (SHT_DYNAMIC)
Size : 96 bytes (alignment 4)
String table #2 '.dynstr'
** Section #8 '.note' (SHT_NOTE)
Size : 20 bytes (alignment 4)
** Section #9 '.shstrtab' (SHT_STRTAB)
Size : 96 bytes
WZH
发表于 2022-10-15 19:55:38
pokemonds 发表于 2022-10-15 13:29
** ELF Header Information
File Name: dll_generate.axf
用我gitee仓库里的程序版本试试,原本的版本貌似有问题
https://gitee.com/wzh1845462801/dynamic_loader
WZH
发表于 2022-10-15 20:04:06
pokemonds 发表于 2022-10-15 13:29
** ELF Header Information
File Name: dll_generate.axf
程序中如果没有静态变量的话也会出现这种情况,因为这时程序中不需要引用任何变量的地址,自然也就没有用重定位的节区了