⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcc for brew-2.txt

📁 brew的一些接口的源程序
💻 TXT
字号:

救崇窍技夸?

碍谅啊 腹捞 词绢脸嚼聪促.

概锅 蠢尝绰 巴捞瘤父, 赣府加狼 郴侩阑 掺笼绢 郴绢 巢俊霸 汲疙茄促绰 巴篮 攫力扼档 塞电 老牢巴 鞍嚼聪促.

磊 弊烦 捞力 角力 GCC 甫 荤侩秦辑 MOD 甫 父甸绢 焊扁肺 窍摆嚼聪促.

抗力俊 甸绢乐绰 Helloworld 甫 GCC 肺 父甸绢 焊档废 窍摆嚼聪促.

老窜 Command 芒阑 咯矫绊, devkitadv 啊 汲摹等 叼泛配府肺 捞悼 饶, cmd-rd.bat 甫 角青钦聪促.

捞 硅摹拳老篮 DevKitAdv 甫 荤侩且 荐 乐档废 path 殿 券版 函荐甫 汲沥秦 凛聪促.

捞力 Helloworld 家胶啊 乐绰 叼泛配府肺 捞悼窍咯 促澜 郴侩狼 MAKEFILE 阑 父奠聪促.

#====================================================================================
.PHONY : all

TARGET	= helloworld

OBJS	= AEEModGen.o \
	AEEAppGen.o \
	helloworld.o

#----------------------------------------------
# AEEMODGEN.c 啊 乐绰 叼泛配府
AEEDIR	= d:/brew/src		
#----------------------------------------------

OBJDIR	= ./
CDIR	= ./;$(AEEDIR)
VPATH	= ./;$(AEEDIR)

#----------------------------------------------
# Position Independent Code 肺 哪颇老等 LIB
# Devkit 苞 窃膊 力傍登绰 Lib 绰 PIC 肺 哪颇老 登瘤 臼酒 BREW 俊辑 荤侩 且 荐 啊 绝嚼聪促.
# 弊贰辑 PIC 肺 促矫 哪颇老 秦辑 荤侩秦具 钦聪促.
# 力啊 哪颇老茄 lib 拳老苞 家胶甫 磊丰角俊 鞍捞 棵府档废 窍摆嚼聪促.
LIBS	= ../lib/libstd.a ../lib/libgcc.a
#----------------------------------------------

#----------------------------------------------
# Devkitadv 啊 汲摹等 叼泛配府
DEVKIT	= c:/devkitadv/
#----------------------------------------------

#----------------------------------------------
# Compile Option 涝聪促. 郴侩篮 促澜苞 鞍嚼聪促.
# -O2 : Optimize Level = 2
# -c  : compile only
# -fPIC : Position Independent Compile 阑 窍摆促绰 狼固
# -mthumb-interwork : thumb 客 arm 滴啊瘤 葛靛甫 悼矫俊 荤侩窍绊磊 且锭 荤侩窍绰 可记
# -DDYNAMIC_APP : BREW 俊辑 鞘夸肺 窍绰 可记
# -nostdinc : 扁夯 Include 拳老阑 啊侩窍瘤 臼摆促绰 狼固
# -Ixxx : include directory
COPT    = -O2 -c -fPIC -mcpu=arm7tdmi -mthumb-interwork -DDYNAMIC_APP  -nostdinc  -Id:/brew/inc -I. -I../KTFEXT -I$(DEVKIT)arm-agb-elf/include -I$(DEVKIT)lib/gcc-lib/arm-agb-elf/3.2.2/include
#----------------------------------------------

all: $(TARGET).mod $(OBJS)

$(TARGET).mod : makefile $(OBJS)

#----------------------------------------------
# link
# script file = myappl.ld 涝聪促.
# myappl.ld 狼 郴侩措肺 link 窍咯 $(TARGET).elf 拳老阑 父甸绢忱聪促.
# map 拳老篮 $(TARGET).map 俊 历厘邓聪促.
	ld -o $(TARGET).elf -T myappl.ld -e AEEMod_Load $(OBJS) $(LIBS) -Map $(TARGET).map
#----------------------------------------------

#----------------------------------------------
# strip 阑 捞侩窍咯 elf 拳老阑 mod 器镐栏肺 官策聪促.
# mod 器镐篮 窜鉴茄 binary 器镐涝聪促.
	strip -O binary $(TARGET).elf -o $(TARGET).mod
