如何在pmon中增加新源码文件undefined reference to

    xiaoxiao2022-07-05  164

    前言

    在pmon中增加了新的源码文件后,链接时提示undefined reference to xxx。经过一番定位后,发现不是把新源文件放到pmon的一个子目录就可以,还需要修改配置。

    这里的配置怎么理解呢?我的理解是pmon其实是一个小的操作系统,支持不只一种cpu,支持多种外设,需要通过配置文件来选择需要编译的文件。这和linux类似,在(make)编译linux之前,需要先执行make menuconfig。

    Pmon的配置简介

    百度文库里面有个文档——《pmon基础知识》讲得不错。这里把文档内容截图后贴在下面

    配置文件位于各个目录下的conf目录内,在conf目录内的文件”file.xxx”里面增加一行

    file  <path to file>   [modname]

    这样pmon的配置工具就会把相应的源文件加入到Makefile中,并编译为.o文件,这样才能ld链接时才能顺利通过。

    示例(新增一个源文件test_add_file.c)

    新建源文件test_add_file.c

    并放入目录“pmon根目录/Targets/LS1X/dev/”中,源文件内容如下

    #include <stdio.h> void test_add_file(void) { printf("[%s]: qin_wei_ben test add file to pmon\r\n", __FUNCTION__); }

    这里解释一下,为什么把测试用的源文件放目录“pmon根目录/Targets/LS1X/dev/”中。因为这个目录常用于放外设的驱动文件,比如gpio,串口,i2c等。

    如果这个示例测试成功的话,可以参考这种方法把“龙芯1c库”的文件添加到pmon中,这样可以实现,在pmon的基础上,实现一些定制化的功能。

    新建头文件test_add_file.h

    并放入目录“pmon根目录/Targets/LS1X/include/”中,头文件内容如下

    #ifndef TEST_ADD_FILE_H #define TEST_ADD_FILE_H void test_add_file(void); #endif

    修改配置

    在文件“pmon根目录/Targets/LS1X/conf/files.LS1X”中添加如下配置信息,

    file Targets/LS1X/dev/test_add_file.c

    如下图所示

    这样pmon的配置工具就会把源文件test_add_file.c写进Makefile中,并编译为test_add_file.o文件

    如果没有增加这个配置,编译时会有如下提示

    tgt_machdep.c:(.text+0x15e4): undefined reference to `test_add_file'

    即,提示找不到相关函数的实现。进一步分析是,如果没加配置项,就不会编译源文件“test_add_file.c”,自然也就找不到函数test_add_file()

    调用测试函数

    在源文件“pmon根目录/Targets/LS1X/ls1x/tgt_machdep.c”中include头文件“test_add_file.h”,并在函数initmips()中调用测试函数test_add_file()

    这里解释一下,为什么头文件是放在目录“pmon根目录/Targets/LS1X/include/”中,而include的时候却是target下。因为编译的时候,会自动把目录“pmon根目录/Targets/LS1X/include/”中的头文件拷贝到目录“pmon根目录/Targets/LS1X/compile/ls1c/target/”下。实际上文件夹“pmon根目录/Targets/LS1X/compile”会被自动创建,所有的编译其实就是在这个目录中进行的。

    编译

    cd zloader.ls1c/ make cfg && make tgt=rom

    串口打印

     

    感谢耐心阅读!

     

    最新回复(0)