提交 7a20e234 编写于 作者: Mr-YX's avatar Mr-YX 提交者: Gitee

Merge branch 'master' of gitee.com:openharmony/docs into master

Signed-off-by: Mr-YX's avatarmr-yx <496043997@qq.com>
......@@ -3063,7 +3063,7 @@ audioCapturer.read(bufferSize, true, async(err, buffer) => {
if (!err) {
console.log("Success in reading the buffer data");
}
};
});
```
......
......@@ -2,10 +2,10 @@
## Basic Test Framework Environment
|Environment|Operating System|Linux Extended Component|Python|Python Plug-ins|NFS Server|HDC|
|------------|------------|------------|------------|------------|------------|------------|
|Version|Ubuntu 18.04 or later|libreadline-dev|3.7.5 or later|- pySerial 3.3 or later<br>- Paramiko 2.7.1 or later<br>- Setuptools 40.8.0 or later<br>- rsa4.0 or later|haneWIN NFS Server 1.2.50 or later, or NFS v4 or later| 1.1.0 or later|
|Description|Provides code build environment.|Plug-in used to read commands.|Language used by the test framework.|- pySerial: supports Python serial port communication. <br>- Paramiko: allows Python to use SSH. <br>- Setuptools: allows Python packages to be created and distributed easily. <br>- rsa: implements RSA encryption in Python.|Enables devices to be connected through the serial port.| A tool that enables devices to be connected through the HarmonyOS Device Connector (HDC).|
| Environment | Operating System | Linux Extended Component | Python | Python Plug-ins | NFS Server | HDC |
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
| Version | Ubuntu 18.04 or later | libreadline-dev | 3.7.5 or later | - pySerial 3.3 or later<br>- Paramiko 2.7.1 or later<br>- Setuptools 40.8.0 or later<br>- rsa4.0 or later | haneWIN NFS Server 1.2.50 or later, or NFS v4 or later | 1.1.0 or later |
| Description | Provides code build environment. | Plug-in used to read commands. | Language used by the test framework. | - pySerial: supports Python serial port communication. <br>- Paramiko: allows Python to use SSH. <br>- Setuptools: allows Python packages to be created and distributed easily. <br>- rsa: implements RSA encryption in Python. | Enables devices to be connected through the serial port. | A tool that enables devices to be connected through the HarmonyOS Device Connector (HDC). |
## Installation Process
1. Run the following command to install the Linux extended component libreadline:
......@@ -68,15 +68,14 @@
nfs-kernel-server is already the newest version (1:1.3.4-2.1ubuntu5.3).
0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
```
7. Install the HDC tool if the device supports HDC connections. For details about the installation process, see:
https://gitee.com/openharmony/developtools_hdc_standard/blob/master/README.md
7. Install the HDC tool if the device supports HDC connections. For details about the installation process, see [Readme](https://gitee.com/openharmony/developtools_hdc_standard/blob/master/README.md).
## Checking the Environment
| Check Item|Operation|Requirements|
| --- | --- | --- |
| Check whether Python is installed successfully.|Run the **python --version** command.|The Python version is 3.7.5 or later.|
| Check whether Python plug-ins are successfully installed.|Go to the **test/developertest** directory and run **start.bat** or **start.sh**.| The **>>>** prompt is displayed.|
|Check the NFS server status (for the devices that support only serial port output).|Log in to the development board through the serial port and run the **mount** command to mount the NFS.|The file directory can be mounted.|
|Check whether the HDC tool is successfully installed.|Run the **hdc_std -v** command.|The HDC version is 1.1.0 or later.|
| Check Item | Operation | Expected Result |
| --- | --- | --- |
| Whether Python is successfully installed | Run the **python --version** command. | The Python version is 3.7.5 or later. |
| Whether Python plug-ins are successfully installed | Go to the **test/developertest** directory and run **start.bat** or **start.sh**. | The **>>>** prompt is displayed. |
| NFS server status (for the devices that support only serial port output) | Log in to the development board through the serial port and run the **mount** command to mount the NFS. | The file directory can be mounted. |
| Whether HDC tool is successfully installed | Run the **hdc_std -v** command. | The HDC version is 1.1.0 or later. |
......@@ -27,7 +27,15 @@
- 语言:必选,使用2个或3个小写英文字母表示(可参考ISO-639标准),例如英文使用“en”表示,中文使用“zh”表示。
- 脚本:可选,使用4个英文字母表示,其中首字母需要大写,后面3个使用小写字母(可参考ISO-15924)。例如,中文繁体使用脚本“Hant”表示,中文简体使用脚本“Hans”表示。
- 国家或地区:可选,使用两个大写字母表示(可参考ISO-3166),例如中国使用“CN”表示,美国使用“US”表示;
- 扩展参数:可选,由key和value两部分组成,目前支持以下扩展参数(可参考BCP 47扩展)。各个扩展参数之间没有严格的顺序,使用“-key-value”的格式书写。扩展参数整体使用“-u”连接到语言、脚本、地区后面。例如“zh-u-nu-latn-ca-chinese”表示使用“latn”数字系统,使用“chinese”日历系统、“latn”数字系统。扩展参数也可以通过第二个参数传入。
- 扩展参数:可选,由key和value两部分组成,目前支持以下扩展参数(可参考BCP 47扩展)。各个扩展参数之间没有严格的顺序,使用“-key-value”的格式书写。扩展参数整体使用“-u”连接到语言、脚本、地区后面。例如“zh-u-nu-latn-ca-chinese”表示使用“latn”数字系统,“chinese”日历系统。扩展参数也可以通过第二个参数传入。
| 扩展参数ID | 扩展参数说明 |
| -------- | -------- |
| ca | 表示日历系统 |
| co | 表示排序规则 |
| hc | 表示守时惯例 |
| nu | 表示数字系统 |
| kn | 表示字符串排序、比较时是否考虑数字的实际值 |
| kf | 表示字符串排序、比较时是否考虑大小写 |
| 扩展参数ID | 扩展参数说明 |
| -------- | -------- |
......
......@@ -25,6 +25,6 @@ import Want from '@ohos.application.Want';
| type | 只读 | string | 否 | 表示MIME type类型描述,比如:"text/plain" 、 "image/*"等。 |
| flags | 只读 | number | 否 | 表示处理Want的方式。默认传数字,具体参考:[flags说明](js-apis-featureAbility.md#flags说明)。 |
| action | 只读 | string | 否 | 表示action选项描述。 |
| parameters | 只读 | {[key: string]: any} | 否 | 表示WantParams描述。 |
| parameters | 只读 | {[key: string]: any} | 否 | 表示WantParams描述,由开发者自行决定传入的键值对。默认会携带以下key值:<br>ohos.aafwk.pacallerPid 表示拉起方的pid。<br>ohos.aafwk.param.callerToken 表示拉起方的token。<br>ohos.aafwk.param.callerUid 表示发起方的uid。[Bundle](js-apis-Bundle.js)模块中userId参数,可用于获取应用信息、包信息等,具体参考:[Bundle](js-apis-Bundle.js)。 |
| entities | 只读 | Array\<string> | 否 | 表示entities相关描述。 |
| moduleName<sup>9+</sup> | 只读 | string | 否 | 表示待启动的Ability所属的模块(module)。同一应用的不同hap的组件可能重名,仅通过BundleName和AbilityName无法区分时,可以通过设置moduleName加以区分,以匹配到指定的Ability。 | |
......@@ -3085,7 +3085,7 @@ audioCapturer.read(bufferSize, true, async(err, buffer) => {
if (!err) {
console.log("Success in reading the buffer data");
}
};
});
```
......
# Bundle模块(JS端SDK接口)
# 默认应用管理
本模块提供查询默认应用的能力,支持查询当前应用是否是默认应用。
......@@ -39,7 +39,7 @@ isDefaultApplication(type: string): Promise\<boolean>
| 名称 | 类型 | 必填 | 描述 |
| ----------- | ------ | ---- | --------------------------------------- |
| type | string | 是 | 要查询的默认应用名称,取[ApplicationType](#defaultappmgrapplicationtype)中的值。 |
| type | string | 是 | 要查询的应用类型,取[ApplicationType](#defaultappmgrapplicationtype)中的值。 |
**返回值:**
......@@ -70,8 +70,8 @@ isDefaultApplication(type: string, callback: AsyncCallback\<boolean>): void
| 名称 | 类型 | 必填 | 描述 |
| ----------- | ------------------------------- | ---- | --------------------------------------- |
| type | string | 是 | 要查询的默认应用名称,取[ApplicationType](#defaultappmgrapplicationtype)中的值。 |
| callback | AsyncCallback<boolean> | 是 | 程序启动作为入参的回调函数,返回当前应用是否是默认应用,true表示是默认应用,false表示不是默认应用。 |
| type | string | 是 | 要查询的应用类型,取[ApplicationType](#defaultappmgrapplicationtype)中的值。 |
| callback | AsyncCallback\<boolean> | 是 | 程序启动作为入参的回调函数,返回当前应用是否是默认应用,true表示是默认应用,false表示不是默认应用。 |
**示例:**
......
......@@ -327,7 +327,12 @@ SystemCapability.Ability.Form
| --------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| want | [Want](js-apis-application-Want.md) | 是 | abilityName: 目标卡片ability<br/>parameters:<br/>"ohos.extra.param.key.form_dimension"<br/>"ohos.extra.param.key.form_name"<br/>"ohos.extra.param.key.module_name" |
| formBindingData | [FormBindingData](js-apis-formbindingdata.md#formbindingdata) | 否 | 用于创建卡片的数据 |
| callback | AsyncCallback&lt;string&gt; | 是 | callback形式返回卡片标识 |
**返回值:**
| 类型 | 说明 |
| :------------ | :---------------------------------- |
| Promise&lt;string&gt; | Promise实例,用于返回卡片标识。 |
**示例:**
......
......@@ -115,14 +115,13 @@ getSystemLanguage(): string
setSystemLanguage(language: string): boolean
设置系统语言。
设置系统语言。<br>
该接口为系统接口。
**需要权限**:ohos.permission.UPDATE_CONFIGURATION
**系统能力**:SystemCapability.Global.I18n
**系统API**: 该接口为系统接口,三方应用不支持调用。
**参数:**
| 参数名 | 类型 | 说明 |
| -------- | ------ | ----- |
......@@ -209,14 +208,13 @@ getSystemRegion(): string
setSystemRegion(region: string): boolean
设置系统区域。
设置系统区域。<br>
该接口为系统接口。
**需要权限**:ohos.permission.UPDATE_CONFIGURATION
**系统能力**:SystemCapability.Global.I18n
**系统API**: 该接口为系统接口,三方应用不支持调用。
**参数:**
| 参数名 | 类型 | 说明 |
| ------ | ------ | ----- |
......@@ -256,14 +254,13 @@ getSystemLocale(): string
setSystemLocale(locale: string): boolean
设置系统Locale。
设置系统Locale。<br>
该接口为系统接口。
**需要权限**:ohos.permission.UPDATE_CONFIGURATION
**系统能力**:SystemCapability.Global.I18n
**系统API**: 该接口为系统接口,三方应用不支持调用。
**参数:**
| 参数名 | 类型 | 说明 |
| ------ | ------ | --------------- |
......@@ -1547,4 +1544,137 @@ getOffset(date?: number): number
```
var timezone = i18n.getTimeZone();
timezone.getOffset(1234567890);
```
### getAvailableIDs<sup>9+</sup>
static getAvailableIDs(): Array&lt;string&gt;
获取系统支持的时区ID。
**系统能力**:SystemCapability.Global.I18n
**返回值:**
| 类型 | 说明 |
| ------ | ----------------------- |
| Array&lt;string&gt; | 系统支持的时区ID列表 |
**示例:**
```
var ids = i18n.TimeZone.getAvailableIDs();
```
### getAvailableZoneCityIDs<sup>9+</sup>
static getAvailableZoneCityIDs(): Array&lt;string&gt;
获取系统支持的时区城市ID。
**系统能力**:SystemCapability.Global.I18n
**返回值:**
| 类型 | 说明 |
| ------ | ----------------------- |
| Array&lt;string&gt; | 系统支持的时区城市ID列表 |
**示例:**
```
var cityIDs = i18n.TimeZone.getAvailableZoneCityIDs();
```
### getCityDisplayName<sup>9+</sup>
static getCityDisplayName(cityID: string, locale: string): string
获取某时区城市在locale下的本地化显示。
**系统能力**:SystemCapability.Global.I18n
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | ----- |
| cityID | string | 是 | 时区城市ID |
| locale | string | 是 | 区域ID |
**返回值:**
| 类型 | 说明 |
| ------ | ----------------------- |
| string | 时区城市在locale下的本地化显示 |
**示例:**
```
var displayName = i18n.TimeZone.getCityDisplayName("Shanghai", "zh-CN");
```
### getTimezoneFromCity<sup>9+</sup>
static getTimezoneFromCity(cityID: string): TimeZone
创建某时区城市对应的时区对象。
**系统能力**:SystemCapability.Global.I18n
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | ----- |
| cityID | string | 是 | 时区城市ID |
**返回值:**
| 类型 | 说明 |
| ------ | ----------------------- |
| TimeZone | 时区城市对应的时区对象 |
**示例:**
```
var timezone = i18n.TimeZone.getTimezoneFromCity("Shanghai");
```
## i18n.setUsingLocalDigit<sup>9+</sup>
setUsingLocalDigit(flag: boolean): boolean
设置是否打开本地数字开关。<br>
该接口为系统接口。
**需要权限**:ohos.permission.UPDATE_CONFIGURATION
**系统能力**:SystemCapability.Global.I18n
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | ----- |
| flag | boolean | 是 | true表示打开本地数字开关,false表示关闭本地数字开关。 |
**返回值:**
| 类型 | 说明 |
| -------- | ------------ |
| boolean | true表示本地数字开关设置成功,false表示本地数字开关设置失败。 |
**示例:**
```
var status = i18n.setUsingLocalDigit(true);
```
## i18n.getUsingLocalDigit<sup>9+</sup>
getUsingLocalDigit(): boolean
获取系统当前是否打开本地数字开关。
**系统能力**:SystemCapability.Global.I18n
**返回值:**
| 类型 | 说明 |
| -------- | ------------ |
| boolean | true表示系统当前已打开本地数字开关,false表示系统当前未打开本地数字开关。 |
**示例:**
```
var status = i18n.getUsingLocalDigit();
```
\ No newline at end of file
......@@ -232,7 +232,7 @@ image.createPixelMap(color, opts)
stride: 8,
region: { size: { height: 1, width: 2 }, x: 0, y: 0 }
}
var bufferArr = new Uint8Array(area.pixels);
let bufferArr = new Uint8Array(area.pixels);
for (var i = 0; i < bufferArr.length; i++) {
bufferArr[i] = i + 1;
}
......@@ -263,18 +263,22 @@ writePixels(area: PositionArea, callback: AsyncCallback\<void>): void
| 参数名 | 类型 | 必填 | 说明 |
| --------- | ------------------------------ | ---- | ------------------------------ |
| area | [PositionArea](#positionarea7) | 是 | 区域,根据区域写入。 |
| callback: | AsyncCallback\<void> | 是 | 获取回调,失败时返回错误信息。 |
| callback: | AsyncCallback\<void> | 是 | 获取回调,失败时error会返回错误信息。 |
**示例:**
```js
pixelmap.writePixels(Area, () => {
const readArea = {
pixels: new ArrayBuffer(20),
offset: 0,
stride: 8,
region: { size: { height: 1, width: 2 }, x: 0, y: 0 },
}
pixelmap.writePixels(Area, (error) => {
if (error!=undefined) {
console.info('writePixels failed.');
} else {
const readArea = {
pixels: new ArrayBuffer(20),
offset: 0,
stride: 8,
region: { size: { height: 1, width: 2 }, x: 0, y: 0 },
}
}
})
```
......@@ -890,7 +894,7 @@ packing(source: ImageSource, option: PackingOption, callback: AsyncCallback\<Arr
**示例:**
```js
let packOpts = { format:["image/jpeg"], quality:98 };
let packOpts = { format:"image/jpeg", quality:98 };
imagePackerApi.packing(ImageSourceApi, packOpts, data => {})
```
......@@ -1535,7 +1539,7 @@ PixelMap的初始化选项。
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ------- | ------ | ---- | ---- | -------------- |
| format | string | 是 | 是 | 目标格式。 |
| quality | number | 是 | 是 | 目标图片质量。 |
| quality | number | 是 | 是 | JPEG编码中设定输出图片质量的参数,取值范围为1-100。 |
## GetImagePropertyOptions<sup>7+</sup>
......
......@@ -885,11 +885,7 @@ once(type: SensorType.SENSOR_TYPE_ID_PROXIMITY, callback: Callback&lt;ProximityR
**示例:**
```js
sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY, function(error, data) {
if (error) {
console.error("Subscription failed. Error code: " + error.code + "; message: " + error.message);
return;
}
sensor.once(sensor.SensorType.SENSOR_TYPE_ID_PROXIMITY, function(data) {
console.info('Distance: ' + data.distance);
}
);
......@@ -1349,8 +1345,6 @@ off(type: SensorType.SENSOR_TYPE_ID_HUMIDITY, callback?: Callback&lt;HumidityRes
取消订阅传感器数据。
**需要权限**:ohos.permission.READ_HEALTH_DATA,该权限为系统权限
**系统能力**:SystemCapability.Sensors.Sensor
**参数:**
......@@ -1403,8 +1397,6 @@ sensor.off(sensor.SensorType.SENSOR_TYPE_ID_LINEAR_ACCELERATION, callback);
取消订阅传感器数据。
**需要权限**:ohos.permission.ACCELEROMETER,该权限为系统权限
**系统能力**:SystemCapability.Sensors.Sensor
**参数:**
......@@ -1486,6 +1478,8 @@ off(type: SensorType.SENSOR_TYPE_ID_PEDOMETER, callback?: Callback&lt;PedometerR
取消订阅传感器数据。
**需要权限**:ohos.permission.ACTIVITY_MOTION
**系统能力**:SystemCapability.Sensors.Sensor
**参数:**
......@@ -1898,7 +1892,6 @@ getAngleModify(currentRotationMatrix: Array&lt;number&gt;, preRotationMatrix: Ar
err.message);
return;
}
console.info("SensorJsAPI--->Successed to get getAngleModifiy interface get data: " + data.x);
for (var i=0; i < data.length; i++) {
console.info("data[" + i + "]: " + data[i]);
}
......@@ -1966,7 +1959,6 @@ createRotationMatrix(rotationVector: Array&lt;number&gt;, callback: AsyncCallbac
err.message);
return;
}
console.info("SensorJsAPI--->Successed to get createRotationMatrix interface get data: " + data.x);
for (var i=0; i < data.length; i++) {
console.info("data[" + i + "]: " + data[i]);
}
......@@ -2033,7 +2025,6 @@ createQuaternion(rotationVector: Array&lt;number&gt;, callback: AsyncCallback&lt
err.message);
return;
}
console.info("SensorJsAPI--->Successed to get createQuaternion interface get data: " + data.x);
for (var i=0; i < data.length; i++) {
console.info("data[" + i + "]: " + data[i]);
}
......@@ -2168,7 +2159,6 @@ createRotationMatrix(gravity: Array&lt;number&gt;, geomagnetic: Array&lt;number&
err.message);
return;
}
console.info("SensorJsAPI--->Successed to get createRotationMatrix interface get data: " + data.x);
for (var i=0; i < data.length; i++) {
console.info("data[" + i + "]: " + data[i])
}
......
......@@ -81,7 +81,8 @@ push(param: PushParameters, callback: AsyncCallback&lt;void&gt;): void
| extraData | KVObject | 否 | 附加数据值。 |
- 示例
[组件使用者调用接口](#组件使用者调用接口)示例。
[Plugin组件提供方](#组件提供方)示例。
## request
......@@ -117,7 +118,8 @@ request(param: RequestParameters, callback: AsyncCallback&lt;RequestCallbackPara
- 示例
[组件使用者调用接口](#组件使用者调用接口)示例。
[Plugin组件使用方](#组件使用方)示例。
## on
......@@ -146,22 +148,23 @@ on(eventType: string, callback: OnPushEventCallback | OnRequestEventCallback): v
| extraData | KVObjec | 附加数据。 |
- 示例
[组件使用者调用接口](#组件使用者调用接口)示例。
[Plugin组件工具](#Plugin组件工具)示例。
## 示例
### 使用PluginComponent组件
### 组件使用方
```
import plugin from "../../test/plugin_component.js"
import plugincomponent from '@ohos.plugincomponent'
```ts
//PluginUserExample.ets
import plugin from "plugin_component.js"
@Entry
@Component
struct PluginComponentExample {
struct PluginUserExample {
@StorageLink("plugincount") plugincount: Object[] = [
{ source: 'plugincomponent1', ability: 'com.example.plugin' },
{ source: 'plugintemplate', ability: 'com.example.myapplication' },
......@@ -172,32 +175,23 @@ struct PluginComponentExample {
Text('Hello World')
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button('Push')
.fontSize(50)
.width(400)
.height(100)
.onClick(() => {
plugin.Push()
console.log("Button('Push')")
})
.margin({ top: 20 })
Button('Request1')
.fontSize(50)
Button('Register Request Listener')
.fontSize(30)
.width(400)
.height(100)
.margin({ top: 20 })
.onClick(() => {
plugin.Request1()
console.log("Button('Request1')")
.margin({top:20})
.onClick(()=>{
plugin.onListener()
console.log("Button('Register Request Listener')")
})
Button('Request2')
Button('Request')
.fontSize(50)
.width(400)
.height(100)
.margin({ top: 20 })
.onClick(() => {
plugin.Request2()
console.log("Button('Request2')")
plugin.Request()
console.log("Button('Request')")
})
ForEach(this.plugincount, item => {
PluginComponent({
......@@ -214,15 +208,58 @@ struct PluginComponentExample {
}
.width('100%')
.height('100%')
}
}
```
### 组件提供方
### 组件使用者调用接口
```ts
//PluginProviderExample.ets
import plugin from "plugin_component.js"
@Entry
@Component
struct PluginProviderExample {
@State message: string = 'no click!'
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Button('Register Push Listener')
.fontSize(30)
.width(400)
.height(100)
.margin({top:20})
.onClick(()=>{
plugin.onListener()
console.log("Button('Register Push Listener')")
})
Button('Push')
.fontSize(30)
.width(400)
.height(100)
.margin({top:20})
.onClick(()=>{
plugin.Push()
this.message = "Button('Push')"
console.log("Button('Push')")
})
Text(this.message)
.height(150)
.fontSize(30)
.padding(5)
.margin(5)
}.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
}
}
```
import pluginComponentManager from '@ohos.plugincomponent'
### Plugin组件工具
```js
//plugin_component.js
import pluginComponentManager from '@ohos.pluginComponent'
function onPushListener(source, template, data, extraData) {
console.log("onPushListener template.source=" + template.source)
......@@ -239,14 +276,23 @@ function onPushListener(source, template, data, extraData) {
console.log("onPushListener extraData=" + JSON.stringify(extraData))
}
function onRequestListener(source, name, data)
{
console.log("onRequestListener name=" + name);
console.log("onRequestListener data=" + JSON.stringify(data));
return {template:"plugintemplate", data:data};
}
export default {
//register listener
onListener() {
pluginComponentManager.on("push", onPushListener)
pluginComponentManager.on("request", onRequestListener)
},
Request() {
// 组件使用者主动发送事件
pluginComponentManager.request({
Push() {
// 组件提供方主动发送事件
pluginComponentManager.push(
{
want: {
bundleName: "com.example.myapplication",
abilityName: "com.example.myapplication.MainAbility",
......@@ -256,43 +302,19 @@ export default {
"key_1": "plugin component test",
"key_2": 34234
},
jsonPath: "assets/js",
extraData: {
"extra_str": "this is push event"
},
jsonPath: "",
},
(err, data) => {
console.log("request_callback1: componentTemplate.ability=" + data.componentTemplate.ability)
console.log("request_callback1: componentTemplate.source=" + data.componentTemplate.source)
var jsonObject = JSON.parse(data.componentTemplate.source)
console.log("request_callback1:source json object" + jsonObject)
var jsonArry = jsonObject.ExternalComponent
for (var i in jsonArry) {
console.log(jsonArry[i])
}
console.log("request_callback1:source json string" + JSON.stringify(jsonObject))
console.log("request_callback1: data=" + JSON.stringify(data.data))
console.log("request_callback1: extraData=" + JSON.stringify(data.extraData))
console.log("push_callback: push ok!");
}
)
}
}
// 组件提供者使用接口示例
import pluginComponentManager from '@ohos.plugincomponent'
function onRequestListener(source, name, data) {
console.log("onRequestListener name=" + name)
console.log("onRequestListener data=" + JSON.stringify(data))
return { template: "plugintemplate", data: data }
}
export default {
//register listener
onListener() {
pluginComponentManager.on("request", onRequestListener)
},
Push() {
// 组件提供者主动发送事件
pluginComponentManager.push(
{
Request() {
// 组件使用方主动发送事件
pluginComponentManager.request({
want: {
bundleName: "com.example.myapplication",
abilityName: "com.example.myapplication.MainAbility",
......@@ -302,17 +324,22 @@ export default {
"key_1": "plugin component test",
"key_2": 34234
},
extraData: {
"extra_str": "this is push event"
},
jsonPath: "assets/js",
jsonPath: "",
},
(err, data) => {
console.log("push_callback1: componentTemplate.ability=" + data.componentTemplate.ability)
console.log("push_callback1: componentTemplate.source=" + data.componentTemplate.source)
console.log("push ok!")
console.log("request_callback: componentTemplate.ability=" + data.componentTemplate.ability)
console.log("request_callback: componentTemplate.source=" + data.componentTemplate.source)
var jsonObject = JSON.parse(data.componentTemplate.source)
console.log("request_callback:source json object" + jsonObject)
var jsonArry = jsonObject.ExternalComponent
for (var i in jsonArry) {
console.log(jsonArry[i])
}
console.log("request_callback:source json string" + JSON.stringify(jsonObject))
console.log("request_callback: data=" + JSON.stringify(data.data))
console.log("request_callback: extraData=" + JSON.stringify(data.extraData))
}
)
},
}
}
```
......@@ -11,7 +11,7 @@
| 名称 | 参数类型 | 默认值 | 描述 |
| -------- | -------- | -------- | -------- |
| motionPath | {<br/>path:&nbsp;string,<br/>from?:&nbsp;number,<br/>to?:&nbsp;number,<br/>rotatable?:&nbsp;boolean<br/>}<br/>>&nbsp;&nbsp;**说明:**<br/>>&nbsp;path中支持通过start和end进行起点和终点的替代,如:<br/>>&nbsp;<br/>>&nbsp;'Mstart.x&nbsp;start.y&nbsp;L50&nbsp;50&nbsp;Lend.x&nbsp;end.y&nbsp;Z'。 | {<br/>"",<br/>0.0,<br/>1.0,<br/>false<br/>} | 设置组件的运动路径,入参说明如下:<br/>-&nbsp;path:位移动画的运动路径,使用svg路径字符串。<br/>-&nbsp;from:运动路径的起点,默认为0.0。<br/>-&nbsp;to:运动路径的终点,默认为1.0。<br/>-&nbsp;rotatable:是否跟随路径进行旋转。 |
| motionPath | {<br/>path:&nbsp;string,<br/>from?:&nbsp;number,<br/>to?:&nbsp;number,<br/>rotatable?:&nbsp;boolean<br/>}<br/>**说明:**<br/>path中支持通过start和end进行起点和终点的替代,如:<br/>'Mstart.x&nbsp;start.y&nbsp;L50&nbsp;50&nbsp;Lend.x&nbsp;end.y&nbsp;Z'| {<br/>"",<br/>0.0,<br/>1.0,<br/>false<br/>} | 设置组件的运动路径,入参说明如下:<br/>-&nbsp;path:位移动画的运动路径,使用svg路径字符串。<br/>-&nbsp;from:运动路径的起点,默认为0.0。<br/>-&nbsp;to:运动路径的终点,默认为1.0。<br/>-&nbsp;rotatable:是否跟随路径进行旋转。 |
## 示例
......
......@@ -42,7 +42,7 @@ OpenHarmony提供了九种后台模式,供需要在后台做长时任务的业
**表1** 长时任务种类
| BackgroundMode | 说明 | 通知栏显示提示 | 备注 |
| 后台模式 | 说明 | 通知栏显示提示 | 备注 |
| -------- | -------- | -------- | -------- |
| dataTransfer | 通过网络/对端设备进行数据下载、备份、分享、传输等 | 正在运行数据传输任务 | - |
| audioPlayback | 音频输出 | 正在运行音频播放任务 | - |
......
......@@ -6,14 +6,14 @@
| ---- | --------------------------------- | ------------------------------------------------------------ |
| 1 | 客户化写作基本要求 | **写作中,请变身开发者,对于开发者使用该API时所需的使用场景、参数选取原则、开发建议/经验、示例等信息进行清晰描述,达到指导开发者顺利使用本API进行开发的目标。** |
| 2 | | **所有的写作说明,在完成写作后,都要删除。** |
| 3 | 上传路径 | markdown文件:docs/zh-cn/application-dev/reference/apis<br>图片路径:docs/zh-cn/application-dev/reference/apis/figures,并在markdown文件中通过路径`![](figures/xxx.jpg)`引用。 |
| 3 | 上传路径 | markdown文件:docs/zh-cn/application-dev/reference/apis<br>图片路径:docs/zh-cn/application-dev/reference/apis/figures,并在markdown文件中通过路径`![](figures/xxx.jpg)``![](figures/xxx.png)`引用。 |
| 4 | 文件命名 | 一个d.ts对应一个js api文档,文件名称应与模块名称保持一致,格式为:**js-apis-模块名.md**<br/>示例:<br/>媒体@ohos.multimedia.audio,文件命名为:js-apis-audio.md<br/>电话@ohos.telephony.sms,文件命名为:js-apis-sms.md |
| 5 | 目录修改 | 新增文件,需要修改对应的Readme,即`docs/zh-cn/application-dev/reference/apis/Readme-CN.md`。 |
| 6 | 文档结构 | - 模块说明<br/>- 起始版本说明<br/>- 导入模块/使用说明<br/>- 接口(属性、方法、枚举、自定义类型)<br/> 描述顺序和代码保持一致,如果某些接口具有逻辑顺序,请注意排列。 |
| 7 | 接口版本说明 | 1. 每个模块要有起始版本说明,使用引用语法“>”对接口的起始版本进行说明。接口没有标记的,默认与模块同一个起始版本。<br/>2. 已有模块新增接口使用\<sup>标签标记对应版本号。<br/> 示例:API 6已有的模块,在API 7新增了一个属性字段,则在属性后加标记,即newAttribute<sup>7+</sup><br/> 写法:`<sup>7+</sup>`<br/> 如果新增了一个方法,则在方法标题后增加标记,即 sim.getSimIccId<sup>7+</sup>,interface、class、枚举等同理。 |
| 8 | 废弃接口说明 | 废弃内容不能直接删去,在废弃内容后面加标注deprecated,并使用“>”引用语法建议使用的替代方式,加上对应的链接。<br/>示例:abandonmentMethod<sup>(deprecated) </sup><br/>> 从API Version 7 开始不再维护,建议使用[newMethod]\(#newMethod)替代。 |
| 7 | 接口版本说明 | 1. 每个模块要有起始版本说明,使用引用语法“>”对接口的起始版本进行说明。接口没有标记的,默认与模块同一个起始版本。<br/>2. 已有模块新增接口使用\<sup>标签标记对应版本号。写法:`<sup>版本号+</sup>`<br/> 例如`<sup>7+</sup>`<br/> 示例:API 6已有的模块,在API 7新增了一个属性字段,则在属性后加标记,即newAttribute<sup>7+</sup><br/>如果新增了一个方法,则在方法标题后增加标记,即 sim.getSimIccId<sup>7+</sup>,interface、class、枚举等同理。 |
| 8 | 废弃接口说明 | 废弃内容不能直接删去,在废弃内容后面加标注deprecated,并使用“>”引用语法建议使用的替代方式,加上对应的链接。<br/>示例:abandonmentMethod<sup>(deprecated) </sup><br/>> 从API Version 7 开始不再维护,建议使用[newMethod]\(#newmethod)替代。 |
| 9 | 权限说明 | 与代码保持一致,下沉到各个方法、枚举、属性字段中。<br/>1. 如果仅系统应用可申请,格式:<br/> **需要权限:** ohos.permission.xxxx,仅系统应用可用。<br/>2. 如果该权限所有应用可申请,格式:<br/> **需要权限:** ohos.permission.xxxx <br/>3. 如果该接口涉及多个权限,则采用“和、或”进行分割,格式:<br/> **需要权限:** ohos.permission.A 和 ohos.permission.B<br/> **需要权限:** ohos.permission.A 或 ohos.permission.B |
| 10 | @syscap | 1. 每个方法都需要进行描述,格式:<br/> **系统能力**:SystemCapability.xxx.xxx<br/>2. 每个表格(属性、枚举、常量、变量)可统一进行说明,分两种情况:<br/> 1)每个表格下系统能力无差异的,同方法的写法:<br/> **系统能力**:SystemCapability.xxx.xxx<br/> 2)有差异的:<br/> 以下各项对应的系统能力有所不同,详见下表。<br/> 然后在每一个表格项里进行描述。 |
| 10 | @syscap | 1. 每个方法都需要进行描述,格式:<br/> **系统能力**:SystemCapability.xxx.xxx<br/>2. 每个表格(属性、枚举、常量、变量)可统一进行说明,分两种情况:<br/> 1)每个表格下系统能力无差异的,同方法的写法:<br/> **系统能力**:SystemCapability.xxx.xxx<br/> 2)有差异的:在每一个表格项里进行描述。 |
| 11 | @system api | 1. 如果某个模块全部接口均为system api,则在模块开头的版本说明下一行,增加:<br/> - 本模块接口为系统接口。<br/>2. 如果某个接口为system api,仅供OEM厂商使用,则需要在描述中增加:<br/> 此接口为系统接口。 |
| 12 | @FAModelOnly<br/>@StageModelOnly | 1. 如果某个模块均只针对某模型实现,则在模块开头的版本说明下一行,增加:<br/> - 本模块接口仅可在FA模型/Stage模型下使用。<br/>2. 如果某个接口只针对某模型实现,则需要在描述中增加:<br/> 此接口仅可在FA模型/Stage模型下使用。 |
| 13 | 异步接口说明(callback、Promise) | 对于callback、Promise在方法描述、参数说明、返回值说明的具体描述要求如下:<br/>**callback**的固定句式:<br/>方法介绍:xxx(方法描述)。使用callback异步回调。<br/>参数说明:<br/>**callback\<boolean>**:回调函数。返回true表示xxx;返回false表示xxx。<br/>**callback\<Object>**:回调函数,返回xxx。例如”回调函数,返回音频采集器对象。“<br/>**AsyncCallback\<void>**:回调函数。当具体的操作(视具体接口功能描述)成功,err为undefined,否则为错误对象。<br/>**AsyncCallback\<Object x>**:回调函数。当具体的操作(视具体接口功能描述)成功,err为undefined,data为获取到的Object x;否则为错误对象。<br/>**Promise**的固定句式:<br/>方法介绍:xxx(方法描述)。使用Promise异步回调。<br/>参数说明:<br/>**Promise\<boolean>**:Promise对象。返回true表示xxx;返回false表示xxx。<br/>**Promise\<Object>**:Promise对象,返回xxx。例如”Promise对象,返回音频采集器对象。“<br/>**Promise\<void>**:Promise对象。无返回结果的Promise对象。 |
......@@ -274,7 +274,7 @@ import call from '@ohos.telephony.call';
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ------------ | ------------------- | ---- | ---- | ------------------------------------------------------------ |
| parameterUrl | string | 是 | 是 | 媒体输出URI。支持: 1. 协议类型为“internal”的相对路径,示例如下: 临时目录:internal://cache/test.mp4 2. 文件的绝对路径,示例如下: file:///data/data/ohos.xxx.xxx/files/test.mp4 |
| parameterUrl | string | 是 | 是 | 媒体输出URI。支持: <br/>1. 协议类型为“internal”的相对路径,示例如下: 临时目录:internal://cache/test.mp4 <br/>2. 文件的绝对路径,示例如下: file:///data/data/ohos.xxx.xxx/files/test.mp4 |
| parameterOne | [CustomEnum](#枚举) | 是 | 是 | 属性描述,要求与参数说明类似。 |
## 变更日志
......
......@@ -101,7 +101,7 @@ OpenHarmony参考机械装配领域的零部件的概念将系统能力抽象为
| ------------ | ------------------------------------------------------------ |
| 英文名称 | 名词形式,需体现部件的功能,在系统内全局唯一,不超过63个有效英文字符,使用小写加下划线的内核风格命名,例如:unix_like。 |
| 中文名称 | 名词形式,需体现部件的功能,不超过16个中文字符,不建议中英文混合。 |
| 子系统 | 部件归属的子系统 |
| 子系统 | 部件归属的子系统 |
| 功能描述 | 一句话简要描述部件功能,100字以内。 |
| 可配置特性 | 部件对外可配置的特性。 |
| 适用系统类型 | 部件适用的系统类型:小型、轻量和标准,可以同时支持多种。 |
......
此差异已折叠。
......@@ -32,16 +32,16 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按
**表 1** 轻量和小型系统开发指导(参考内存<128MiB)
| 学习路径 | 开发者业务 | 相关文档 |
| -------- | -------- | -------- |
| 了解OpenHarmony | 整体认知OpenHarmony | -&nbsp;[OpenHarmony概述](https://gitee.com/openharmony)<br/>-&nbsp;[术语](../glossary.md) |
| 获取开发资源 | 准备开发前相关资源 | -&nbsp;[获取源码](get-code/sourcecode-acquire.md)<br/>-&nbsp;[获取工具](get-code/gettools-acquire.md) |
| 快速入门 | 快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行 | -&nbsp;[轻量和小型系统快速入门](quick-start/quickstart-ide-lite-overview.md) |
| 基础能力使用 | 使用OpenHarmony提供的基础能力 | -&nbsp;[轻量系统内核开发指南](kernel/kernel-mini-overview.md)<br/>-&nbsp;[小型系统内核开发指南](kernel/kernel-small-overview.md)<br/>-&nbsp;[驱动开发指南](driver/driver-hdf-overview.md)<br/>-&nbsp;[子系统开发指南](subsystems/subsys-build-mini-lite.md)<br/>-&nbsp;[安全指南](security/security-guidelines-overall.md)<br/>-&nbsp;[隐私保护](security/security-privacy-protection.md) |
| 进阶开发 | 结合系统能力开发智能设备 | -&nbsp;[WLAN连接类产品](guide/device-wlan-led-control.md)<br/>-&nbsp;[无屏摄像头类产品](guide/device-iotcamera-control-overview.md)<br/>-&nbsp;[带屏摄像头类产品](guide/device-camera-control-overview.md) |
| 移植适配 | -&nbsp;针对特定芯片做移植适配<br/>-&nbsp;对三方库进行移植适配 | -&nbsp;[轻量系统芯片移植指导](porting/porting-minichip.md)<br/>-&nbsp;[小型系统芯片移植指导](porting/porting-smallchip-prepare-needs.md)<br/>-&nbsp;[轻量和小型系统三方库移植指导](porting/porting-thirdparty-overview.md) |
| 贡献组件 | 为OpenHarmony贡献功能组件 | -&nbsp;[HPM&nbsp;Part&nbsp;介绍](hpm-part/hpm-part-about.md)<br/>-&nbsp;[HPM&nbsp;Part&nbsp;开发指导](hpm-part/hpm-part-development.md)<br/>-&nbsp;[HPM&nbsp;Part&nbsp;参考](hpm-part/hpm-part-reference.md) |
| 参考 | 开发参考 | [常见问题](faqs/faqs-overview.md) |
| 学习路径 | 开发者业务 | 相关文档 |
| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 了解OpenHarmony | 整体认知OpenHarmony | -&nbsp;[OpenHarmony概述](https://gitee.com/openharmony)<br/>-&nbsp;[术语](../glossary.md) |
| 获取开发资源 | 准备开发前相关资源 | -&nbsp;[获取源码](get-code/sourcecode-acquire.md)<br/>-&nbsp;[获取工具](get-code/gettools-acquire.md) |
| 快速入门 | 快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行 | -&nbsp;[轻量和小型系统快速入门](quick-start/quickstart-ide-lite-overview.md) |
| 基础能力使用 | 使用OpenHarmony提供的基础能力 | -&nbsp;[轻量系统内核开发指南](kernel/kernel-mini-overview.md)<br/>-&nbsp;[小型系统内核开发指南](kernel/kernel-small-overview.md)<br/>-&nbsp;[驱动开发指南](driver/driver-hdf-overview.md)<br/>-&nbsp;[子系统开发指南](subsystems/subsys-build-mini-lite.md)<br/>-&nbsp;[安全指南](security/security-guidelines-overall.md)<br/>-&nbsp;[隐私保护](security/security-privacy-protection.md) |
| 进阶开发 | 结合系统能力开发智能设备 | -&nbsp;[WLAN连接类产品](guide/device-wlan-led-control.md)<br/>-&nbsp;[无屏摄像头类产品](guide/device-iotcamera-control-overview.md)<br/>-&nbsp;[带屏摄像头类产品](guide/device-camera-control-overview.md) |
| 移植适配 | -&nbsp;针对特定芯片做移植适配<br/>-&nbsp;对三方库进行移植适配<br/>-&nbsp;三方厂商移植案例<br/> | -&nbsp;[轻量系统芯片移植指导](porting/porting-minichip.md)<br/>-&nbsp;[小型系统芯片移植指导](porting/porting-smallchip-prepare-needs.md)<br/>-&nbsp;[轻量和小型系统三方库移植指导](porting/porting-thirdparty-overview.md)<br/> - [带屏解决方案之恒玄芯片移植案例](porting-bes2600w-on-minisystem-display-demo.md)<br/> - [Combo解决方案之ASR芯片移植案例](porting-asr582x-combo-demo.md)<br/> - [物联网解决方案之芯海cst85芯片移植案例](porting-cst85f01-combo-demo.md)<br/> - [轻量系统STM32F407芯片移植案例](porting-stm32f407-on-minisystem-eth.md)<br/> - [Combo解决方案之W800芯片移植案例](porting-w800-combo-demo.md)<br/> - [小型设备STM32MP1芯片移植案例](porting-stm32mp15xx-on-smallsystem.md)|
| 贡献组件 | 为OpenHarmony贡献功能组件 | -&nbsp;[HPM&nbsp;Part&nbsp;介绍](hpm-part/hpm-part-about.md)<br/>-&nbsp;[HPM&nbsp;Part&nbsp;开发指导](hpm-part/hpm-part-development.md)<br/>-&nbsp;[HPM&nbsp;Part&nbsp;参考](hpm-part/hpm-part-reference.md) |
| 参考 | 开发参考 | [常见问题](faqs/faqs-overview.md)
**表 2** 标准系统开发指导(参考内存≥128MiB)
......@@ -52,6 +52,6 @@ OpenHarmony也提供了一系列可选的系统组件,方便设备开发者按
| 快速入门 | 快速熟悉OpenHarmony环境搭建、编译、烧录、调测、运行 | -&nbsp;[标准系统快速入门](quick-start/quickstart-ide-standard-overview.md) |
| 基础能力使用 | 使用OpenHarmony提供的基础能力 | -&nbsp;[内核开发指南](kernel/kernel-standard.md)<br/>-&nbsp;[驱动开发指南](driver/driver-hdf-overview.md)<br/>-&nbsp;[子系统开发指南](subsystems/subsys-build-standard-large.md)<br/>-&nbsp;[安全指南](security/security-guidelines-overall.md)<br/>-&nbsp;[隐私保护](security/security-privacy-protection.md) |
| 进阶开发 | 结合系统能力开发智能设备 | -&nbsp;[时钟应用开发指导](guide/device-clock-guide.md)<br/>-&nbsp;[平台驱动开发示例](guide/device-driver-demo.md)<br/>-&nbsp;[外设驱动开发示例](guide/device-outerdriver-demo.md) |
| 移植适配 | 对三方库进行移植适配 | -&nbsp;[标准系统芯片移植指导](porting/standard-system-porting-guide.md)<br/>-&nbsp;[一种快速移植OpenHarmony&nbsp;Linux内核的方法](porting/porting-linux-kernel.md) |
| 移植适配 | -&nbsp;针对特定芯片做移植适配 <br/>-&nbsp;快速移植OpenHarmony&nbsp;Linux内核的方法| -&nbsp;[标准系统芯片移植指导](porting/standard-system-porting-guide.md)<br/>-&nbsp;[一种快速移植OpenHarmony&nbsp;Linux内核的方法](porting/porting-linux-kernel.md) |
| 贡献组件 | 为OpenHarmony贡献功能组件 | -&nbsp;[HPM&nbsp;Part&nbsp;介绍](hpm-part/hpm-part-about.md)<br/>-&nbsp;[HPM&nbsp;Part&nbsp;开发指导](hpm-part/hpm-part-development.md)<br/>-&nbsp;[HPM&nbsp;Part&nbsp;参考](hpm-part/hpm-part-reference.md) |
| 参考 | 开发参考 | [常见问题](faqs/faqs-overview.md) |
......@@ -16,7 +16,7 @@ Audio驱动框架基于[HDF驱动框架](https://device.harmonyos.com/cn/docs/do
![](figures/Audio框架图.png)
驱动架构主要由以下几部分组成。
- HDI adapter: 实现Audio HAL层驱动(HDI接口适配),给Audio服务(frameworks)提供所需的音频硬件驱动能力接口。包含 Audio Manager、Audio Adapter、Audio Control、Audio Capture、Audio Render等接口对象。
- HDI adapter:实现Audio HAL层驱动(HDI接口适配),给Audio服务(frameworks)提供所需的音频硬件驱动能力接口。包含 Audio Manager、Audio Adapter、Audio Control、Audio Capture、Audio Render等接口对象。
- Audio Interface Lib:配合内核中的Audio Driver Model使用,实现音频硬件的控制、录音数据的读取、播放数据的写入。它里面包括Stream_ctrl_common 通用层,主要是为了和上层的audio HDI adapter层进行对接。
- ADM(Audio Driver Model):音频驱动框架模型,向上服务于多媒体音频子系统,便于系统开发者能够更便捷的根据场景来开发应用。向下服务于具体的设备厂商,对于Codec和DSP设备厂商来说,可根据ADM模块提供的向下统一接口适配各自的驱动代码,就可以实现快速开发和适配OpenHarmony系统。
- Audio Control Dispatch: 接收lib层的控制指令并将控制指令分发到驱动层。
......
......@@ -77,7 +77,6 @@ OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,
break;
}
}
return NULL;
}
```
......
......@@ -3,7 +3,7 @@
## 简介
OpenHarmony 轻量级内核是基于IoT领域轻量级物联网操作系统Huawei LiteOS内核演进发展的新一代内核,包含LiteOS-M和LiteOS-A两类内核。LiteOS-M内核主要应用于轻量系统,面向的MCU(Micro Processor Unit)一般是百K级内存,可支持MPU(Memory Protection Unit)隔离,业界类似的内核有FreeRTOS或ThreadX等;LiteOS-A内核主要应用于小型系统,面向设备一般是M级内存,可支持MMU(Memory Management Unit)隔离,业界类似的内核有Zircon或Darwin等。
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等。
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> OpenHarmony针对不同量级的系统,分别使用了不同形态的内核,小型系统支持LiteOS和Linux,本开发指南适用于LiteOS-A内核,linux内核的相关操作请参考[Linux内核概述](../kernel/kernel-standard-overview.md)。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册