成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[349898]]

 想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

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編譯系統分析

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下執行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

創建目錄 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,執行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

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

  • 定義了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 ? 看下圖 

 想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

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編程語言

2010-09-27 16:26:09

JVMarm

2011-03-17 17:36:01

iptables嵌入式Linux

2022-07-25 14:31:55

LiteOS開發工具

2012-05-18 20:30:19

微軟 Android ap

2018-10-15 10:15:30

STM32Linux經驗

2015-05-05 13:57:12

AndroidWindows

2010-08-12 10:43:36

DB2 SQL移植

2021-08-02 09:46:55

鴻蒙HarmonyOS應用

2011-08-05 10:40:54

2011-05-12 13:48:07

MySql數據庫本地移植

2011-01-13 14:19:41

solarisLinux

2011-09-08 17:48:33

Web Widget

2021-05-20 07:26:22

DMASTM32數據

2021-05-06 08:54:39

串口DMASTM32
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一级淫片 | 成人在线免费看 | 亚洲国产一区二区三区在线观看 | 婷婷狠狠 | 久久精品91 | 欧美精品二区 | 亚洲国产成人精品久久久国产成人一区 | 精品视频免费 | av中文字幕在线 | 成人精品福利 | 久久久美女| 欧美日韩视频在线播放 | 国产精品亚洲综合 | 国产精品一区二区无线 | 久久久久91 | 毛片大全 | 亚洲一区二区三区久久 | 超碰在线国产 | 男女爱爱网站 | 麻豆一区 | 久久久99国产精品免费 | 国产美女一区二区 | 五月天婷婷狠狠 | 久久视频免费观看 | 亚洲免费人成在线视频观看 | 一区二区三区四区不卡视频 | 在线一区视频 | 欧美成人精品在线 | 风间由美一区二区三区在线观看 | 五月综合激情在线 | 久久精品在线播放 | 999久久久久久久久6666 | 国产一级片免费看 | 亚洲欧美日韩精品久久亚洲区 | 亚洲精品欧美一区二区三区 | 欧美a级网站 | 亚洲一区二区在线电影 | 日韩一区不卡 | 国产精品视频网站 | 午夜视频在线观看网址 | 亚洲国产专区 |