# å†…æ ¸æ¦‚è¿° ### å†…æ ¸ç®€ä»‹ 用户最常è§åˆ°å¹¶ä¸Žä¹‹äº¤äº’çš„æ“作系统界é¢ï¼Œå…¶å®žåªæ˜¯æ“作系统最外é¢çš„一层。æ“作系统最é‡è¦çš„任务,包括管ç†ç¡¬ä»¶è®¾å¤‡ï¼Œåˆ†é…系统资æºç‰ï¼Œæˆ‘们称之为æ“作系统内在最é‡è¦çš„æ ¸å¿ƒåŠŸèƒ½ã€‚è€Œå®žçŽ°è¿™äº›æ ¸å¿ƒåŠŸèƒ½çš„æ“作系统模å—,业界一般称之为æ“ä½œç³»ç»Ÿâ€œå†…æ ¸â€ã€‚ ### å®žçŽ°åŽŸç† æ“作系统是ä½äºŽåº”用和硬件之间的系统软件,å‘上æä¾›æ˜“ç”¨çš„ç¨‹åºæŽ¥å£å’Œè¿è¡ŒçŽ¯å¢ƒï¼Œå‘下管ç†ç¡¬ä»¶èµ„æºã€‚å†…æ ¸ä½äºŽæ“作系统的下层,为æ“ä½œç³»ç»Ÿä¸Šå±‚çš„ç¨‹åºæ¡†æž¶æä¾›ç¡¬ä»¶èµ„æºçš„å¹¶å‘管ç†ã€‚ **图1** æ“作系统架构   ### å¤šå†…æ ¸æž¶æž„å’ŒåŸºæœ¬ç»„æˆ ä¸šç•Œçš„å†…æ ¸æœ‰å¾ˆå¤šï¼Œä½†æ— è®ºæ˜¯ä»€ä¹ˆå†…æ ¸ï¼ŒåŸºæœ¬ä¸Šæœ‰å‡ ä¸ªæœ€é‡è¦çš„组æˆå•元是æ¯ä¸ªå†…æ ¸å‡è¦å…·å¤‡çš„,分别是: - è´Ÿè´£æŒä¹…化数æ®ï¼Œå¹¶è®©åº”用程åºèƒ½å¤Ÿæ–¹ä¾¿çš„访问æŒä¹…化数æ®çš„“文件系统â€ã€‚ - 负责管ç†è¿›ç¨‹åœ°å€ç©ºé—´çš„“内å˜ç®¡ç†â€ã€‚ - 负责管ç†å¤šä¸ªè¿›ç¨‹çš„“进程管ç†â€æˆ–者“任务管ç†â€œã€‚ - 负责本机æ“作系统和å¦å¤–一个设备上æ“作系统通信的“网络â€ã€‚ OpenHarmonyé‡‡ç”¨äº†å¤šå†…æ ¸ç»“æž„ï¼Œæ”¯æŒLinuxå’ŒLiteOS,开å‘è€…å¯æŒ‰ä¸åŒäº§å“è§„æ ¼è¿›è¡Œé€‰æ‹©ä½¿ç”¨ã€‚Linuxå’ŒLiteOSå‡å…·å¤‡ä¸Šè¿°ç»„æˆå•å…ƒï¼Œåªæ˜¯å®žçŽ°æ–¹å¼æœ‰æ‰€ä¸åŒã€‚å¤šä¸ªå†…æ ¸é€šè¿‡KAL(Kernel Abstraction Layer)模å—,å‘上æä¾›ç»Ÿä¸€çš„æ ‡å‡†æŽ¥å£ã€‚ å†…æ ¸å系统ä½äºŽOpenHarmony下层。需è¦ç‰¹åˆ«æ³¨æ„的是,由于OpenHarmonyé¢å‘多ç§è®¾å¤‡ç±»åž‹ï¼Œè¿™äº›è®¾å¤‡æœ‰ç€ä¸åŒçš„CPU能力,å˜å‚¨å¤§å°ç‰ã€‚为了更好的适é…这些ä¸åŒçš„è®¾å¤‡ç±»åž‹ï¼Œå†…æ ¸å系统支æŒé’ˆå¯¹ä¸åŒèµ„æºç‰çº§çš„设备选用适åˆçš„OSå†…æ ¸ï¼Œå†…æ ¸æŠ½è±¡å±‚ï¼ˆKAL,Kernel Abstract Layer)通过å±è”½å†…æ ¸é—´å·®å¼‚ï¼Œå¯¹ä¸Šå±‚æä¾›åŸºç¡€çš„å†…æ ¸èƒ½åŠ›ã€‚ **图2** OpenHarmony架构图   ### ä¸åŒå†…æ ¸é€‚é…的系统åŠè®¾å¤‡ç±»åž‹ OpenHarmony按照支æŒçš„设备å¯åˆ†ä¸ºå¦‚ä¸‹å‡ ç§ç³»ç»Ÿç±»åž‹ï¼š - è½»é‡ç³»ç»Ÿï¼ˆmini system) é¢å‘MCU类处ç†å™¨ä¾‹å¦‚Arm Cortex-Mã€RISC-V 32ä½çš„è®¾å¤‡ï¼Œç¡¬ä»¶èµ„æºæžå…¶æœ‰é™ï¼Œæ”¯æŒçš„设备最å°å†…å˜ä¸º128KiB,å¯ä»¥æä¾›å¤šç§è½»é‡çº§ç½‘络å议,轻é‡çº§çš„图形框架,以åŠä¸°å¯Œçš„IOT总线读写部件ç‰ã€‚坿”¯æ’‘的产å“如智能家居领域的连接类模组ã€ä¼ 感器设备ã€ç©¿æˆ´ç±»è®¾å¤‡ç‰ã€‚ - å°åž‹ç³»ç»Ÿï¼ˆsmall system) é¢å‘应用处ç†å™¨ä¾‹å¦‚Arm Cortex-A的设备,支æŒçš„设备最å°å†…å˜ä¸º1MiB,å¯ä»¥æä¾›æ›´é«˜çš„å®‰å…¨èƒ½åŠ›ã€æ ‡å‡†çš„图形框架ã€è§†é¢‘ç¼–è§£ç çš„å¤šåª’ä½“èƒ½åŠ›ã€‚å¯æ”¯æ’‘的产å“如智能家居领域的IP Cameraã€ç”µå猫眼ã€è·¯ç”±å™¨ä»¥åŠæ™ºæ…§å‡ºè¡ŒåŸŸçš„行车记录仪ç‰ã€‚ - æ ‡å‡†ç³»ç»Ÿï¼ˆstandard system) é¢å‘应用处ç†å™¨ä¾‹å¦‚Arm Cortex-A的设备,支æŒçš„设备最å°å†…å˜ä¸º128MiB,å¯ä»¥æä¾›å¢žå¼ºçš„交互能力ã€3D GPU以åŠç¡¬ä»¶åˆæˆèƒ½åŠ›ã€æ›´å¤šæŽ§ä»¶ä»¥åŠåŠ¨æ•ˆæ›´ä¸°å¯Œçš„å›¾å½¢èƒ½åŠ›ã€å®Œæ•´çš„åº”ç”¨æ¡†æž¶ã€‚å¯æ”¯æ’‘的产å“如高端的冰箱显示å±ã€‚ OpenHarmony针对ä¸åŒé‡çº§çš„系统,使用了ä¸åŒå½¢æ€çš„å†…æ ¸ã€‚è½»é‡ç³»ç»Ÿã€å°åž‹ç³»ç»Ÿå¯ä»¥é€‰ç”¨LiteOSï¼›å°åž‹ç³»ç»Ÿå’Œæ ‡å‡†ç³»ç»Ÿå¯ä»¥é€‰ç”¨Linux。其对应关系如下表: **表1** 系统关系对应表 | 系统级别 | è½»é‡ç³»ç»Ÿ | å°åž‹ç³»ç»Ÿ | æ ‡å‡†ç³»ç»Ÿ | | -------- | -------- | -------- | -------- | | LiteOS-M | √ | × | × | | LiteOS-A | × | √ | × | | Linux | × | √ | √ | ## LiteOS-M ### å†…æ ¸æž¶æž„ OpenHarmony LiteOS-Må†…æ ¸æ˜¯é¢å‘IoT领域构建的轻é‡çº§ç‰©è”网æ“ä½œç³»ç»Ÿå†…æ ¸ï¼Œå…·æœ‰å°ä½“积ã€ä½ŽåŠŸè€—ã€é«˜æ€§èƒ½çš„特点,其代ç 结构简å•,主è¦åŒ…æ‹¬å†…æ ¸æœ€å°åŠŸèƒ½é›†ã€å†…æ ¸æŠ½è±¡å±‚ã€å¯é€‰ç»„件以åŠå·¥ç¨‹ç›®å½•ç‰ï¼Œåˆ†ä¸ºç¡¬ä»¶ç›¸å…³å±‚以åŠç¡¬ä»¶æ— 关层,硬件相关层æä¾›ç»Ÿä¸€çš„HAL(Hardware Abstraction Layer)接å£ï¼Œæå‡ç¡¬ä»¶æ˜“适酿€§ï¼Œä¸åŒç¼–译工具链和芯片架构的组åˆåˆ†ç±»ï¼Œæ»¡è¶³AIoT类型丰富的硬件和编译工具链的拓展。 **图3** LiteOS-M架构图   ### 使用指导 LiteOS-M使用指导请å‚è§LiteOS-M[å†…æ ¸æ¦‚è¿°](kernel-mini-overview.md)的“使用说明â€ç« 节。 ## LiteOS-A ### å†…æ ¸æž¶æž„ OpenHarmony è½»é‡çº§å†…æ ¸æ˜¯åŸºäºŽIoT领域轻é‡çº§ç‰©è”网æ“作系统Huawei LiteOSå†…æ ¸æ¼”è¿›å‘å±•çš„æ–°ä¸€ä»£å†…æ ¸ï¼ŒåŒ…å«LiteOS-Må’ŒLiteOS-Aä¸¤ç±»å†…æ ¸ã€‚LiteOS-Må†…æ ¸ä¸»è¦åº”用于轻é‡ç³»ç»Ÿï¼Œé¢å‘çš„MCU(Microprocessor Unit)一般是百K级内å˜ï¼Œå¯æ”¯æŒMPU(Memory Protection Unitï¼‰éš”ç¦»ï¼Œä¸šç•Œç±»ä¼¼çš„å†…æ ¸æœ‰FreeRTOS或ThreadXç‰ï¼›LiteOS-Aå†…æ ¸ä¸»è¦åº”用于å°åž‹ç³»ç»Ÿï¼Œé¢å‘设备一般是M级内å˜ï¼Œå¯æ”¯æŒMMU(Memory Management Unitï¼‰éš”ç¦»ï¼Œä¸šç•Œç±»ä¼¼çš„å†…æ ¸æœ‰Zircon或Darwinç‰ã€‚ 为适应IoT产业的高速å‘展,OpenHarmony è½»é‡çº§å†…æ ¸ä¸æ–优化和扩展,能够带给开å‘者å‹å¥½çš„å¼€å‘体验和统一开放的生æ€ç³»ç»Ÿèƒ½åŠ›ã€‚è½»é‡çº§å†…æ ¸LiteOS-Aé‡è¦çš„æ–°ç‰¹æ€§å¦‚下: - æ–°å¢žäº†ä¸°å¯Œçš„å†…æ ¸æœºåˆ¶ï¼š - 新增虚拟内å˜ã€ç³»ç»Ÿè°ƒç”¨ã€å¤šæ ¸ã€è½»é‡çº§IPC(Inter-Process Communication,进程间通信)ã€DAC(Discretionary Access Controlï¼Œè‡ªä¸»è®¿é—®æŽ§åˆ¶ï¼‰ç‰æœºåˆ¶ï¼Œä¸°å¯Œäº†å†…æ ¸èƒ½åŠ›ï¼› - 为了更好的兼容软件和开å‘者体验,新增支æŒå¤šè¿›ç¨‹ï¼Œä½¿å¾—应用之间内å˜éš”离ã€ç›¸äº’ä¸å½±å“,æå‡ç³»ç»Ÿçš„å¥å£®æ€§ã€‚ - 引入统一驱动框架HDF(Hardware Driver Foundation) 引入统一驱动框架HDFï¼Œç»Ÿä¸€é©±åŠ¨æ ‡å‡†ï¼Œä¸ºè®¾å¤‡åŽ‚å•†æä¾›äº†æ›´ç»Ÿä¸€çš„æŽ¥å…¥æ–¹å¼ï¼Œä½¿é©±åŠ¨æ›´åŠ å®¹æ˜“ç§»æ¤ï¼ŒåŠ›æ±‚åšåˆ°ä¸€æ¬¡å¼€å‘,多系统部署。 - 支æŒ1200+æ ‡å‡†POSIXæŽ¥å£ æ›´åŠ å…¨é¢çš„æ”¯æŒPOSIXæ ‡å‡†æŽ¥å£ï¼Œä½¿å¾—应用软件易于开å‘和移æ¤ï¼Œç»™åº”用开å‘者æä¾›äº†æ›´å‹å¥½çš„å¼€å‘体验。 - å†…æ ¸å’Œç¡¬ä»¶é«˜è§£è€¦ è½»é‡çº§å†…æ ¸ä¸Žç¡¬ä»¶é«˜åº¦è§£è€¦ï¼Œæ–°å¢žå•æ¿ï¼Œå†…æ ¸ä»£ç ä¸ç”¨ä¿®æ”¹ã€‚ **图4** OpenHarmony LiteOS-Aå†…æ ¸æž¶æž„å›¾Â  ### 使用指导 LiteOS-A使用指导请å‚è§LiteOS-A[å†…æ ¸æ¦‚è¿°](kernel-small-overview.md)的“使用说明â€ç« 节。 ## Linux ### linuxå†…æ ¸æ¦‚è¿° OpenHarmonyçš„Linuxå†…æ ¸åŸºäºŽå¼€æºLinuxå†…æ ¸LTS **4.19.y / 5.10.y** 分支演进,在æ¤åŸºçº¿åŸºç¡€ä¸Šï¼Œå›žåˆCVEè¡¥ä¸åŠOpenHarmony特性,作为OpenHarmony Common Kernel基线。针对ä¸åŒçš„芯片,å„厂商åˆå…¥å¯¹åº”çš„æ¿çº§é©±åŠ¨è¡¥ä¸ï¼Œå®Œæˆå¯¹OpenHarmony的基线适é…。 - Linux社区LTS 4.19.y分支信æ¯è¯·æŸ¥çœ‹[kernel官网](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/log/?h=linux-4.19.y)。 - Linux社区LTS 5.10.y分支信æ¯è¯·æŸ¥çœ‹[kernel官网](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/log/?h=linux-5.10.y)。 å†…æ ¸çš„Patchç»„æˆæ¨¡å—,在编译构建æµç¨‹ä¸ï¼Œé’ˆå¯¹å…·ä½“芯片平å°ï¼Œåˆå…¥å¯¹åº”的架构驱动代ç ï¼Œè¿›è¡Œç¼–è¯‘å¯¹åº”çš„å†…æ ¸é•œåƒã€‚æ‰€æœ‰è¡¥ä¸æ¥æºå‡éµå®ˆGPL-2.0å议。 ### å†…æ ¸å¢žå¼ºç‰¹æ€§ OpenHarmony针对linuxå†…æ ¸åœ¨ESwap(Enhanced Swap)ã€å…³è”线程组调度和CPUè½»é‡çº§éš”离åšäº†å¢žå¼ºã€‚ **Enhanced SWAP特性** ESwapæä¾›äº†è‡ªå®šä¹‰æ–°å¢žå˜å‚¨åˆ†åŒºä½œä¸ºå†…å˜äº¤æ¢åˆ†åŒºçš„能力,并创建了一个常驻进程zswapdå°†[ZRAM](https://www.kernel.org/doc/html/latest/admin-guide/blockdev/zram.html)压缩åŽçš„匿åé¡µåŠ å¯†æ¢å‡ºåˆ°ESwapå˜å‚¨åˆ†åŒºï¼Œä»Žè€Œèƒ½å®Œå…¨çš„空出一å—å¯ç”¨å†…å˜ï¼Œä»¥æ¤æ¥è¾¾åˆ°ç»´æŒMemavailableæ°´çº¿çš„ç›®æ ‡ã€‚åŒæ—¶ï¼Œé…åˆè¿™ä¸ªå›žæ”¶æœºåˆ¶ï¼Œåœ¨æ•´ä¸ªå†…å˜æ¡†æž¶ä¸Šè¿›è¡Œæ”¹è¿›ï¼Œä¼˜åŒ–匿åé¡µå’Œæ–‡ä»¶é¡µçš„å›žæ”¶æ•ˆçŽ‡ï¼Œå¹¶ä¸”ä½¿ä¸¤è€…çš„å›žæ”¶æ¯”ä¾‹æ›´åŠ åˆç†ä»¥é¿å…过度回收导致的refaulté—®é¢˜é€ æˆå¡é¡¿çŽ°è±¡ã€‚ **å…³è”线程组调度** å…³è”线程组(related thread group)æä¾›äº†å¯¹ä¸€ç»„关键线程调度优化的能力,支æŒå¯¹å…³é”®çº¿ç¨‹ç»„å•独进行负载统计和预测,并且设置优选CPU cluster功能,从而达到为组内线程选择最优CPUè¿è¡Œå¹¶ä¸”æ ¹æ®åˆ†ç»„负载选择åˆé€‚çš„CPU调频点è¿è¡Œã€‚ **CPUè½»é‡çº§éš”离** CPUè½»é‡çº§éš”离特性æä¾›äº†æ ¹æ®ç³»ç»Ÿè´Ÿè½½å’Œç”¨æˆ·é…ç½®æ¥é€‰æ‹©åˆé€‚çš„CPU进行动æ€éš”ç¦»çš„èƒ½åŠ›ã€‚å†…æ ¸ä¼šå°†è¢«éš”ç¦»CPUä¸Šçš„ä»»åŠ¡å’Œä¸æ–è¿ç§»åˆ°å…¶ä»–åˆé€‚çš„CPU上执行,被隔离的CPU会进入ilde状æ€ï¼Œä»¥æ¤æ¥è¾¾åˆ°åŠŸè€—ä¼˜åŒ–çš„ç›®æ ‡ã€‚åŒæ—¶æä¾›ç”¨æˆ·æ€çš„é…ç½®å’ŒæŸ¥è¯¢æŽ¥å£æ¥å®žçŽ°æ›´å¥½çš„ç³»ç»Ÿè°ƒä¼˜ã€‚ ### 使用指导 1. åˆå…¥HDFè¡¥ä¸ åœ¨kernel/linux/build仓ä¸ï¼ŒæŒ‰ç…§kernel.mkä¸HDF的补ä¸åˆå…¥æ–¹æ³•,åˆå…¥ä¸åŒå†…æ ¸ç‰ˆæœ¬å¯¹åº”çš„HDFå†…æ ¸è¡¥ä¸ï¼š ``` $(OHOS_BUILD_HOME)/drivers/hdf_core/adapter/khdf/linux/patch_hdf.sh $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(KERNEL_PATCH_PATH) $(DEVICE_NAME) ``` 2. åˆå…¥èŠ¯ç‰‡å¹³å°é©±åŠ¨è¡¥ä¸ ä»¥Hi3516DV300为例: 在kernel/linux/build仓ä¸ï¼ŒæŒ‰ç…§kernel.mkä¸çš„芯片组件所对应的patch路径规则åŠå‘½å规则,将对应的芯片组件patch放到对应路径下: ``` DEVICE_PATCH_DIR := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch DEVICE_PATCH_FILE := $(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch ``` 3. 修改自己所需è¦ç¼–译的config 在kernel/linux/build仓ä¸ï¼ŒæŒ‰ç…§kernel.mkä¸çš„芯片组件所对应的patch路径规则åŠå‘½å规则,将对应的芯片组件config放到对应路径下: ``` KERNEL_CONFIG_PATH := $(OHOS_BUILD_HOME)/kernel/linux/config/${KERNEL_VERSION}DEFCONFIG_FILE := $(DEVICE_NAME)_$(BUILD_TYPE)_defconfig ``` >  **须知:** > 由于OpenHarmony工程的编译构建æµç¨‹ä¸ä¼šæ‹·è´kernel/linux/linux-\*.\*的代ç 环境åŽè¿›è¡Œæ‰“è¡¥ä¸åŠ¨ä½œï¼Œåœ¨ä½¿ç”¨OpenHarmony的版本级编译命令å‰ï¼Œéœ€è¦kernel/linux/linux-\*.\*原代ç 环境。 > > æ ¹æ®ä¸åŒç³»ç»Ÿå·¥ç¨‹ï¼Œç¼–译完æˆåŽä¼šåœ¨out目录下的kernel目录ä¸ç”Ÿæˆå¯¹åº”å®žé™…ç¼–è¯‘çš„å†…æ ¸ï¼ŒåŸºäºŽæ¤ç›®å½•çš„å†…æ ¸ï¼Œè¿›è¡Œå¯¹åº”çš„config修改,将最åŽç”Ÿæˆçš„.config文件cp到config仓对应的路径文件里,å³å¯ç”Ÿæ•ˆã€‚