举例ct_init():
#define CFG_IMMR 0xff000000
#define CODETEST_PHY_ADDR 0x70000000
#define CODETEST_ATTRIB_VAL 0xfff009f0
int ct_init(void)
{
extern int fd;
extern int *ip;
immap_t *immap;
size_t size,pgsize;
fd = open ("/dev/mem", O_RDWR);
pgsize = getpagesize();
size = ((sizeof(immap_t)/pgsize)+1)*pgsize;
ip = (int *) mmap (0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, CFG_IMMR);
immap = (immap_t *)ip;
immap -> im_memctl.memc_or2 = CODETEST_ATTRIB_VAL;
immap -> im_memctl.memc_br2 = CODETEST_PHY_ADDR + 0x001;
munmap (ip, size);
ip = (int *)mmap (0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, CODETEST_PHY_ADDR);
amc_ctrl_port_ptr = ip;
amc_data_port_ptr = (ip + 1);
return 0;
}
初始化程序ct_init()完成了物理地址到逻辑地址的映射,对于不同的用户环境需要对片选、映射地址进行相应修改。
四、源代码打点编译
目标环境:嵌入式linux (kernel 2.2.14)
1、修改instrconfig文件
libctHwic库中的初始化程序ctlib.c完成了物理地址到逻辑地址的映射,这个逻辑地址被赋给amc_ctrl_port_ptr、amc_ctrl_port_ptr,使Probe可以正确接收数据。
这个逻辑地址的值同样需要被用户程序知道,我们的初始化程序ctlib.c必须先于用户的主程序运行。而在RTOS Linux中不同的用户程序无法实现变量的共用,所以我们采用了软件打点的方法来决这个问题。
存放在<installation_dir>/instrconfig目录下的打点配置文件为隐藏文件,为了对其进行相应修改,需要让系统显示所有文件。
根据环境变量AMC_TARGET的值,选择同名文件进行修改。修改的内容主要包括:
为CodeTEST确定当前环境使用的编译器类型,即令:
AMC_CC=ppc_8xx-gcc
AMC_CXX=ppc_8xx-gcc
在AMC_TAGDEFAULTS中增加-tags-to-ctTag选项,-tags-to-ctTag选项令CodeTEST采用软件方式打点。注释去
#AMC_TAGDEFAULTS=-gnu -no-placement-delete
# -allocator-call-map=$AMC_HOMElib tosvxworksctvxwrap.map
令
AMC_TAGDEFAULTS=-gnu
-no-placement-delete
-tags-to-ctTag
-allocator-call-map=$AMC_HOMElib toslinuxctlinuxwrap.map