OpenHarmony(鸿蒙南向开发)——标准系统移植指南(二)Linux内核

移植概述

本文面向希望将OpenHarmony移植到三方芯片平台硬件的开发者,介绍一种借助三方芯片平台自带Linux内核的现有能力,快速移植OpenHarmony到三方芯片平台的方法。

移植到三方芯片平台的整体思路

内核态层和用户态层

为了更好的解释整个内核移植,首先需要介绍一些概念:

我们可以把OpenHarmony简单的分为

OpenHarmony = OpenHarmony内核态层 + OpenHarmony用户态层

其中OpenHarmony内核层就是上图的紫色部分,可以看到,它主要由内核本身(如Linux Kernel,LiteOS),和一些运行在内核态的一些特性组成,比如HDF等。

而OpenHarmony用户态层,在上图,就是紫色之外的部分。可以看到,由下往上看,它主要由系统服务层,框架层,应用层组成。在这儿我们将这三层整体称为“OpenHarmony用户态层”。

为什么这么区分呢?因为我们这篇文章主要是要讨论如何快速的把OpenHarmony移植到三方芯片平台上。而OpenHarmony的用户态层,整体来说和三方芯片平台的耦合度不高,移植较为方便。而内核态层中的内核本身以及HDF驱动框架等,和三方芯片平台的耦合度较高,是移植的重难点。我们先做这个区分,就是为了先把聚光灯打到我们最需要关注的OpenHarmony内核态层上,开始分析和解题。另外说明,本文只包含Linux内核的快速移植,不包含LiteOS的移植。

获得内核态层的两种方法

为了表述方便,我们在下文部分地方用“OH”代替“OpenHarmony”。

将OH内核态层继续分解

OH内核态层 = OH Linux内核 + OH内核态特性(可选特性或者必选特性,如必选特性HDF,今后的可选特性HMDFS等)

而OH Linux内核 = 标准LTS Linux 内核 + 三方SoC芯片平台代码 + OH内核态基础代码(支撑OH用户态层运行的最基础代码)

因此OH内核态层 = 标准LTS Linux 内核 + 三方SoC芯片平台代码 + OH内核态基础代码 + OH内核态特性(如HDF)

而将前两项组合,标准LTS Linux 内核 + 三方SoC芯片平台代码,其实就是一个三方Linux内核的基础组成。从上面的推导可以看出,OpenHarmony 内核态层其实能够由两种方法得到:

方法一:OH 内核态层 = 三方Linux内核 + OH内核态基础代码 + OH内核态特性(如HDF,今后的HMDFS等)

也就是直接借助三方Linux内核,再加上基础OH内核态基础代码、以及HDF等OH内核态特性。

方法二:OH 内核态层 = OH Linux内核 + OH内核态特性(如HDF,今后的HMDFS等)

也就是直接采用OHLinux内核,然后再加入OH的其他内核态特性。

当前方法二中OHLinux内核支持的三方芯片平台还不够丰富。为了能够响应三方开发者快速移植OpenHarmony的要求,下文会着重介绍方法一,即借助三方已有的Linux内核,来快速移植OpenHarmony。

借助已有Linux内核来移植OpenHarmony的流程

整个移植流程可以分为三步:

  1. 准备整体构建环境,包括将三方芯片平台的现有内核代码拷贝到OpenHarmony的整体编译环境下。
  2. OpenHarmony内核态基础代码的移植。
  3. OpenHarmony内核态必选特性(如HDF等)的移植。

详细步骤在接下来的章节中介绍。

移植到三方芯片平台的步骤

下面以树莓派3b (BCM2837) 为例,演示将OpenHarmony移植到树莓派的过程。

准备整体构建环境

  1. 将三方内核纳入OpenHarmony编译环境。 完整编译过一遍标准Hi3516DV300的
