如何编译预置obj 文件

如何编译预置obj 文件,第1张

1. 如何在preloader 中预置obj 文件

Branch: GB, GB2, ICS, ICS2, JB, JB2

Step1. 首先获取obj 文件,如果是preloader 已有的Source code 需要预置为obj 文

件,那么可到如下路径获取obj 文件:mediatek/[source]/preloader/out

Step2. 在mediatek/[source]/preloader 目录下创建文件夹:myobjs,将Step1 中获取

的obj 文件放到该文件夹中

Step3. 修改mediatek/[source]/preloader/Makefile 文件,在该文件如下Code:

$(D_BIN)/$(PL_IMAGE_NAME).elf:

之前添加:

MYOBJS := $(D_ROOT)/myobj

Step4. 修改mediatek/[source]/preloader/Makefile 中$(D_BIN)/$(PL_IMAGE_NAME).elf

生成命令,将MYOBJS 加入:如下:

$(D_BIN)/$(PL_IMAGE_NAME).elf:

$(LD) --gc-sections -Bstatic -T$(MTK_PATH_PLATFORM)/link_descriptor.ld \

$(wildcard $(D_OBJ)/*) $(wildcard $(MYOBJS)/*) $(SECURITY_LIB) -Map

system.map -o $(D_BIN)/$(PL_IMAGE_NAME).elf

Step5. 如果添加的obj 文件在preloader 中有对应的Source code,还需要修改

Source code 对应的make File 文件,将该Source code 从make File 文件中删除,以

bmt.c 为例,需要修改medaitek/platform/$platform/preloader/src/drivers/makefile,

将bmt.c 从该文件的MOD_SRC 中删除

说明:preloader 的Source code 位于如下路径:

– mediatek/platform/$platform/preloader/

– mediatek/custom/$platform/preloader/

– mediatek/custom/common/preloader/

– mediatek/custom/$porject/preloader/

2. 如何在uboot 中预置obj 文件?

Branch: GB, GB2, ICS, ICS2

Case1. 该obj 文件是从第三方处获取,在codebase 原本不存在.c 文件,不需要编

译进某个lib 文件

Step1. 首先获取obj 文件

Step2. 在bootable/bootloader/uboot 目录下添加myobjs 文件夹,将Step1 中获取的

obj 文件放到该文件夹中

Step3. 修改bootable/bootloader/uboot/Makefile,在该文件如下Code:

GEN_UBOOT = \

之前添加:

MYCUSTOMOBJS := $(wildcard myobjs/*)

MEDIATEK CONFIDENTIAL

FOR zhanghui@ vanzotec.com USE ONLY

loginid=zhanghui@vanzotec.com,time=2013-10-08 19:27:59,ip=180.166.121.198,doctitle=如何在preloader、uboot、lk、kernel中预置obj文件.docx,company=Vanzo_WCX

Step4. 修改bootable/bootloader/uboot/Makefile,将MYOBJSDIR 中的obj 文件添加

到u-boot 的生成命令中,如下:

GEN_UBOOT = \

UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \

sed -n -e 's/.*$(SYM_PREFIX)__u_boot_cmd_.*/-u\1/p'|sort|uniq`\

cd $(LNDIR) &&$(LD) $(LDFLAGS) $$UNDEF_SYM $(MYCUSTOMOBJS)

$(__OBJS) \

Case2. 该obj 文件在Codebase 中存在对应的.c 文件,现在需要将.c 文件删除,替

换为obj 文件

Step1. 编译生成obj 文件,uboot 编译生成的obj 文件与其.c 文件位于同级目录下

Step2.在原先obj 文件目录下创建一个文件夹prebuilt,并将obj 文件放入其中,同

时将.c 文件删除

Step3. 修改包含该.c 文件的Makefile 文件(一般与.c 文件位于同级目录下),将该obj

文件的名称从OBJS 变量中删除,同时在该Makefile 中添加一个变量,MYOBJS,将

该obj 文件添加到MYOBJS 中,以

bootable/bootloader/uboot/drivers/video/cfb_console.c 为例,修改该目录下的

Makefile 文件,将cfb_console.o 从变量OBJS 中删除,同时添加一行:

MYOBJS := cfb_console.o

Step4. 继续修改Step3 中的Makefile,将MYOBJS 添加到生成LIB 的命令中,如下:

$(LIB): $(OBJS) $(SOBJS)

$(AR) $(ARFLAGS) $@ $(OBJS) $(MYOBJS) $(SOBJS)

Case3. 某些模块,Uboot 和kernel 共用同一份Source code,比如LCM,这种情况

需要做特殊处理,以LCM 为例,如下:

Step1. 首先编译出obj 文件,路径位于:mediatek/custom/out/$project/uboot/lcm,

同时将要替换的Source code 删除(mediate/custom/common/kernel/lcm)

Step2. 在mediatek/custom/$project/uboot 下面添加lcm 文件夹,同时将Step1 中获

取到的obj 文件添加到该文件夹下,同时将原目录下的obj 文件删除(这里获取的

obj 文件一定要是Uboot 目录下的,不要到kernel 目录下获取这些obj 文件)

Step3. 修改mediatek/custom/common/uboot/Makefile 文件,将要替换的obj 文件

名称从COBJS 删除:COBJS += $(patsubst %.c, %.o, $(wildcard lcm/*.c))

Step4. 继续修改Step3 中的Makefile,添加如下Code:MYOBJS := $(addprefix $(obj),

$(wildcard lcm/*.o)),同时将MYOBJS 添加到$(LIB)的编译命令中,如下:

$(LIB): $(OBJS) $(SOBJS)

$(AR) $(ARFLAGS) $@ $(OBJS) $(MYOBJS) $(SOBJS)

说明:Uboot 的Source Code 主要位于如下路径:

– bootable/bootloader/uboot/

– mediatek/platform/$platform/uboot/

MEDIATEK CONFIDENTIAL

FOR zhanghui@ vanzotec.com USE ONLY

loginid=zhanghui@vanzotec.com,time=2013-10-08 19:27:59,ip=180.166.121.198,doctitle=如何在preloader、uboot、lk、kernel中预置obj文件.docx,company=Vanzo_WCX

– mediatek/custom/$platform/uboot/

– mediatek/custom/common/uboot/

– mediatek/custom/$porject/uboot/

3. 如何在kernel 中预置obj 文件?

Branch:GB, GB2, ICS

– 比如要将xxx.c 用xxx.o 替代编译

– 先正常编译出xxx.o

– 然后在xxx.c 所在目录下创建prebuilt 目录,将xxx.o 放入

• 注意prebuilt 目录的目录名不能修改,否则在clean 阶段会被清除

– 修改xxx.c 所在目录下的Makefile 文件,原本已经有obj-y := xxx.o,在其后

面添加xxx-y := prebuilt/xxx.o 即可

– mediatek/custom/[XXX]/kernel 目录下对应的Source Code 没有Makefile 文件,

自己在Source code 对应的同级目录下添加一个Makefile 即可

Branch:ICS2, JB, JB2

– 比如要将debug.c 用debug.o 替代编译

– 先正常编译出debug.o (针对kernel 和lk, uboot 共用Source Code 的情况,

如LCM,这里获取 到的obj 文件一定要是kernel/out 目录下的)

– 然后将debug.o 复制到原先debug.c 所在目录下,并重命名为

debug.o_shipped

– 原先debug.c 同级目录下的Makefile 不变,依然保持为

obj-y:=debug.o;mediatek/custom/[XXX]/kernel 目录下对应的Source Code 没有

Makefile 文件,自己在Source code 对应的同级目录下添加一个Makefile 即可

– 重新编译kernel 即可

说明:kernel 的Source code 主要位于如下路径:

– kernel/

– mediatek/platform/$platform/kernel/

– mediatek/[source]/kernel/

– mediatek/custom/$platform/kernel/

– mediatek/custom/common/kernel/

– mediatek/custom/$porject/kernel/

4. 如何在lk 中预置obj 文件

Branch:JB,JB2

Step1. 在bootable/bootloader/lk/makefile 中添加:MYOBJ :=

Step2. 获取obj 文件,Codebase 编译生成的obj 文件位于

bootable/bootloader/lk/build-$project/custom/$project/lk 目录下

Step3. 将获取的obj 文件放到与.c 文件相同目录下;同时可将.c 文件删除

MEDIATEK CONFIDENTIAL

FOR zhanghui@ vanzotec.com USE ONLY

loginid=zhanghui@vanzotec.com,time=2013-10-08 19:27:59,ip=180.166.121.198,doctitle=如何在preloader、uboot、lk、kernel中预置obj文件.docx,company=Vanzo_WCX

Step4. 将相应的.c 文件从包含该.c 文件的rules.mk(一般与.c 文件位于同级目录)中删

Step5. 将Step3 中添加的.o 文件在rules.mk 中添加到MYOBJ,比如MYOBJ += test.o

Step6. 打开bootable/bootloader/lk/make/build.mk,将MYOBJ 添加到OUTELF 的生

成命令中,如下:

else

$(OUTELF): $(ALLOBJS) $(LINKER_SCRIPT)

@echo linking $@

$(NOECHO)$(LD) $(LDFLAGS) -T $(LINKER_SCRIPT) $(ALLOBJS)

$(MYOBJ) $(LIBGCC) -o $@ endif

Step7. 如果要替换的.c 文件是lk 与kernel 共用的,比如lcm 模块,那么Step2 需要

做一下修改:将获取的obj 文件放到mediatek/custom/$project/lk/lcm 中,同时要

确保这里获取的obj 文件是bootable/bootloader/lk/build-

$project/custom/$project/lk 目录下的,不要到kernel/out 目录下获取这些obj 文件

说明:lk 的Source Code 主要位于如下路径:

– mediatek/platform/$platform/lk/

– mediatek/custom/$platform/lk/

– mediatek/custom/common/lk/

– mediatek/custom/$porject/lk/

– bootable/bootloader/lk/

MEDIATEK CONFIDENTIAL

按照以下步骤 *** 作:

1、在云熙中打开您想要导出的模型。

2、点击左侧工具栏中的“导出”按钮。

3、在导出选项中选择“OBJ”格式,并进行其他必要的导出设置(如文件名、导出尺寸等)。

4、点击“导出”按钮以生成和下载OBJ文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8100545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存