#----------------------------------------------

%.o:%.c
	gcc $(COPT) -o $(OBJDIR)$*.o $?

%.o:%.cpp
	gcc $(COPT) -o $(OBJDIR)$*.o $?

#====================================================================================


磊 捞力 MAKEFILE 阑 父甸菌栏聪, Link script 拳老阑 父甸 瞒肥涝聪促.
历锅 碍谅俊档 攫鞭沁瘤父, Link Script 拳老阑 捞侩秦辑 BREW 俊 利钦茄 皋葛府 备炼甫 父甸绢 郴绰 疤聪促.
郴侩篮 促澜苞 鞍嚼聪促. 

/*===============================================================================*/
/* myappl.ld
/*===============================================================================*/
SEARCH_DIR(./)

SECTIONS
{

/* 矫累 锅瘤 疙矫 */
  . = 0;		

/* AEEMOD_Load 窃荐啊 矫累瞪 何盒 涝聪促.*/
  .start_data  . : {}

/* 唱赣瘤 code 啊 甸绢啊绰 何盒 */
  .text 	. : { *(.text) }
  .text_end 	.	: {}

  .fini 	 :	{  }

/* 扁鸥 data 甸 ... */
  .rodata  .  :
  {
	*(.rodata)
	*(.rodata.*)
	*(.gnu.linkonce.r*)
  }
  .rosdata . :
  {
	*(.rosdata)
  }

  .data  .	:
  {
	_fdata = . ;
	*(.data)
	*(.gnu.linkonce.d*)
	SORT(CONSTRUCTORS)
  }

  .sdata   .  : { *(.sdata) }
  PROVIDE (edata = .);
  __bss_start = .;
  _fbss = .;

  .sbss   .   : { *(.sbss) *(.scommon) }
  .bss	  .   :
  {
   *(.dynbss)
   *(.bss)
   *(COMMON)
  }

  .stab 	 .	  : { *(.stab) }
  .debug	 .	  : { *(.debug) }

/*
   GOT 啊 历厘瞪 何盒 
   ". = 0x10000" 篮 mod 拳老郴俊 GOT 啊 甸绢哎 Offset 阑 疙矫茄绰 巴涝聪促.
   泅犁 64kbyte 捞饶俊 甸绢啊档废 瘤沥登绢 乐栏唱, 
   咯矾盒甸狼 橇肺弊伐 荤捞令俊 嘎眠绢 捞何盒阑 官操绢 林绢具 钦聪促.
   抗甫 甸绢 橇肺弊伐 荤捞令啊 200k 沥档扼搁 GOT 甫 弊捞饶牢 256K 何盒俊 持绢林绢具 钦聪促.
   蝶扼辑 ". = 0x40000" 栏肺 官操绢具 摆烈?
   捞巴阑 促捞唱雇窍霸 官曹 荐 档 乐绰单, 弊扒 咯矾盒狼 憱栏肺 巢扁摆嚼聪促. ^^
*/
    . = 0x10000;	
  .got  .   :
  {
    *(.ref_start)		// GOT 狼 困摹甫 茫阑锭 荤侩窍绰 冀记
    *(.got)
    *(.got.plt)
    *(.data.rel)
    *(.ref_end)			// GOT 狼 场阑 茫阑锭 荤侩窍绰 冀记
  }
  
  _end = . ;
  PROVIDE (end = .);
}

/*===============================================================================*/

困狼 myappl.ld 拳老俊辑 扁撅秦 滴寂具 且 巴捞 割啊瘤 乐嚼聪促.
1. AEEMOD_Load 窃荐啊 甸绢哎 何盒捞 .start_data 扼绰 巴.
2. GOT 狼 矫累 困摹俊 .ref_start 扼绰 冀记阑 眠啊茄巴.
3. GOT 狼 场篮 .ref_end 扼绰巴. 
捞巴甸篮 AEEMOD_Load 俊辑 GOT 狼 困摹甫 茫酒尘 锭 怖 鞘夸茄 巴甸涝聪促.
扁撅秦 滴矫扁 官而聪促.


磊.. 老窜 咯扁鳖瘤 登菌栏搁 老窜 哪颇老 且 霖厚绰 场车嚼聪促.

"make -f makefile " 阑 command 芒俊 持绢焊技夸.

