Cortex-M3動態加載三(模塊調用系統函數)


  在我的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文件作為輸入文件參與鏈接過程即可。

 

參照這個方法,可以在一個固定地址空間存放系統函數,然后做成一個系統函數表,生成相應的符號給到模塊使用即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM