自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

把鴻蒙Liteos-a移植到STM32MP157部分直播課件

系統(tǒng)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com/#zz

[[349898]]

 想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

0 . 準備工作與說明

0.1 準備工作

請先下載以下文件,里面有文檔:

https://gitee.com/weidongshan/openharmony_for_imx6ull/repository/archive/master.zip

參考GIT中的文檔,安裝好虛擬機,從GIT總下載Liteos-a源碼,打上IMX6ULL的補丁。

0.2 說明

1. Makefile編譯系統(tǒng)分析

1.1 變量 

  1. 1. LITEOSTOPDIR // kernel/liteos_a 
  2.  
  3. 2. LITEOSTHIRDPARTY // third_party 
  4.  
  5. 3. LITEOS_MK_PATH // kernel/liteos_a/tools/build/mk 
  6.  
  7. 4. MK_PATH = $(LITEOSTOPDIR)/tools/build/mk // kernel/liteos_a/tools/build/mk 

1.2 包含的文件 

  1. Makefile 
  2.  
  3. -include $(LITEOSTOPDIR)/tools/build/config.mk 
  4.  
  5. -include $(LITEOSTOPDIR)/tools/build/mk/los_config.mk 
  6.  
  7. -include $(LITEOSTOPDIR)/.config 
  8.  
  9. include $(LITEOSTOPDIR)/arch/cpu.mk 
  10.  
  11. -include $(LITEOSTOPDIR)/arch/arm/arm.mk 
  12.  
  13. include $(LITEOSTOPDIR)/platform/bsp.mk 
  14.  
  15. include $(LITEOSTOPDIR)/../../vendor/nxp/imx6ull/imx6ull.mk 
  16.  
  17. include $(LITEOSTOPDIR)/../../drivers/hdf/lite/hdf_lite.mk 
  18.  
  19. include $(LITEOSTOPDIR)/../../vendor/nxp/hdf/hdf_vendor.mk 
  20.  
  21. -include $(LITEOSTOPDIR)/3rdParty/3rdParty.mk 
  22.  
  23. -include $(LITEOS_MK_PATH)/liteos_tables_ldflags.mk 
  24.  
  25. -include $(LITEOS_MK_PATH)/dynload.mk 

1.3 把Makefile全部展開

得到了一個Makefile_all.txt,

分析Makefile_all.txt,就可以知道編譯過程。

1.4 分析在kernel/liteos_a下執(zhí)行make的過程

1.4.1 第1個目標

all: $(OUT) $(BUILD) $(LITEOS_TARGET) $(APPS)

1.4.2 目標:OUT

  • OUT目標: 
  1. # .config文件中, LOSCFG_PLATFORM="imx6ull" 
  2.  
  3. OUT = $(LITEOSTOPDIR)/out/$(LITEOS_PLATFORM) 
  4.  
  5. $(OUT): $(LITEOS_MENUCONFIG_H) 
  6.  
  7. $(HIDE)mkdir -p $(OUT)/lib 
  8.  
  9. $(HIDE)$(CC) -I$(LITEOS_PLATFORM_BASE)/include -I$(BOARD_INCLUDE_DIR) \ 
  10.  
  11. -E $(LITEOS_PLATFORM_BASE)/board.ld.S \ 
  12.  
  13. -o $(LITEOS_PLATFORM_BASE)/board.ld -P 
  • OUT的依賴:LITEOS_MENUCONFIG_H 
  1. LITEOS_MENUCONFIG_H = $(LITEOSTOPDIR)/include/generated/autoconf.h 
  2.  
  3. KCONFIG_FILE_PATH = $(LITEOSTOPDIR)/Kconfig 
  4.  
  5. $(LITEOS_MENUCONFIG_H): 
  6.  
  7. ifneq ($(LITEOS_PLATFORM_MENUCONFIG_H), $(wildcard $(LITEOS_PLATFORM_MENUCONFIG_H))) 
  8.  
  9. $(HIDE)$(MAKE) genconfig 
  10.  
  11. endif 
  12.  
  13. genconfig:$(MENUCONFIG_PATH)/conf 
  14.  
  15. $(HIDE)mkdir -p include/config include/generated 
  16.  
  17. $< --silentoldconfig $(KCONFIG_FILE_PATH) 
  18.  
  19. -mv -f $(LITEOS_MENUCONFIG_H) $(LITEOS_PLATFORM_MENUCONFIG_H) 

 1.4.3 目標:BUILD

創(chuàng)建目錄 kernel/liteos_a/imx6ull/obj 

  1. OUT = $(LITEOSTOPDIR)/out/$(LITEOS_PLATFORM) 
  2.  
  3. BUILD = $(OUT)/obj 
  4.  
  5. $(BUILD): 
  6.  
  7. $(HIDE)mkdir -p $(BUILD) 

1.4.4 目標:LITEOS_TARGET

  1. LITEOS_TARGET = liteos 
  2. $(LITEOS_TARGET): $(__LIBS) 
  3.     $(HIDE)touch $(LOSCFG_ENTRY_SRC) 
  4.  
  5.     $(HIDE)for dir in $(LITEOS_SUBDIRS); \ 
  6.     do $(MAKE) -C $$dir all || exit 1; \ 
  7.     done 
  8.  
  9.     $(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/$@.map -o $(OUT)/$@ --start-group $(LITEOS_LIBDEP) --end-group 
  10. #   $(SIZE) -t --common $(OUT)/lib/*.a >$(OUT)/$@.objsize 
  11.     $(OBJCOPY) -O binary $(OUT)/$@ $(LITEOS_TARGET_DIR)/$@.bin 
  12.     $(OBJDUMP) -t $(OUT)/$@ |sort >$(OUT)/$@.sym.sorted 
  13.     $(OBJDUMP) -d $(OUT)/$@ >$(OUT)/$@.asm 
  14. #   $(NM) -S --size-sort $(OUT)/$@ >$(OUT)/$@.size 
  • 目標:__LIBS 
  1. # 沒做什么事 
  2.  
  3. __LIBS = libs 
  4.  
  5. $(__LIBS): $(OUT) $(CXX_INCLUDE) 
  • 命令:$(HIDE)touch $(LOSCFG_ENTRY_SRC)

           每次都要編譯los_config.c,touch一下 

  1. LOSCFG_ENTRY_SRC = $(LITEOSTOPDIR)/kernel/common/los_config.c 
  • 命令:進入每個LITEOS_SUBDIRS,執(zhí)行make,后面重點講解各個子目錄的編譯 
  1. # LIB_SUBDIRS 等于一系列的目錄 
  2.  
  3. LIB_SUBDIRS := 
  4.  
  5. LIB_SUBDIRS += arch/arm/$(LITEOS_ARCH_ARM) # 就是arch/arm/arm 
  6.  
  7. LIB_SUBDIRS += $(PLATFORM_BSP_HISI_BASE) 
  8.  
  9. LIB_SUBDIRS += $(LITEOSTOPDIR)/kernel/common 
  10.  
  11. LIB_SUBDIRS += kernel/base 
  12.  
  13. LIB_SUBDIRS += $(IMX6ULL_BASE_DIR)/board 
  14.  
  15. LIB_SUBDIRS += $(IMX6ULL_BASE_DIR)/driver/mtd/common 
  16.  
  17. LIB_SUBDIRS += $(IMX6ULL_BASE_DIR)/driver/mtd/spi_nor 
  18.  
  19. LIB_SUBDIRS += $(IMX6ULL_BASE_DIR)/driver/imx6ull-fb 
  20.  
  21. LIB_SUBDIRS += $(IMX6ULL_BASE_DIR)/driver/imx6ull-uart 
  22.  
  23. LIB_SUBDIRS += kernel/extended/cpup 
  24.  
  25. LIB_SUBDIRS += lib/libc 
  26.  
  27. LIB_SUBDIRS += lib/libsec 
  28.  
  29. LIB_SUBDIRS += lib/libscrew 
  30.  
  31. LIB_SUBDIRS += fs/fat 
  32.  
  33. LIB_SUBDIRS += fs/jffs2 
  34.  
  35. LITEOS_SUBDIRS = $(LIB_SUBDIRS) 
  36.  
  37. $(HIDE)for dir in $(LITEOS_SUBDIRS); \ 
  38.  
  39. do $(MAKE) -C $$dir all || exit 1; \ 
  40.  
  41. done 
  • 鏈接及各類處理 
  1. $(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/$@.map -o $(OUT)/$@ --start-group $(LITEOS_LIBDEP) --end-group 
  2.  
  3. # $(SIZE) -t --common $(OUT)/lib/*.a >$(OUT)/$@.objsize 
  4.  
  5. $(OBJCOPY) -O binary $(OUT)/$@ $(LITEOS_TARGET_DIR)/$@.bin 
  6.  
  7. $(OBJDUMP) -t $(OUT)/$@ |sort >$(OUT)/$@.sym.sorted 
  8.  
  9. $(OBJDUMP) -d $(OUT)/$@ >$(OUT)/$@.asm 
  10.  
  11. # $(NM) -S --size-sort $(OUT)/$@ >$(OUT)/$@.size  

1.4.5 怎么編譯各個子目錄 

 
  • 第1行包含config.mk

           這是包含一些預(yù)先定義的變量,比如默認的編譯選項等。

  • 定義了LOCAL_SRCS

           等于一系列C文件,這就是要編譯的源文件。

  • 定義了LOCAL_INCLUDE

           這是頭文件的目錄

  • 定義了LOCAL_FLAGS

           這是編譯選項

  • 定義了MODULE_NAME

           一般等于當前目錄的名字,比如fat,以后就編譯得到libfat.a

  • 怎么編譯?看最后一行 
  1. include $(MODULE) 

MODULE就是: 

  1. MODULE = $(MK_PATH)/module.mk # kernel/liteos_a/tools/build/mk/module.mk 

分析module.mk: 

  1. # 找到第1個目標 
  2.  
  3. all : $(LIB) 
  4.  
  5. # LIB是什么, 如果沒定義LOCAL_SO,LIB就是 lib$(MODULE_NAME).a, 比如 libfat.a 
  6.  
  7. ifeq ($(LOCAL_SO), y) 
  8.  
  9. LIBSO := $(OUT)/lib/lib$(MODULE_NAME).so 
  10.  
  11. LIBA := $(OUT)/lib/lib$(MODULE_NAME).a 
  12.  
  13. else 
  14.  
  15. LIBSO := 
  16.  
  17. LIBA := $(OUT)/lib/lib$(MODULE_NAME).a 
  18.  
  19. endif 
  20.  
  21. LIB := $(LIBA) $(LIBSO) 
  22.  
  23. # 怎么編譯 LIBA ? 看下圖 

 想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2020-10-16 09:47:34

鴻蒙Liteos-a移植

2020-10-19 10:28:58

liteos-a移植STM32MP157

2020-10-22 10:08:06

韋東山STM32MP157鴻蒙

2020-09-17 17:41:24

Liteos-a鴻蒙Linux

2020-11-13 09:45:36

Liteos-a

2019-12-09 14:13:41

awkPython編程語言

2011-03-29 13:40:41

SQLserver20SQL

2011-03-30 09:49:19

Firefox 5.0

2012-11-28 09:08:04

UbuntuUbuntu 13.0圖標

2010-05-06 11:34:49

實現(xiàn)負載均衡

2010-09-27 16:26:09

JVMarm

2011-03-17 17:36:01

iptables嵌入式Linux

2022-07-25 14:31:55

LiteOS開發(fā)工具

2012-08-20 11:14:12

IBMdW

2011-09-14 09:26:24

Windows 8微軟BUILD

2019-04-11 10:50:26

前端JavaScript開發(fā)

2012-05-18 20:30:19

微軟 Android ap

2012-03-19 10:08:37

VmwarevSphere 5.0資源管理

2009-06-09 15:00:51

Javascript表單驗證

2009-06-09 15:21:39

Javascript表單驗證
點贊
收藏

51CTO技術(shù)棧公眾號