舉例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()完成了物理地址到邏輯地址的映射,對于不同的用戶環(huán)境需要對片選、映射地址進行相應修改。
四、源代碼打點編譯
目標環(huán)境:嵌入式linux (kernel 2.2.14)
1、修改instrconfig文件
libctHwic庫中的初始化程序ctlib.c完成了物理地址到邏輯地址的映射,這個邏輯地址被賦給amc_ctrl_port_ptr、amc_ctrl_port_ptr,使Probe可以正確接收數(shù)據(jù)。
這個邏輯地址的值同樣需要被用戶程序知道,我們的初始化程序ctlib.c必須先于用戶的主程序運行。而在RTOS Linux中不同的用戶程序無法實現(xiàn)變量的共用,所以我們采用了軟件打點的方法來決這個問題。
存放在<installation_dir>/instrconfig目錄下的打點配置文件為隱藏文件,為了對其進行相應修改,需要讓系統(tǒng)顯示所有文件。
根據(jù)環(huán)境變量AMC_TARGET的值,選擇同名文件進行修改。修改的內(nèi)容主要包括:
為CodeTEST確定當前環(huán)境使用的編譯器類型,即令:
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