当前位置: 首页 > 科技观察

鸿蒙Liteos-a移植到STM32MP157部分直播课件

时间:2023-03-21 00:02:18 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com0。准备工作及说明0.1准备工作请先下载以下文件,其中包含文档:https://gitee.com/weidongshan/openharmony_for_imx6ull/repository/archive/master.zip参考GIT中的文档,安装虚拟机,下载Liteos-来自GIT的源代码,然后键入iMX6ULL的补丁。0.2说明1.Makefile编译系统分析1.1变量1.LITEOSTOPDIR//kernel/liteos_a2.LITEOSTHIRDPARTY//third_party3.LITEOS_MK_PATH//kernel/liteos_a/tools/build/mk4.MK_PATH=$(LITEOSTOPDIR)/tools/build/mk//kernel/liteos_a/tools/build/mk1.2包含文件Makefile-include$(LITEOSTOPDIR)/tools/build/config.mk-include$(LITEOSTOPDIR)/tools/build/mk/los_config.mk-include$(LITEOSTOPDIR)/.configinclude$(LITEOSTOPDIR)/arch/cpu.mk-include$(LITEOSTOPDIR)/arch/arm/arm.mkinclude$(LITEOSTOPDIR)/platform/bsp.mkinclude$(LITEOSTOPDIR)/../../供应商/nxp/imx6ull/imx6ull.mkinclude$(LITEOSTOPDIR)/../../drivers/hdf/lite/hdf_lite.mkinclude$(LITEOSTOPDIR)/../../vendor/nxp/hdf/hdf_vendor.mk-include$(LITEOSTOPDIR)/3rdParty/3rdParty.mk-include$(LITEOS_MK_PATH)/liteos_tables_ldflags.mk-include$(LITEOS_MK_PATH)/dynload.mk1.3展开所有Makefile得到一个Makefile_all.txt,分析Makefile_all.txt,然后You可以知道编译过程。1.4分析在kernel/liteos_a下执行make的过程1.4.1第一个targetall:$(OUT)$(BUILD)$(LITEOS_TARGET)$(APPS)1.4.2Target:OUTOUTtarget:#.configfile,LOSCFG_PLATFORM="imx6ull"OUT=$(LITEOSTOPDIR)/out/$(LITEOS_PLATFORM)$(OUT):$(LITEOS_MENUCONFIG_H)$(HIDE)mkdir-p$(OUT)/lib$(HIDE)$(CC)-I$(LITEOS_PLATFORM_BASE)/include-I$(BOARD_INCLUDE_DIR)\-E$(LITEOS_PLATFORM_BASE)/board.ld.S\-o$(LITEOS_PLATFORM_BASE)/board.ld-POUT依赖项:LITEOS_MENUCONFIG_HLITEOS_MENUCONFIG_H=$(LITEOSTOPDIR)/包含/生成/autoconf.hKCONFIG_FILE_PATH=$(LITEOSTOPDIR)/Kconfig$(LITEOS_MENUCONFIG_H):ifneq($(LITEOS_PLATFORM_MENUCONFIG_H),$(通配符$(LITEOS_PLATFORM_MENUCONFIG_H)))$(HIDE)$(MAKE)genconfig_MENUCONFIG_H)CONFIG/FILECONFIG/FIG:$(conf$(HIDE)mkdir-pinclude/configinclude/generated$<--silentoldconfig$(KCONFIG_FILE_PATH)-mv-f$(LITEOS_MENUCONFIG_H)$(LITEOS_PLATFORM_MENUCONFIG_H)1.4.3目标:BUILD创建目录kernel/liteos_a/imx6ull/objOUT=$(LITEOSTOPDIR)/输出/$(LITEOS_PLATFORM)BUILD=$(OUT)/obj$(BUILD):$(HIDE)mkdir-p$(BUILD)1.4.4目标:LITEOS_TARGETLITEOS_TARGET=liteos$(LITEOS_TARGET):$(__LIBS)$(HIDE)touch$(LOSCFG_ENTRY_SRC)$(HIDE)fordirin$(LITEOS_SUBDIRS);\do$(MAKE)-C$$dirall||exit1;\done$(LD)$(LITEOS_LDFLAGS)$(LITEOS_TABLES_LDFLAGS)$(LITEOS_DYNLDFLAGS)-Map=$(OUT)/$@.map-o$(OUT)/$@--开始-group$(LITEOS_LIBDEP)--end-group#$(SIZE)-t--common$(OUT)/lib/*.a>$(OUT)/$@.objsize$(OBJCOPY)-Obinary$(OUT)/$@$(LITEOS_TARGET_DIR)/$@.bin$(OBJDUMP)-t$(OUT)/$@|sort>$(OUT)/$@.sym.sorted$(OBJDUMP)-d$(OUT)/$@>$(OUT)/$@.asm#$(NM)-S--size-sort$(OUT)/$@>$(OUT)/$@.size目标:__LIBS#doesnothing__LIBS=libs$(__LIBS):$(OUT)$(CXX_INCLUDE)Command:$(HIDE)touch$(LOSCFG_ENTRY_SRC)每次编译los_config.c,touchLOSCFG_ENTRY_SRC=$(LITEOSTOPDIR)/kernel/common/los_config.ccommand:enter每个LITEOS_SUBDIRS,执行make,然后重点编译每个子目录+=$(PLATFORM_BSP_HISI_BASE)LIB_SUBDIRS+=$(LITEOSTOPDIR)/kernel/commonLIB_SUBDIRS+=kernel/baseLIB_SUBDIRS+=$(IMX6ULL_BASE_DIR)/boardLIB_SUBDIRS+=$(IMX6ULL_BASE_DIR)/driver/mtd/commonLIB_SUBDIRS+=$(IMX6ULL_BASE_DIR)/driver/mtd/spi_norLIB_SUBDIRS+=$(IMX6ULL_BASE_DIR)/driver/imx6ull-fbLIB_SUBDIRS+=$(IMX6ULL_BASE_DIR)/driver/imx6ull-uartLIB_SUBDIRS+=kernel/extended/cpupLIB_SUBDIRS+=lib/libcLIB_SUBDIRS+=lib/libsecLIB_SUBDIRS+=lib/libscrewLIB_SUBDIRS+=fs/fatLIB_SUBDIRS+=fs/jffs2LITEOS_SUBDIRS=$(LIB_SUBDIRS)(\$(KEER)-隐藏C$$dirall||exit1;\done链接及各种处理$(LD)$(LITEOS_LDFLAGS)$(LITEOS_TABLES_LDFLAGS)$(LITEOS_DYNLDFLAGS)-Map=$(OUT)/$@.map-o$(OUT)/$@--start-group$(LITEOS_LIBDEP)--end-group#$(SIZE)-t--common$(OUT)/lib/*.a>$(OUT)/$@.objsize$(OBJCOPY)-Obinary$(OUT)/$@$(LITEOS_TARGET_DIR)/$@.bin$(OBJDUMP)-t$(OUT)/$@|sort>$(OUT)/$@.sym.sorted$(OBJDUMP)-d$(OUT)/$@>$(OUT)/$@.asm#$(NM)-S--大小排序$(OUT)/$@>$(OUT)/$@。size1.4.5如何编译各个子目录第1行包含config.mk这里面包含了一些预定义的变量,比如默认的编译选项等。LOCAL_SRCS定义为一系列的C文件,即要编译的源文件。LOCAL_INCLUDE已定义。这是头文件的目录。LOCAL_FLAGS被定义为编译选项。MODULE_NAME一般等于当前目录的名字,比如fat,后面会编译libfat.a。如何编译?看最后一行include$(MODULE)MODULE是:MODULE=$(MK_PATH)/module.mk#kernel/liteos_a/tools/build/mk/module.mk分析module.mk:#find第一个targetall:$(LIB)#什么是LIB,如果没有定义LOCAL_SO,LIB就是lib$(MODULE_NAME).a,比如libfat.aifeq($(LOCAL_SO),y)LIBSO:=$(OUT)/lib/lib$(MODULE_NAME).soLIBA:=$(OUT)/lib/lib$(MODULE_NAME).aelseLIBSO:=LIBA:=$(OUT)/lib/lib$(MODULE_NAME).aendifLIB:=$(LIBA)$(LIBSO)#如何编译LIBA?见下图更多信息请访问:https://harmonyos.51cto.com,与华为共同打造的鸿蒙技术社区