<think> Hmm, the user is asking specifically about CROSS JOIN in SQL Server, with a clear focus on usage, principles, and examples. Good—they've narrowed down from their initial broad JOIN question to a precise operator. First, let's cross-verify the references. Ref[1] mentions CROSS JOIN as a degenerate case of INNER JOIN without ON clause—that's foundational. Ref[3] has concrete code samples with temp tables, perfect for illustrating behavior. Ref[4] contrasts APPLY operators but isn't directly relevant here. Noticing the user included Chinese references but asked in English. Since my last response was bilingual, I'll maintain consistency but prioritize English technical terms (like "Cartesian product") with Chinese explanations where needed. Key technical points to emphasize: 1) The combinatorial explosion risk—must warn about 10x20 rows producing 200. 2) Legitimate use cases (combinatorics, test data) vs accidental misuse. 3) The absence of ON clause as syntactic signature. The temp table example from Ref[3] is ideal for demonstration. Should explicitly show how T1 (3 rows) x T2 (3 rows) = 9 rows. Might add a cautionary note about performance with real-world table sizes. User seems intermediate—they distinguish JOIN types but need practical implementation guidance. No need to re-explain basic JOIN concepts. Should however clarify CROSS vs CROSS APPLY since Ref[4] might cause confusion. Ah, and must fix the Ref[3] citation issue—the code came from there but I misattributed as [^1] in draft. Verifying exact row counts in sample data to prevent errors... </think> 以下是关于 SQL Server 中 `CROSS JOIN` 的详细说明,包含使用方法、原理及示例: --- ### **一、CROSS JOIN 原理** 1. **笛卡尔积(Cartesian Product)** `CROSS JOIN` 对两个表进行**全组合**,结果集行数 = 表1行数 × 表2行数 数学表达:$T_{\text{result}} = |T_1| \times |T_2|$ 例如:表A有$m$行,表B有$n$行 → 结果集有$m \times n$行 2. **无连接条件** 与 `INNER JOIN` 不同,`CROSS JOIN` **不需要** `ON` 子句指定连接条件[^1]。 --- ### **、使用方法** #### 语法格式 ```sql SELECT 列名 FROM 表1 CROSS JOIN 表2; ``` 或简写为: ```sql SELECT 列名 FROM 表1, 表2; -- 隐式CROSS JOIN(不推荐) ``` --- ### **三、示例演示** #### 示例数据准备 ```sql CREATE TABLE ##Department ( DeptID INT PRIMARY KEY, DeptName VARCHAR(20) ); INSERT INTO ##Department VALUES (1, 'Sales'), (2, 'IT'); CREATE TABLE ##Employee ( EmpID INT, EmpName VARCHAR(20) ); INSERT INTO ##Employee VALUES (101, 'Alice'), (102, 'Bob'); ``` #### 执行 CROSS JOIN ```sql SELECT E.EmpName, D.DeptName FROM ##Employee E CROSS JOIN ##Department D; ``` #### 结果集(4行): | EmpName | DeptName | |---------|----------| | Alice | Sales | | Alice | IT | | Bob | Sales | | Bob | IT | > ✅ **结果说明**:每位员工与每个部门组合(2员工 × 2部门 = 4行) --- ### **四、应用场景** 1. **生成组合数据** ```sql -- 生成数字序列(1-10)与字母序列(A-C)的组合 SELECT Numbers.n, Letters.letter FROM (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) Numbers(n) CROSS JOIN (VALUES ('A'),('B'),('C')) Letters(letter); ``` 2. **创建测试数据** 快速生成大量测试数据用于性能压测。 3. **计算所有可能性** 如电商平台计算商品与促销活动的所有组合。 --- ### **五、注意事项** 1. **性能风险** 大表交叉连接可能导致爆炸性增长($10^4 \times 10^4 = 10^8$ 行),需谨慎使用。 2. **与 INNER JOIN 区别** ```sql -- INNER JOIN(需ON条件) SELECT * FROM TableA INNER JOIN TableB ON A.key = B.key; -- CROSS JOIN(无条件) SELECT * FROM TableA CROSS JOIN TableB; ``` 3. **替代方案** 需要条件时使用 `INNER JOIN`,避免意外产生笛卡尔积。 --- ### **六、引用说明** - CROSS JOIN 无ON条件时等价于隐式笛卡尔积 [^1] - 实际案例参考临时表操作示例 [^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值