哪颇老捞 鉴炼酚霸 柳青登绊, 傅农鳖瘤 鉴炼酚霸 柳青登绢 helloworld.mod 拳老捞 积己瞪疤聪促.

俊矾啊 唱芭唱, helloworld.mod 拳老捞 积己登瘤 臼绰促搁, 券版汲沥捞 肋给登菌芭唱

促弗 坷幅啊 乐绰 巴捞聪 贸澜何磐 瞒辟 瞒辟 秦焊矫扁 官而聪促.

hwlloworld.mod.. 捞巴阑 迄俊 棵府绊 角青秦档 瞪鳖夸? 酒流 酒凑聪促.

啊厘 吝夸茄 巴捞 巢疽嚼聪促.

1. AEEMod_Load 窃荐甫 啊厘 霉 何盒俊 困摹矫虐绰 老.
2. GOT 蔼阑 角力 address 蔼栏肺 官操绢 林绰 老.

磊 快急 AEEMod_Load 甫 力老 困肺 缠绢 棵妨 杭鳖夸?

酒鳖 myappl.ld 俊辑 "AEEMOD_Load 窃荐啊 甸绢哎 何盒捞 .start_data 扼绰 巴." 阑 扁撅秦具 茄促绊 沁嚼聪促.

溜 AEEMOD_Load 甫 .start_data 冀记俊 笼绢 持绢 林扁父 窍搁 邓聪促.


快急 AEEModGen.c 甫 俊叼磐肺 阂矾可聪促.

AEEMOD_Load 窃荐狼 矫累 何盒栏肺 癌聪促. 促澜苞 鞍捞 登绢乐烈?

#ifdef AEE_SIMULATOR
__declspec(dllexport) int AEEMod_Load(IShell *pIShell, void * ph, IModule ** ppMod)
#else
#if defined(BREW_MODULE) || defined(FLAT_BREW)
extern int module_main(IShell *pIShell, void * ph, IModule ** ppMod);
int module_main(IShell *pIShell, void * ph, IModule ** ppMod)
#else
int AEEMod_Load(IShell *pIShell, void * ph, IModule ** ppMod) 
#endif

力老 关何盒 #else 捞饶狼 何盒捞 角力 迄俊 Appl 屈怕肺 棵扼哎锭 静捞绰 何盒涝聪促.
捞 何盒阑 促澜苞 鞍捞 官操绢 凛聪促.

#else
__attribute__ ((section(".start_data"))) 
int AEEMod_Load(IShell *pIShell, void * ph, IModule ** ppMod) 
#endif

GCC 俊辑 漂沥 窃荐 肚绰 函荐甫 漂沥 冀记俊 困摹矫虐扁 困秦辑绰 __attribute__ 扼绰 虐况靛甫 荤侩钦聪促.

捞犯霸 秦淋栏肺辑 AEEMod_Load 窃荐绰 捞力 .start_data 冀记栏肺 甸绢啊霸 邓聪促.

埃窜窍烈?

捞力 GOT 蔼阑 角力 address 蔼栏肺 官操绢 林绰 老父 巢疽焙夸..

GOT狼 蔼阑 角力 address 肺 官操妨搁, 刚历 迄惑俊 橇肺弊伐捞 肺爹等 address 甫 舅酒具 钦聪促.

咯矾啊瘤 规过捞 乐摆瘤父, 力啊 荤侩茄 规过篮 橇肺弊伐惑俊 漂沥 蔼阑 利绢滴绊 弊 蔼阑 茫篮 饶 

弊 惑措 困摹甫 捞侩秦 拌魂秦 郴绰 规过阑 荤侩 沁嚼聪促.

溜 泅犁狼 PC( Program address Counter : 泅犁 角青登绰 instruction 狼 困摹甫 啊瘤绰 饭瘤胶磐 )

蔼阑 佬绢 漂沥 蔼阑 茫酒唱啊绰 规侥涝聪促.

捞 规过阑 荤侩窍妨搁, 橇肺弊伐惑俊 亲惑 鞍篮 困摹俊 粮犁窍绰 蔼阑 捞侩秦具 钦聪促.

亲惑 鞍篮 困摹俊 粮犁窍绰 巴捞 公菌老鳖夸? 官肺 GOT 涝聪促.

GOT 狼 矫累 何盒俊 漂沥 蔼阑 结持绊 弊吧 茫绰 规过栏肺 秦焊扁肺 窍烈.

