Cortex-M3动态加载三(模块调用系统函数)

在ARM动态加载实验中,通过固定系统函数地址空间并导出符号表,实现了模块调用系统函数的问题。以stm32为例,展示了如何在内核中导出系统函数,并在模块链接时使用此符号表,从而实现在模块中直接调用内核函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在我的arm动态加载实验中需要解决一个模块调用系统函数的问题,可以使用以下的一个方法。将系统函数固定在某一段地址空间,然后导出这一块的符号表到符号文件中,要记载的模块link的时候使用这个符号表文件,即可以实现模块调用系统函数的问题。

   在stm32上做了以下实验,kernel导出一个系统函数void syscall_printf(void),然后模块调用。

1 syscall.c
2 
3 #include <stdio.h>
4 void syscall_printf(void)
5 {
6          printf(“syscall_printf.\n”);
7 
8 }

链接生成kernel的时候指定

--keep=syscall_printf保证在kernel没有使用syscall时候,link不删除syscall_printf函数。

--symdefs=syscall.sym 生成syscall.sym供模块链接使用。

有关映像符号使用请参照arm官方文档DUI0206IC_rvct_link_user_guide.pdf。生成的syscall.sym文件实际上是一个文本文件,里面包含了符号信息,比如函数名及地址,全局变量名及地址等,将syscall.sym不需要导出给模块使用的符号信息删除掉。

在模块中可以直接调用syscall_printf,只需在链接的时候将syscall.sym文件作为输入文件参与链接过程即可。

 

参照这个方法,可以在一个固定地址空间存放系统函数,然后做成一个系统函数表,生成相应的符号给到模块使用即可。

 

转载于:https://www.cnblogs.com/ppym/p/3672155.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值