龙芯pmon里添加文件
1、添加普通的xxx.c 文件
在pmon中加入 *.c 文件,在pmon的目录中有两个文件分别为: conf/files 、 Targets/LS2K/conf/files.LS2K。当pmon被编译时,以这两个文件为基础把相应的 *.c 文件编译成 *.o 文件,这两个文件的主要区别是:Targets/LS2K/conf/files.LS2K 依赖于不同的龙芯 CPU,CPU 不同该文件的内容就可能不同;conf/files是整个pmon所依赖的,比如ext2文件系统,所有的pmon都用相同的ext2文件系统。
加入的 *.c 文件必须被其他函数直接或间接的调用的。假如设备驱动文件为 xxx.c该文件中有一个设备的初始化函数 xxx_init(),假如该文件的路径:Targets/LS2K/ls2k/xxx.c并且可以根据配置来决定是否加载该驱动,需要操作步骤:Targets/LS2K/ls2k/tgt_machdep.c文件的函数 initmips(unsigned int memsz)中调用该函数。
如果编译时报错找不到该函数,因为该文件没有被编译成 *.o 需要在conf/files 或 Targets/LS2K/conf/files.LS2K (二者任选其一)中加入:
file Targets/LS2K/ls2k/xxx.c (这里选Targets/LS2K/conf/files.LS2K )
假如希望通过配置移除该文件,需要在 Targets/LS2K/conf/ls2k 中加入:
select xxx
上面的添加内容也许要修改:
file Targets/LS2K/ls2k/xxx.c xxx
当然需要把调用 xxx_init() 的地方注释掉,由于加入的该 *.c 文件是与 CPU 的种类有关,所以在 Targets/LS2K/conf/files.LS2K 中加入,若加入的内容被不同的 CPU 使用,可以考虑在 conf/files 中加入。
备注:
① select指定后面的参数被选中
② option指定后面的宏定义被定义
2、添加一个命令
① 在pmon源码的pmon/cmds/目录下创建一个cmd_test.c
② cmd_test.c 简单例子如下
#include <stdio.h>
#include <pmon.h>
int cmd_test (int argc, char **argv) //命令函数主体
{
int data;
data = strtoul(argv[1],0,0);
printf(“cmd test parameter %d\n”,data);
}
static const Cmd Cmds[] =
{
{"MyCmds"},
{"cmd_test","",0,"cmd_test date",cmd_test,0,99,CMD_REPEAT},
{0,0}
};
static void init_cmd __P((void)) __attribute__ ((constructor));
static void
init_cmd()
{
cmdlist_expand(Cmds,1);
}
在Targets/LS2K/conf/files.LS2K 里添加如下一行:
file pmon/cmds/cmd_test.c
添加完成后重新编译pmon,执行效果如下图