GOT 狼 矫累何盒苞 场何盒俊 漂沥 蔼阑 结持绢 焊档废 窍摆嚼聪促.

AEEMODGen.c 菊何盒 酒公单唱 促澜阑 眠啊钦聪促.

// ------------------------------------------------------
// GOT 狼 困摹甫 茫扁 困茄 STAMP

typedef void (*FUNC)(void);
const FUNC gotStart __attribute__ 	((section(".ref_start"))) = (FUNC)(0x89ABCDEF);
const FUNC gotEnd   __attribute__ 	((section(".ref_end"))) = (FUNC)(0xFEDCBA98);

// ------------------------------------------------------

捞犯霸 秦林搁, .ref_start 冀记俊 0x89ABCDEF 扼绰 蔼捞 甸绢啊霸 登绊,
.ref_end 扼绰 冀记俊绰 0xFEDCBA98 捞扼绰 蔼捞 甸绢啊霸 邓聪促.

弊烦 角力肺 GOT 狼 困摹甫 茫绰 风凭阑 眠啊秦 焊档废 窍烈.

快急 PC 饭瘤胶磐狼 蔼阑 佬绢坷绰 窃荐甫 窍唱 父甸烈.

GCC 狼 牢扼牢 ASM 阑 荤侩窍咯 PC 饭瘤胶磐狼 蔼阑 佬绢坷绰 窃荐涝聪促.

捞 窃荐档 AEEMODGen.c 菊何盒 酒公单唱 眠啊钦聪促.

int GetPC( void )
{
    register int foo asm ("pc");
    return foo;
}

促澜俊 角力肺 GOT 狼 Address 甫 茫绰 何盒涝聪促.

AEEMOD_Load() 窃荐狼 力老 菊何盒俊 促澜阑 眠啊钦聪促.

#ifndef AEE_SIMULATOR

// GOT 狼 Offset
// 馆淀捞 myappl.ld 俊 持篮 蔼苞 悼老茄 蔼捞扼具 茄促.
	#define GOT_POS	0x10000

// PC 饭瘤胶磐狼 蔼阑 掘绢柯促.
	dword *pc = (dword *)(GetPC());		
	dword startPos;

// 橇肺弊伐捞 努 版快 STAMP 蔼阑 贸澜何磐 茫绰巴篮 塞甸骨肺
// GOT 狼 offset 俊 厚肥窍咯 矫累且 困摹甫 沥茄促.
// 距 4kbyte 沥档狼 咯蜡甫 滴菌促.
	pc = pc + (GOT_POS)/4 - 1024;

// 困俊辑 利篮 GOT 狼 矫累 何盒阑 STAMP 蔼阑 捞侩秦辑 茫绰促.
	while(1)
	{
		if( *pc == 0x89ABCDEF )
			break;
		pc++;
	}

// 捞犯霸 茫篮 蔼俊辑 GOT_POS 甫 哗搁 角力 橇肺弊伐狼 矫累 困摹啊 唱柯促.	
	startPos = (dword)pc - GOT_POS;

// 弊烦 捞 蔼阑 捞侩秦辑 GOT 狼 蔼阑 摹券秦霖促.
// GOT 狼 场档 困客 鞍篮 规侥栏肺 茫酒辰促.
	// change GOT
	pc++;
	while(1)
	{
		if( *pc == 0xFEDCBA98 )	// got end
			break;
		// GOT 蔼 摹券.
		*pc = *pc + startPos;
		pc++;
	}
	
#endif

磊.. 捞力 促 场车嚼聪促.

捞力 促矫 command 芒阑 凯绊, make -f makefile 阑 钦聪促.

捞力 积己等 helloworld.mod 拳老阑 迄俊 促款肺靛 窍绊 角青秦 焊矫扁 官而聪促.

呈公 鞭窍霸 静蠢扼绊 郴侩捞 粱 部捞绊 何角秦脸嚼聪促.

剧秦秦 林矫扁 官扼绊夸..

磊丰角俊 包访等 颇老甸阑 棵府摆嚼聪促. 曼绊窍矫扁 官而聪促.

酒 弊府绊 GCC 甫 荤侩窍搁 傈开函荐甫 荤侩 且 荐 乐栏聪 腹捞甸 荤侩窍矫扁 官而聪促.

弊烦 促甸 亮篮 橇肺弊伐 俺惯窍矫扁 官而聪促.

弊烦..

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -