diff --git a/CODEOWNERS b/CODEOWNERS index 5f358efbe18caf6f273aa1e433bdb3958a9e639a..f020f650d38dda1d697c0cadfc2ba9b5a987ee1f 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -192,7 +192,7 @@ zh-cn/application-dev/napi/rawfile_guidelines.md @ningningW zh-cn/application-dev/background-agent-scheduled-reminder/ @RayShih zh-cn/application-dev/background-task-management/ @ningningW @wangwenli_wolf @tangtiantian2021 @nan-xiansen zh-cn/application-dev/work-scheduler/ @ningningW -zh-cn/application-dev/internationalization/ @ningningW @Buda-Liu @budda-wang @yangqing3 +zh-cn/application-dev/internationalization/ @ningningW @Buda-Liu @mengjingzhimo @yangqing3 zh-cn/application-dev/device/usb-overview.md @ge-yafang @jasonyujia @andeszhang @liuhonggang123 zh-cn/application-dev/device/usb-guidelines.md @ge-yafang @jasonyujia @andeszhang @liuhonggang123 zh-cn/application-dev/device/device-location-overview.md @RayShih diff --git a/en/application-dev/device/device-location-geocoding.md b/en/application-dev/device/device-location-geocoding.md index 8a6a9a6751f8446ef1a1d20502444ab2a3bcb984..c29b1a0ed206cde027d3002d8b110722a473bfda 100644 --- a/en/application-dev/device/device-location-geocoding.md +++ b/en/application-dev/device/device-location-geocoding.md @@ -10,17 +10,18 @@ The geographic description helps users understand a location easily by providing ## Available APIs -The following table describes APIs available for mutual conversion between coordinates and geographic description. For details, see [Geolocation Manager](../reference/apis/js-apis-geoLocationManager.md). +The following table describes APIs available for mutual conversion between coordinates and geographic description. For details, see [Geolocation Manager](../reference/apis/js-apis-geolocation.md). **Table1** APIs for geocoding and reverse geocoding | API | Description | | -------- | -------- | -| isGeocoderAvailable(): boolean; | Obtains the (reverse) geocoding service status.| -| getAddressesFromLocation(request: ReverseGeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void | Converts coordinates into geographic description through reverse geocoding. This API uses an asynchronous callback to return the result. | -| getAddressesFromLocation(request: ReverseGeoCodeRequest): Promise<Array<GeoAddress>> | Converts coordinates into geographic description through reverse geocoding. This API uses a promise to return the result. | -| getAddressesFromLocationName(request: GeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void | Converts geographic description into coordinates through geocoding. This API uses an asynchronous callback to return the result. | -| getAddressesFromLocationName(request: GeoCodeRequest): Promise<Array<GeoAddress>> | Converts geographic description into coordinates through geocoding. This API uses a promise to return the result. | +| isGeoServiceAvailable(callback: AsyncCallback<boolean>) : void | Checks whether the (reverse) geocoding service is available. This API uses an asynchronous callback to return the result.| +| isGeoServiceAvailable() : Promise<boolean> | Checks whether the (reverse) geocoding service is available. This API uses a promise to return the result.| +| getAddressesFromLocation(request: ReverseGeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>) : void | Converts coordinates into geographic description through reverse geocoding. This API uses an asynchronous callback to return the result. | +| getAddressesFromLocation(request: ReverseGeoCodeRequest) : Promise<Array<GeoAddress>> | Converts coordinates into geographic description through reverse geocoding. This API uses a promise to return the result. | +| getAddressesFromLocationName(request: GeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>) : void | Converts geographic description into coordinates through geocoding. This API uses an asynchronous callback to return the result. | +| getAddressesFromLocationName(request: GeoCodeRequest) : Promise<Array<GeoAddress>> | Converts geographic description into coordinates through geocoding. This API uses a promise to return the result. | ## How to Develop @@ -29,21 +30,22 @@ The following table describes APIs available for mutual conversion between coord > > The **GeoConvert** instance needs to access backend services to obtain information. Therefore, before performing the following steps, ensure that your device is connected to the network. -1. Import the **geoLocationManager** module by which you can implement all APIs related to the geocoding and reverse geocoding conversion capabilities. +1. Import the **geolocation** module by which you can implement all APIs related to the geocoding and reverse geocoding conversion capabilities. ```ts - import geoLocationManager from '@ohos.geoLocationManager'; + import geolocation from '@ohos.geolocation'; ``` 2. Query whether geocoder service is available. - Call **isGeoServiceAvailable** to query whether the geocoder service is available. If the service is available, continue with step 3. ```ts - import geoLocationManager from '@ohos.geoLocationManager'; - try { - var isAvailable = geoLocationManager.isGeocoderAvailable(); - } catch (err) { - console.error("errCode:" + err.code + ",errMessage:" + err.message); - } + geolocation.isGeoServiceAvailable((err, data) => { + if (err) { + console.log('isGeoServiceAvailable err: ' + JSON.stringify(err)); + } else { + console.log('isGeoServiceAvailable data: ' + JSON.stringify(data)); + } + }); ``` 3. Obtain the conversion result. @@ -51,7 +53,7 @@ The following table describes APIs available for mutual conversion between coord ```ts var reverseGeocodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1}; - geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => { + geolocation.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => { if (err) { console.log('getAddressesFromLocation err: ' + JSON.stringify(err)); } else { @@ -60,12 +62,12 @@ The following table describes APIs available for mutual conversion between coord }); ``` - Your application can obtain the **GeoAddress** list that matches the specified coordinates and then read location information from it. For details, see [Geolocation](../reference/apis/js-apis-geoLocationManager.md). + Your application can obtain the **GeoAddress** list that matches the specified coordinates and then read location information from it. For details, see [Geolocation](../reference/apis/js-apis-geolocation.md). - Call **getAddressesFromLocationName** to convert geographic description into coordinates. ```ts var geocodeRequest = {"description": "No. xx, xx Road, Pudong District, Shanghai", "maxItems": 1}; - geoLocationManager.getAddressesFromLocationName(geocodeRequest, (err, data) => { + geolocation.getAddressesFromLocationName(geocodeRequest, (err, data) => { if (err) { console.log('getAddressesFromLocationName err: ' + JSON.stringify(err)); } else { @@ -74,6 +76,6 @@ The following table describes APIs available for mutual conversion between coord }); ``` - Your application can obtain the **GeoAddress** list that matches the specified location information and read coordinates from it. For details, see [Geolocation](../reference/apis/js-apis-geoLocationManager.md). + Your application can obtain the **GeoAddress** list that matches the specified location information and read coordinates from it. For details, see [Geolocation](../reference/apis/js-apis-geolocation.md). To improve the accuracy of location results, you can set the longitude and latitude ranges in **GeoCodeRequest**. diff --git a/en/application-dev/device/device-location-info.md b/en/application-dev/device/device-location-info.md index edd1bb6093f40d6033adbb2e11cbe88ff984551d..235ef590861ceb1a8b2f9b878954ea3d3cecccc9 100644 --- a/en/application-dev/device/device-location-info.md +++ b/en/application-dev/device/device-location-info.md @@ -10,11 +10,11 @@ Real-time location of the device is recommended for location-sensitive services. ## Available APIs -For details about the APIs used to obtain the device location information, see [Geolocation Manager](../reference/apis/js-apis-geoLocationManager.md). +For details about the APIs used to obtain the device location information, see [Geolocation Manager](../reference/apis/js-apis-geolocation.md). ## How to Develop -To learn more about the APIs for obtaining device location information, see [Geolocation](../reference/apis/js-apis-geoLocationManager.md). +To learn more about the APIs for obtaining device location information, see [Geolocation](../reference/apis/js-apis-geolocation.md). 1. Before using basic location capabilities, check whether your application has been granted the permission to access the device location information. If not, your application needs to obtain the permission from the user as described below. The system provides the following location permissions: @@ -41,10 +41,10 @@ To learn more about the APIs for obtaining device location information, see [Geo You can declare the required permission in your application's configuration file. For details, see [Access Control (Permission) Development](../security/accesstoken-guidelines.md). -2. Import the **geoLocationManager** module by which you can implement all APIs related to the basic location capabilities. +2. Import the **geolocation** module by which you can implement all APIs related to the basic location capabilities. - ```ts - import geoLocationManager from '@ohos.geoLocationManager'; + ``` + import geolocation from '@ohos.geolocation'; ``` 3. Instantiate the **LocationRequest** object. This object provides APIs to notify the system of the location service type and the interval of reporting location information.
@@ -53,7 +53,7 @@ To learn more about the APIs for obtaining device location information, see [Geo To better serve your needs for using APIs, the system has categorized APIs into different packages to match your common use cases of the location function. In this way, you can directly use the APIs specific to a certain use case, making application development much easier. The following table lists the use cases currently supported. - ```ts + ``` export enum LocationRequestScenario { UNSET = 0x300, NAVIGATION, @@ -78,7 +78,7 @@ To learn more about the APIs for obtaining device location information, see [Geo Sample code for initializing **requestInfo** for navigation: ```ts - var requestInfo = {'scenario': geoLocationManager.LocationRequestScenario.NAVIGATION, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0}; + var requestInfo = {'scenario': geolocation.LocationRequestScenario.NAVIGATION, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0}; ``` **Method 2:** @@ -107,7 +107,7 @@ To learn more about the APIs for obtaining device location information, see [Geo Sample code for initializing **requestInfo** for the location accuracy priority policy: ```ts - var requestInfo = {'priority': geoLocationManager.LocationRequestPriority.ACCURACY, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0}; + var requestInfo = {'priority': geolocation.LocationRequestPriority.ACCURACY, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0}; ``` 4. Instantiate the **Callback** object for the system to report location results. @@ -122,24 +122,25 @@ To learn more about the APIs for obtaining device location information, see [Geo 5. Start device location. ```ts - geoLocationManager.on('locationChange', requestInfo, locationChange); + geolocation.on('locationChange', requestInfo, locationChange); ``` 6. (Optional) Stop device location. ```ts - geoLocationManager.off('locationChange', locationChange); + geolocation.off('locationChange', locationChange); ``` If your application does not need the real-time device location, it can use the last known device location cached in the system instead. ```ts - import geoLocationManager from '@ohos.geoLocationManager'; - try { - var location = geoLocationManager.getLastLocation(); - } catch (err) { - console.error("errCode:" + err.code + ",errMessage:" + err.message); - } + geolocation.getLastLocation((err, data) => { + if (err) { + console.log('getLastLocation: err: ' + JSON.stringify(err)); + } else { + console.log('getLastLocation: data: ' + JSON.stringify(data)); + } + }); ``` To call this method, your application needs to request the **ohos.permission.LOCATION** permission from the user. diff --git a/en/application-dev/reference/apis/js-apis-abilityAccessCtrl.md b/en/application-dev/reference/apis/js-apis-abilityAccessCtrl.md index faf338b504e33f90e71749eec565f177a4ff16b4..d593cf5a61697773be5837287f0e63d33cff3ce8 100644 --- a/en/application-dev/reference/apis/js-apis-abilityAccessCtrl.md +++ b/en/application-dev/reference/apis/js-apis-abilityAccessCtrl.md @@ -385,7 +385,6 @@ import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); let tokenID = 0; // You can use getApplicationInfo to obtain the access token ID. -let permissionFlag = 1; try { atManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => { console.log(`getPermissionFlags success, data->${JSON.stringify(data)}`); @@ -459,11 +458,12 @@ For details about the error codes, see [Ability Access Control Error Codes](../e **Example** ```js -import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); -let tokenIDList: Array = []; -let permissionNameList = []; +let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100); +let tokenIDList: Array = [appInfo.accessTokenId]; +let permissionNameList: Array = ["ohos.permission.DISTRIBUTED_DATASYNC"]; try { atManager.on('permissionStateChange', tokenIDList, permissionNameList, (data) => { console.debug("receive permission state change, data:" + JSON.stringify(data)); @@ -508,11 +508,12 @@ For details about the error codes, see [Ability Access Control Error Codes](../e **Example** ```js -import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); -let tokenIDList: Array = []; -let permissionNameList = []; +let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100); +let tokenIDList: Array = [appInfo.accessTokenId]; +let permissionNameList: Array = ["ohos.permission.DISTRIBUTED_DATASYNC"]; try { atManager.off('permissionStateChange', tokenIDList, permissionNameList); } catch(err) { diff --git a/en/application-dev/reference/apis/js-apis-faultLogger.md b/en/application-dev/reference/apis/js-apis-faultLogger.md index 1e5a056e904388a024342c077b1aac47ce631575..ac903232328a4da80fe021b39266fd0025ca9fcb 100644 --- a/en/application-dev/reference/apis/js-apis-faultLogger.md +++ b/en/application-dev/reference/apis/js-apis-faultLogger.md @@ -1,4 +1,5 @@ # Fault Logger + > **NOTE**
> The initial APIs of this module are supported since API version 8. Newly added APIs will be marked with a superscript to indicate their earliest API version. diff --git a/en/application-dev/reference/apis/js-apis-geoLocationManager.md b/en/application-dev/reference/apis/js-apis-geoLocationManager.md index 9c09d174723ca769e8b712a2e874c9b3c6f4f3a8..5d22ce86255fa5bb680d4cf66c530a98fe4f215a 100644 --- a/en/application-dev/reference/apis/js-apis-geoLocationManager.md +++ b/en/application-dev/reference/apis/js-apis-geoLocationManager.md @@ -30,7 +30,7 @@ If your application needs to access the device location information, it must fir | 9 and later| ohos.permission.APPROXIMATELY_LOCATION | Success| Location accurate to 5 kilometers| | 9 and later| ohos.permission.APPROXIMATELY_LOCATION and ohos.permission.LOCATION| Success| Location accurate to meters| -If your application needs to access the device location information when running in the background, it must be configured to be able to run in the background and be granted the **ohos.permission.LOCATION_IN_BACKGROUND** permission. In this way, the system continues to report device location information after your application moves to the background. +If your application needs to access the device location information when running in the background, it must be configured to be able to run in the background and be granted the **ohos.permission.LOCATION\_IN\_BACKGROUND** permission. In this way, the system continues to report device location information after your application moves to the background. You can declare the required permission in your application's configuration file. For details, see [Access Control (Permission) Development](../../security/accesstoken-guidelines.md). @@ -1615,7 +1615,7 @@ Obtains the current country code. | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | - | Promise<[CountryCode](#countrycode)> | [CountryCode](#countrycode) | NA | Promise used to return the country code.| + | Promise<[CountryCode](#countrycode)> | [CountryCode](#countrycode) | NA | Callback used to return the country code.| **Error codes** @@ -1815,7 +1815,7 @@ For details about the following error codes, see [Location Error Codes](../error setReverseGeocodingMockInfo(mockInfos: Array<ReverseGeocodingMockInfo>): void; -Sets information of the mock reverse geocoding function, including the mapping between a location and geographical name. If the location is contained in the configurations during reverse geocoding query, the corresponding geographical name will be returned. +Sets information of the mock reverse geocoding function, including the mapping between a location and geographic name. If the location is contained in the configurations during reverse geocoding query, the corresponding geographic name will be returned. **System capability**: SystemCapability.Location.Location.Core @@ -1825,7 +1825,7 @@ Sets information of the mock reverse geocoding function, including the mapping b | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | - | mockInfos | Array<[ReverseGeocodingMockInfo](#reversegeocodingmockinfo)> | Yes| Array of information of the mock reverse geocoding function, including a location and a geographical name.| + | mockInfos | Array<[ReverseGeocodingMockInfo](#reversegeocodingmockinfo)> | Yes| Array of information of the mock reverse geocoding function, including a location and a geographic name.| **Error codes** @@ -1874,7 +1874,7 @@ Checks whether a user agrees with the privacy statement of the location service. | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | - | boolean | boolean | NA | Callback used to return the result, which indicates whether the user agrees with the privacy statement.| + | boolean | boolean | NA | Result indicating whether the user agrees with the privacy statement.| **Error codes** @@ -1913,7 +1913,7 @@ Sets the user confirmation status for the privacy statement of the location serv | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | type | [LocationPrivacyType](#locationprivacytype) | Yes| Privacy statement type, for example, privacy statement displayed in the startup wizard or privacy statement displayed when the location service is enabled.| - | isConfirmed | boolean | Yes| Callback used to return the result, which indicates whether the user agrees with the privacy statement.| + | isConfirmed | boolean | Yes| Whether the user agrees with the privacy statement.| **Error codes** @@ -1975,7 +1975,7 @@ Defines a reverse geocoding request. | -------- | -------- | -------- | -------- | -------- | | locale | string | Yes| Yes| Language used for the location description. **zh** indicates Chinese, and **en** indicates English.| | latitude | number | Yes| Yes| Latitude information. A positive value indicates north latitude, and a negative value indicates south latitude.| -| longitude | number | Yes| Yes| Longitude information. A positive value indicates east longitude , and a negative value indicates west longitude .| +| longitude | number | Yes| Yes| Longitude information. A positive value indicates east longitude, and a negative value indicates west longitude.| | maxItems | number | Yes| Yes| Maximum number of location records to be returned.| @@ -2005,7 +2005,7 @@ Defines a geographic location. | Name| Type| Readable|Writable| Description| | -------- | -------- | -------- | -------- | -------- | | latitude | number | Yes| No | Latitude information. A positive value indicates north latitude, and a negative value indicates south latitude.| -| longitude | number | Yes| No | Longitude information. A positive value indicates east longitude , and a negative value indicates west longitude .| +| longitude | number | Yes| No | Longitude information. A positive value indicates east longitude, and a negative value indicates west longitude.| | locale | string | Yes| No | Language used for the location description. **zh** indicates Chinese, and **en** indicates English.| | placeName | string | Yes| No | Landmark of the location.| | countryCode | string | Yes| No | Country code.| @@ -2022,7 +2022,7 @@ Defines a geographic location. | addressUrl | string | Yes| No| Website URL.| | descriptions | Array<string> | Yes| No| Additional descriptions.| | descriptionsSize | number | Yes| No| Total number of additional descriptions.| -| isFromMock | Boolean | Yes| No| Whether the geographical name is from the mock reverse geocoding function.| +| isFromMock | Boolean | Yes| No| Whether the geographic name is from the mock reverse geocoding function.| ## LocationRequest @@ -2142,7 +2142,7 @@ Defines a location. | Name| Type| Readable|Writable| Description| | -------- | -------- | -------- | -------- | -------- | | latitude | number| Yes| No| Latitude information. A positive value indicates north latitude, and a negative value indicates south latitude.| -| longitude | number| Yes| No| Longitude information. A positive value indicates east longitude , and a negative value indicates west longitude .| +| longitude | number| Yes| No| Longitude information. A positive value indicates east longitude, and a negative value indicates west longitude.| | altitude | number | Yes| No| Location altitude, in meters.| | accuracy | number | Yes| No| Location accuracy, in meters.| | speed | number | Yes| No|Speed, in m/s.| @@ -2165,7 +2165,7 @@ Represents information of the mock reverse geocoding function. | Name| Type| Readable|Writable| Description| | -------- | -------- | -------- | -------- | -------- | | location | [ReverseGeoCodeRequest](#reversegeocoderequest) | Yes| Yes| Latitude and longitude information.| -| geoAddress | [GeoAddress](#geoaddress) | Yes| Yes|Geographical name.| +| geoAddress | [GeoAddress](#geoaddress) | Yes| Yes|Geographic name.| ## LocationMockConfig diff --git a/en/application-dev/reference/apis/js-apis-geolocation.md b/en/application-dev/reference/apis/js-apis-geolocation.md index 8bc027058b6d9bbda89636757219f83827029317..a5c7034c0333cb640dbe1a51b7f5f6e6f63743ca 100644 --- a/en/application-dev/reference/apis/js-apis-geolocation.md +++ b/en/application-dev/reference/apis/js-apis-geolocation.md @@ -19,9 +19,9 @@ The system provides the following location permissions: If your application needs to access the device location information, it must first apply for required permissions. Specifically speaking: -API versions earlier than 9: Apply for **ohos.permission.LOCATION**. +- API versions earlier than 9: Apply for **ohos.permission.LOCATION**. -API version 9 and later: Apply for **ohos.permission.APPROXIMATELY\_LOCATION**, or apply for **ohos.permission.APPROXIMATELY\_LOCATION** and **ohos.permission.LOCATION**. Note that **ohos.permission.LOCATION** cannot be applied for separately. +- API version 9 and later: Apply for **ohos.permission.APPROXIMATELY\_LOCATION**, or apply for **ohos.permission.APPROXIMATELY\_LOCATION** and **ohos.permission.LOCATION**. Note that **ohos.permission.LOCATION** cannot be applied for separately. | API Version| Location Permission| Permission Application Result| Location Accuracy| | -------- | -------- | -------- | -------- | @@ -30,7 +30,7 @@ API version 9 and later: Apply for **ohos.permission.APPROXIMATELY\_LOCATION**, | 9 and later| ohos.permission.APPROXIMATELY_LOCATION | Success| Location accurate to 5 kilometers| | 9 and later| ohos.permission.APPROXIMATELY_LOCATION and ohos.permission.LOCATION| Success| Location accurate to meters| -If your application needs to access the device location information when running in the background, it must be configured to be able to run in the background and be granted the **ohos.permission.LOCATION_IN_BACKGROUND** permission. In this way, the system continues to report device location information after your application moves to the background. +If your application needs to access the device location information when running in the background, it must be configured to be able to run in the background and be granted the **ohos.permission.LOCATION\_IN\_BACKGROUND** permission. In this way, the system continues to report device location information after your application moves to the background. You can declare the required permission in your application's configuration file. For details, see [Access Control (Permission) Development](../../security/accesstoken-guidelines.md). @@ -971,7 +971,7 @@ Converts geographic description into coordinates through geocoding. This API use | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | - | Promise<Array<[GeoAddress](#geoaddress)>> | Array<[GeoAddress](#geoaddress)>|NA|Callback used to return the geocoding result.| + | Promise<Array<[GeoAddress](#geoaddress)>> | Array<[GeoAddress](#geoaddress)>|NA|Promise used to return the geocoding result.| **Example** @@ -1265,7 +1265,7 @@ Defines a reverse geocoding request. | -------- | -------- | -------- | -------- | -------- | | locale | string | Yes| Yes| Language used for the location description. **zh** indicates Chinese, and **en** indicates English.| | latitude | number | Yes| Yes| Latitude information. A positive value indicates north latitude, and a negative value indicates south latitude.| -| longitude | number | Yes| Yes| Longitude information. A positive value indicates east longitude , and a negative value indicates west longitude .| +| longitude | number | Yes| Yes| Longitude information. A positive value indicates east longitude, and a negative value indicates west longitude.| | maxItems | number | Yes| Yes| Maximum number of location records to be returned.| @@ -1305,7 +1305,7 @@ Defines a geographic location. | Name| Type| Readable|Writable| Description| | -------- | -------- | -------- | -------- | -------- | | latitude7+ | number | Yes| No| Latitude information. A positive value indicates north latitude, and a negative value indicates south latitude.| -| longitude7+ | number | Yes| No| Longitude information. A positive value indicates east longitude , and a negative value indicates west longitude .| +| longitude7+ | number | Yes| No| Longitude information. A positive value indicates east longitude, and a negative value indicates west longitude.| | locale7+ | string | Yes| No| Language used for the location description. **zh** indicates Chinese, and **en** indicates English.| | placeName7+ | string | Yes| No| Landmark of the location.| | countryCode7+ | string | Yes| No| Country code.| @@ -1493,7 +1493,7 @@ Defines a location. | Name| Type| Readable|Writable| Description| | -------- | -------- | -------- | -------- | -------- | | latitude7+ | number | Yes| No| Latitude information. A positive value indicates north latitude, and a negative value indicates south latitude.| -| longitude7+ | number | Yes| No| Longitude information. A positive value indicates east longitude , and a negative value indicates west longitude .| +| longitude7+ | number | Yes| No| Longitude information. A positive value indicates east longitude, and a negative value indicates west longitude.| | altitude7+ | number | Yes| No| Location altitude, in meters.| | accuracy7+ | number | Yes| No| Location accuracy, in meters.| | speed7+ | number | Yes| No| Speed, in m/s.| diff --git a/en/application-dev/reference/apis/js-apis-hiappevent.md b/en/application-dev/reference/apis/js-apis-hiappevent.md index 96c708d4fe1133df000ae4f543ecb77f479f8fa1..24125f48cde82856302fc0b981b707c53387d54b 100644 --- a/en/application-dev/reference/apis/js-apis-hiappevent.md +++ b/en/application-dev/reference/apis/js-apis-hiappevent.md @@ -1,6 +1,6 @@ # HiAppEvent -This module provides the application event logging functions, such as writing application events to the event file and managing the event logging configuration. +The HiAppEvent module provides the application event logging functions, such as writing application events to the event file and managing the event logging configuration. > **NOTE** > - The APIs provided by this module are deprecated since API version 9. You are advised to use [`@ohos.hiviewdfx.hiAppEvent`](js-apis-hiviewdfx-hiappevent.md) instead. diff --git a/en/application-dev/reference/apis/js-apis-hidebug.md b/en/application-dev/reference/apis/js-apis-hidebug.md index 19b72ccb5ba9a537a3cf8014a9c19872a6e32781..7c9393e17557cc927cc880b2529c9e25966124af 100644 --- a/en/application-dev/reference/apis/js-apis-hidebug.md +++ b/en/application-dev/reference/apis/js-apis-hidebug.md @@ -1,9 +1,10 @@ # HiDebug > **NOTE** +> > The initial APIs of this module are supported since API version 8. Newly added APIs will be marked with a superscript to indicate their earliest API version. -This module provides APIs for you to obtain the memory usage of an application, including the static heap memory (native heap) and proportional set size (PSS) occupied by the application process. You can also export VM memory slices and collect VM CPU profiling data. +The HiDebug module provides APIs for you to obtain the memory usage of an application, including the static heap memory (native heap) and proportional set size (PSS) occupied by the application process. You can also export VM memory slices and collect VM CPU profiling data. ## Modules to Import @@ -24,7 +25,7 @@ This API is defined but not implemented in OpenHarmony 3.1 Release. **Return value** -| Type | Description | +| Type | Description | | ------ | --------------------------- | | bigint | Total heap memory size of the application, in KB.| diff --git a/en/application-dev/reference/apis/js-apis-hilog.md b/en/application-dev/reference/apis/js-apis-hilog.md index c01d3ce2f21c64cca00b453a3d3a6448b84fc22f..66c180ce7fd431a39674276f2b1f20e406cfddb7 100644 --- a/en/application-dev/reference/apis/js-apis-hilog.md +++ b/en/application-dev/reference/apis/js-apis-hilog.md @@ -45,7 +45,7 @@ Enumerates the log levels. **System capability**: SystemCapability.HiviewDFX.HiLog -| Name | Default Value| Description | +| Name | Value| Description | | ----- | ------ | ------------------------------------------------------------ | | DEBUG | 3 | Log level used to record more detailed process information than INFO logs to help developers analyze service processes and locate faults.| | INFO | 4 | Log level used to record key service process nodes and exceptions that occur during service running,
for example, no network signal or login failure.
These logs should be recorded by the dominant module in the service to avoid repeated logging conducted by multiple invoked modules or low-level functions.| diff --git a/en/application-dev/reference/apis/js-apis-http.md b/en/application-dev/reference/apis/js-apis-http.md index 294ed0fa79032d4e47e6c9c999183811d272acd3..683ecdb676eacc3267f0570c02e7c059170fb68c 100644 --- a/en/application-dev/reference/apis/js-apis-http.md +++ b/en/application-dev/reference/apis/js-apis-http.md @@ -18,9 +18,9 @@ import http from '@ohos.net.http'; ```js import http from '@ohos.net.http'; -// Each HttpRequest corresponds to an HttpRequestTask object and cannot be reused. +// Each httpRequest corresponds to an HTTP request task and cannot be reused. let httpRequest = http.createHttp(); -// Subscribe to the HTTP response header, which is returned earlier than httpRequest. Whether to subscribe to the HTTP response header is up to your decision. +// This API is used to listen for the HTTP Response Header event, which is returned earlier than the result of the HTTP request. It is up to you whether to listen for HTTP Response Header events. // on('headerReceive', AsyncCallback) is replaced by on('headersReceive', Callback) since API version 8. httpRequest.on('headersReceive', (header) => { console.info('header: ' + JSON.stringify(header)); @@ -38,14 +38,18 @@ httpRequest.request( extraData: { "data": "data to send", }, - connectTimeout: 60000, // Optional. The default value is 60000, in ms. + expectDataType: http.HttpDataType.STRING, // Optional. This field specifies the type of the return data. + usingCache: true, // Optional. The default value is true. + priority: 1, // Optional. The default value is 1. + connectTimeout: 60000 // Optional. The default value is 60000, in ms. readTimeout: 60000, // Optional. The default value is 60000, in ms. + usingProtocol: http.HttpProtocol.HTTP1_1, // Optional. The default protocol type is automatically specified by the system. }, (err, data) => { if (!err) { - // data.result contains the HTTP response. Parse the response based on service requirements. + // data.result carries the HTTP response. Parse the response based on service requirements. console.info('Result:' + data.result); console.info('code:' + data.responseCode); - // data.header contains the HTTP response header. Parse the content based on service requirements. + // data.header carries the HTTP response header. Parse the content based on service requirements. console.info('header:' + JSON.stringify(data.header)); console.info('cookies:' + data.cookies); // 8+ } else { @@ -78,10 +82,9 @@ import http from '@ohos.net.http'; let httpRequest = http.createHttp(); ``` - ## HttpRequest -HTTP request task. Before invoking APIs provided by **HttpRequest**, you must call [createHttp\(\)](#httpcreatehttp) to create an **HttpRequestTask** object. +Defines an HTTP request task. Before invoking APIs provided by **HttpRequest**, you must call [createHttp\(\)](#httpcreatehttp) to create an **HttpRequestTask** object. ### request @@ -89,7 +92,7 @@ request\(url: string, callback: AsyncCallback\\):void Initiates an HTTP request to a given URL. This API uses an asynchronous callback to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -121,7 +124,7 @@ request\(url: string, options: HttpRequestOptions, callback: AsyncCallback Initiates an HTTP request to a given URL. This API uses a promise to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -174,7 +176,7 @@ Initiates an HTTP request to a given URL. This API uses a promise to return the | Name | Type | Mandatory| Description | | ------- | ------------------ | ---- | ----------------------------------------------- | | url | string | Yes | URL for initiating an HTTP request. | -| options | HttpRequestOptions | Yes | Request options. For details, see [HttpRequestOptions](#httprequestoptions).| +| options | HttpRequestOptions | No | Request options. For details, see [HttpRequestOptions](#httprequestoptions).| **Return value** @@ -226,7 +228,7 @@ on\(type: 'headerReceive', callback: AsyncCallback\): void Registers an observer for HTTP Response Header events. ->![](public_sys-resources/icon-note.gif) **NOTE** +>**NOTE** >This API has been deprecated. You are advised to use [on\('headersReceive'\)8+](#onheadersreceive8) instead. **System capability**: SystemCapability.Communication.NetStack @@ -250,14 +252,13 @@ httpRequest.on('headerReceive', (err, data) => { }); ``` - ### off\('headerReceive'\) off\(type: 'headerReceive', callback?: AsyncCallback\): void Unregisters the observer for HTTP Response Header events. ->![](public_sys-resources/icon-note.gif) **NOTE** +>**NOTE** > >1. This API has been deprecated. You are advised to use [off\('headersReceive'\)8+](#offheadersreceive8) instead. > @@ -301,14 +302,13 @@ httpRequest.on('headersReceive', (header) => { }); ``` - ### off\('headersReceive'\)8+ off\(type: 'headersReceive', callback?: Callback\): void Unregisters the observer for HTTP Response Header events. ->![](public_sys-resources/icon-note.gif) **NOTE** +>**NOTE** >You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events. **System capability**: SystemCapability.Communication.NetStack @@ -358,10 +358,14 @@ Specifies the type and value range of the optional parameters in the HTTP reques | Name | Type | Mandatory| Description | | -------------- | --------------------------------------------- | ---- | ------------------------------------------------------------ | | method | [RequestMethod](#requestmethod) | No | Request method. | -| extraData | string \| Object \| ArrayBuffer6+ | No | Additional data of the request.
- If the HTTP request uses a POST or PUT method, this parameter serves as the content of the HTTP request.
- If the HTTP request uses a GET, OPTIONS, DELETE, TRACE, or CONNECT method, this parameter is a supplement to the HTTP request parameters and will be added to the URL when the request is sent.6+
- To pass in a string object, you first need to encode the object on your own.8+ | +| extraData | string \| Object \| ArrayBuffer6+ | No | Additional data of the request.
- If the HTTP request uses a POST or PUT method, this parameter serves as the content of the HTTP request.
- If the HTTP request uses a GET, OPTIONS, DELETE, TRACE, or CONNECT method, this parameter is a supplement to the HTTP request parameters and will be added to the URL when the request is sent.6+
- To pass in a string object, you first need to encode the object on your own.6+ | +| expectDataType9+ | [HttpDataType](#httpdatatype9) | No | Type of the return data. If this parameter is set, the system returns the specified type of data preferentially.| +| usingCache9+ | boolean | No | Whether to use the cache. The default value is **true**. | +| priority9+ | number | No | Priority. The value range is \[1,1000]. The default value is **1**. | | header | Object | No | HTTP request header. The default value is **{'Content-Type': 'application/json'}**. | | readTimeout | number | No | Read timeout duration. The default value is **60000**, in ms. | | connectTimeout | number | No | Connection timeout interval. The default value is **60000**, in ms. | +| usingProtocol9+ | [HttpProtocol](#httpprotocol9) | No | Protocol. The default value is automatically specified by the system. | ## RequestMethod @@ -371,14 +375,14 @@ Defines an HTTP request method. | Name | Value | Description | | :------ | ------- | :------------------ | -| OPTIONS | OPTIONS | OPTIONS method.| -| GET | GET | GET method. | -| HEAD | HEAD | HEAD method. | -| POST | POST | POST method. | -| PUT | PUT | PUT method. | -| DELETE | DELETE | DELETE method. | -| TRACE | TRACE | TRACE method. | -| CONNECT | CONNECT | CONNECT method.| +| OPTIONS | "OPTIONS" | OPTIONS method.| +| GET | "GET" | GET method. | +| HEAD | "HEAD" | HEAD method. | +| POST | "POST" | POST method. | +| PUT | "PUT" | PUT method. | +| DELETE | "DELETE" | DELETE method. | +| TRACE | "TRACE" | TRACE method. | +| CONNECT | "CONNECT" | CONNECT method.| ## ResponseCode @@ -388,7 +392,7 @@ Enumerates the response codes for an HTTP request. | Name | Value | Description | | ----------------- | ---- | ------------------------------------------------------------ | -| OK | 200 | Request succeeded. The request has been processed successfully. This return code is generally used for GET and POST requests. | +| OK | 200 | The request is successful. The request has been processed successfully. This return code is generally used for GET and POST requests. | | CREATED | 201 | "Created." The request has been successfully sent and a new resource is created. | | ACCEPTED | 202 | "Accepted." The request has been accepted, but the processing has not been completed. | | NOT_AUTHORITATIVE | 203 | "Non-Authoritative Information." The request is successful. | @@ -433,17 +437,171 @@ Defines the response to an HTTP request. | Name | Type | Mandatory| Description | | -------------------- | -------------------------------------------- | ---- | ------------------------------------------------------------ | | result | string \| Object \| ArrayBuffer6+ | Yes | Response content returned based on **Content-type** in the response header:
- application/json: a string in JSON format. If you want to use specific content in the response, you need to implement parsing of that content.
- application/octet-stream: ArrayBuffer
- Others: string| +| resultType9+ | [HttpDataType](#httpdatatype9) | Yes | Type of the return value. | | responseCode | [ResponseCode](#responsecode) \| number | Yes | Result code for an HTTP request. If the callback function is successfully executed, a result code defined in [ResponseCode](#responsecode) will be returned. Otherwise, an error code will be returned in the **err** field in **AsyncCallback**. For details, see [Error Codes](#error-codes).| | header | Object | Yes | Response header. The return value is a string in JSON format. If you want to use specific content in the response, you need to implement parsing of that content. Common fields and parsing methods are as follows:
- Content-Type: header['Content-Type'];
- Status-Line: header['Status-Line'];
- Date: header.Date/header['Date'];
- Server: header.Server/header['Server'];| | cookies8+ | Array\ | Yes | Cookies returned by the server. | +## http.createHttpResponseCache9+ + +createHttpResponseCache(cacheSize?: number): HttpResponseCache + +Creates a default object to store responses to HTTP access requests. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | --------------------------------------- | ---- | ---------- | +| cacheSize | number | No| Cache size. The maximum value is 10\*1024\*1024 (10 MB). By default, the maximum value is used.| + +**Return value** + +| Type | Description | +| :---------- | :----------------------------------------------------------- | +| [HttpResponseCache](#httpresponsecache9) | Object that stores the response to the HTTP request.| + +**Example** + +```js +import http from '@ohos.net.http'; +let httpResponseCache = http.createHttpResponseCache(); +``` + +## HttpResponseCache9+ + +Defines an object that stores the response to an HTTP request. + +### flush9+ + +flush(callback: AsyncCallback\): void + +Flushes data in the cache to the file system so that the cached data can be accessed in the next HTTP request. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | --------------------------------------- | ---- | ---------- | +| callback | AsyncCallback\ | Yes | Callback used to return the result.| + +**Example** + +```js +httpResponseCache.flush(err => { + if (err) { + console.log('flush fail'); + return; + } + console.log('flush success'); +}); +``` + +### flush9+ + +flush(): Promise\ + +Flushes data in the cache to the file system so that the cached data can be accessed in the next HTTP request. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| --------------------------------- | ------------------------------------- | +| Promise\> | Promise used to return the result.| + +**Example** + +```js +httpResponseCache.flush().then(() => { + console.log('flush success'); +}).catch(err => { + console.log('flush fail'); +}); +``` + +### delete9+ + +delete(callback: AsyncCallback\): void + +Disables the cache and deletes the data in it. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | --------------------------------------- | ---- | ---------- | +| callback | AsyncCallback\ | Yes | Callback used to return the result.| + +**Example** + +```js +httpResponseCache.delete(err => { + if (err) { + console.log('delete fail'); + return; + } + console.log('delete success'); +}); +``` +### delete9+ + +delete(): Promise\ + +Disables the cache and deletes the data in it. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| --------------------------------- | ------------------------------------- | +| Promise\ | Promise used to return the result.| + +**Example** + +```js +httpResponseCache.delete().then(() => { + console.log('delete success'); +}).catch(err => { + console.log('delete fail'); +}); +``` + ## Error Codes | Error Code| Description | | ------ | ------------------------------------------------------------ | -| -1 | Incorrect parameters. | -| 3 | Incorrect URL format. | -| 4 | Built-in request function, protocol, or option not found during build. | -| 5 | Unable to resolve the proxy. | -| 6 | Unable to resolve the host. | -| 7 | Unable to connect to the proxy or host. | +| -1 | Incorrect parameter. Check whether the number and type of parameters are correct. | +| 3 | Incorrect URL format. Check whether the format and syntax of the URL are correct. | +| 4 | Built-in request function, protocol, or option not found during build. If a function or option is not enabled or explicitly disabled, you need to rebuild a libcurl in order to access its functions. | +| 5 | Unable to resolve the proxy because of a failure to resolve the specified proxy server. You are advised perform the following: 1. Check whether the URL is correct. 2. Check whether the network connection is normal and whether the network can communicate with external networks. 3. Check whether the network access permission is available. | +| 6 | Unable to resolve the host because of a failure to resolve the specified remote host. You are advised perform the following: 1. Check whether the URL is correct. 2. Check whether the network connection is normal and whether the network can communicate with external networks. 3. Check whether the network access permission is available. | +| 7 | Unable to connect to the proxy or host. You are advised perform the following: 1. Check whether the port number is correct. 2. Check whether the HTTP proxy is enabled on the local host. | + +## HttpDataType9+ + +Enumerates HTTP data types. + +**System capability**: SystemCapability.Communication.NetStack + +| Name| Value| Description | +| ------------------ | -- | ----------- | +| STRING | 0 | String type.| +| OBJECT | 1 | Object type. | +| ARRAY_BUFFER | 2 | Binary array type.| + +## HttpProtocol9+ + +Enumerates HTTP protocol versions. + +**System capability**: SystemCapability.Communication.NetStack + +| Name | Description | +| :-------- | :----------- | +| HTTP1_1 | HTTP1.1 | +| HTTP2 | HTTP2 | diff --git a/en/application-dev/reference/apis/js-apis-resource-manager.md b/en/application-dev/reference/apis/js-apis-resource-manager.md index ba93ca3c5a6352d03ec65cfa4c468d2769239f4f..8117cdd44862dc934a4022b6b701b9551cd6d25e 100644 --- a/en/application-dev/reference/apis/js-apis-resource-manager.md +++ b/en/application-dev/reference/apis/js-apis-resource-manager.md @@ -16,7 +16,7 @@ import resourceManager from '@ohos.resourceManager'; ## Instruction Since API version 9, the stage model allows an application to obtain a **ResourceManager** object based on **context** and call its resource management APIs without first importing the required bundle. This approach, however, is not applicable to the FA model. -For details about how to reference **context** in the stage model, see [Context in the Stage Model](../../ability/context-userguide.md). +For details about how to reference **context** in the stage model, see [Context in the Stage Model]. ```ts import Ability from '@ohos.application.Ability'; @@ -1375,15 +1375,16 @@ For details about the error codes, see [Resource Manager Error Codes](../errorco try { this.context.resourceManager.getRawFd("test.xml", (error, value) => { if (error != null) { - console.log("error is " + error); + console.log(`callback getRawFd failed error code: ${error.code}, message: ${error.message}.`); } else { let fd = value.fd; let offset = value.offset; let length = value.length; } - }).catch(error => { - console.log("getRawFd callback error is " + error); - }); + }); + } catch (error) { + console.error(`callback getRawFd failed, error code: ${error.code}, message: ${error.message}.`) + }; ``` ### getRawFd9+ @@ -1421,10 +1422,10 @@ For details about the error codes, see [Resource Manager Error Codes](../errorco let offset = value.offset; let length = value.length; }).catch(error => { - console.log("getRawFd promise error is " + error); + console.log(`promise getRawFd error error code: ${error.code}, message: ${error.message}.`); }); } catch (error) { - console.log("getRawFd promise error is " + error); + console.error(`promise getRawFd failed, error code: ${error.code}, message: ${error.message}.`); }; ``` diff --git a/en/application-dev/reference/apis/js-apis-socket.md b/en/application-dev/reference/apis/js-apis-socket.md index cd0995948cc8354d05845c7156abcdfdfb558bda..1344f4c6ec574ebb464c844350f331d40804cce8 100644 --- a/en/application-dev/reference/apis/js-apis-socket.md +++ b/en/application-dev/reference/apis/js-apis-socket.md @@ -1,13 +1,12 @@ # Socket Connection ->![](public_sys-resources/icon-note.gif) **NOTE:** -> ->The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. +> **NOTE** > +> The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version. ## Modules to Import -``` +```js import socket from '@ohos.net.socket'; ``` @@ -19,7 +18,7 @@ Creates a **UDPSocket** object. **System capability**: SystemCapability.Communication.NetStack -**Return Value** +**Return value** | Type | Description | | :--------------------------------- | :---------------------- | @@ -28,7 +27,7 @@ Creates a **UDPSocket** object. **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); ``` @@ -43,7 +42,7 @@ bind\(address: NetAddress, callback: AsyncCallback\): void Binds the IP address and port number. The port number can be specified or randomly allocated by the system. This API uses an asynchronous callback to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -56,7 +55,7 @@ Binds the IP address and port number. The port number can be specified or random **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { if (err) { @@ -74,7 +73,7 @@ bind\(address: NetAddress\): Promise Binds the IP address and port number. The port number can be specified or randomly allocated by the system. This API uses a promise to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -85,7 +84,7 @@ Binds the IP address and port number. The port number can be specified or random | address | [NetAddress](#netaddress) | Yes | Destination address. For details, see [NetAddress](#netaddress).| -**Return Value** +**Return value** | Type | Description | | :-------------- | :----------------------------------------- | @@ -93,7 +92,7 @@ Binds the IP address and port number. The port number can be specified or random **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); let promise = udp.bind({address: '192.168.xx.xxx', port: 8080, family: 1}); promise .then(() => { @@ -112,7 +111,7 @@ Sends data over a UDPSocket connection. This API uses an asynchronous callback t Before sending data, call [UDPSocket.bind()](#bind) to bind the IP address and port. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -125,7 +124,7 @@ Before sending data, call [UDPSocket.bind()](#bind) to bind the IP address and p **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.send({ data:'Hello, server!', @@ -152,7 +151,7 @@ Sends data over a UDPSocket connection. This API uses a promise to return the re Before sending data, call [UDPSocket.bind()](#bind) to bind the IP address and port. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -162,7 +161,7 @@ Before sending data, call [UDPSocket.bind()](#bind) to bind the IP address and p | ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [UDPSendOptions](#udpsendoptions) | Yes | Parameters for sending data over the UDPSocket connection. For details, see [UDPSendOptions](#udpsendoptions).| -**Return Value** +**Return value** | Type | Description | | :-------------- | :--------------------------------------------- | @@ -170,7 +169,7 @@ Before sending data, call [UDPSocket.bind()](#bind) to bind the IP address and p **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); let promise = udp.send({ data:'Hello, server!', @@ -194,7 +193,7 @@ close\(callback: AsyncCallback\): void Closes a UDPSocket connection. This API uses an asynchronous callback to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -206,7 +205,7 @@ Closes a UDPSocket connection. This API uses an asynchronous callback to return **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.close(err => { if (err) { @@ -224,11 +223,11 @@ close\(\): Promise Closes a UDPSocket connection. This API uses a promise to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack -**Return Value** +**Return value** | Type | Description | | :-------------- | :----------------------------------------- | @@ -236,7 +235,7 @@ Closes a UDPSocket connection. This API uses a promise to return the result. **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); let promise = udp.close(); promise.then(() => { @@ -253,10 +252,10 @@ getState\(callback: AsyncCallback\): void Obtains the status of the UDPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -268,7 +267,7 @@ Obtains the status of the UDPSocket connection. This API uses an asynchronous ca **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { if (err) { @@ -293,14 +292,14 @@ getState\(\): Promise Obtains the status of the UDPSocket connection. This API uses a promise to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack -**Return Value** +**Return value** | Type | Description | | :----------------------------------------------- | :----------------------------------------- | @@ -308,7 +307,7 @@ Obtains the status of the UDPSocket connection. This API uses a promise to retur **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { if (err) { @@ -332,10 +331,10 @@ setExtraOptions\(options: UDPExtraOptions, callback: AsyncCallback\): voi Sets other properties of the UDPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -349,7 +348,7 @@ Sets other properties of the UDPSocket connection. This API uses an asynchronous **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.bind({address:'192.168.xx.xxx', port:xxxx, family:1}, err=> { if (err) { @@ -380,10 +379,10 @@ setExtraOptions\(options: UDPExtraOptions\): Promise Sets other properties of the UDPSocket connection. This API uses a promise to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -393,7 +392,7 @@ Sets other properties of the UDPSocket connection. This API uses a promise to re | ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [UDPExtraOptions](#udpextraoptions) | Yes | Other properties of the UDPSocket connection. For details, see [UDPExtraOptions](#udpextraoptions).| -**Return Value** +**Return value** | Type | Description | | :-------------- | :--------------------------------------------------- | @@ -401,7 +400,7 @@ Sets other properties of the UDPSocket connection. This API uses a promise to re **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); let promise = udp.bind({address:'192.168.xx.xxx', port:xxxx, family:1}); promise.then(() => { @@ -436,12 +435,12 @@ Enables listening for message receiving events of the UDPSocket connection. This | Name | Type | Mandatory| Description | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | -| type | string | Yes | Event type.
**message**: message receiving event| +| type | string | Yes | Type of the event to subscribe to.
**message**: message receiving event| | callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | Yes | Callback used to return the result. | **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.on('message', value => { console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo); @@ -455,7 +454,7 @@ off\(type: 'message', callback?: Callback<\{message: ArrayBuffer, remoteInfo: So Disables listening for message receiving events of the UDPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events. **System capability**: SystemCapability.Communication.NetStack @@ -464,18 +463,18 @@ Disables listening for message receiving events of the UDPSocket connection. Thi | Name | Type | Mandatory| Description | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | -| type | string | Yes | Event type.
**message**: message receiving event| +| type | string | Yes | Type of the event to subscribe to.
**message**: message receiving event| | callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | No | Callback used to return the result. | **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); let callback = value =>{ console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo); } udp.on('message', callback); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. udp.off('message', callback); udp.off('message'); ``` @@ -493,12 +492,12 @@ Enables listening for data packet message events or close events of the UDPSocke | Name | Type | Mandatory| Description | | -------- | ---------------- | ---- | ------------------------------------------------------------ | -| type | string | Yes | Event type.
- **listening**: data packet message event
- **close**: close event| +| type | string | Yes | Type of the event to subscribe to.

- **listening**: data packet message event
- **close**: close event| | callback | Callback\ | Yes | Callback used to return the result. | **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.on('listening', () => { console.log("on listening success"); @@ -515,7 +514,7 @@ off\(type: 'listening' | 'close', callback?: Callback\): void Disables listening for data packet message events or close events of the UDPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events. **System capability**: SystemCapability.Communication.NetStack @@ -524,25 +523,25 @@ Disables listening for data packet message events or close events of the UDPSock | Name | Type | Mandatory| Description | | -------- | ---------------- | ---- | ------------------------------------------------------------ | -| type | string | Yes | Event type.
- **listening**: data packet message event
- **close**: close event| +| type | string | Yes | Type of the event to subscribe to.
- **listening**: data packet message event
- **close**: close event| | callback | Callback\ | No | Callback used to return the result. | **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); let callback1 = () =>{ console.log("on listening, success"); } udp.on('listening', callback1); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. udp.off('listening', callback1); udp.off('listening'); let callback2 = () =>{ console.log("on close, success"); } udp.on('close', callback2); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. udp.off('close', callback2); udp.off('close'); ``` @@ -560,13 +559,13 @@ Enables listening for error events of the UDPSocket connection. This API uses an | Name | Type | Mandatory| Description | | -------- | ------------- | ---- | ------------------------------------ | -| type | string | Yes | Event type.
**error**: error event| +| type | string | Yes | Type of the event to subscribe to.
**error**: error event| | callback | ErrorCallback | Yes | Callback used to return the result. | **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); udp.on('error', err => { console.log("on error, err:" + JSON.stringify(err)) @@ -580,7 +579,7 @@ off\(type: 'error', callback?: ErrorCallback\): void Disables listening for error events of the UDPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events. **System capability**: SystemCapability.Communication.NetStack @@ -589,18 +588,18 @@ Disables listening for error events of the UDPSocket connection. This API uses a | Name | Type | Mandatory| Description | | -------- | ------------- | ---- | ------------------------------------ | -| type | string | Yes | Event type.
**error**: error event| +| type | string | Yes | Type of the event to subscribe to.
**error**: error event| | callback | ErrorCallback | No | Callback used to return the result. | **Example** -``` +```js let udp = socket.constructUDPSocketInstance(); let callback = err =>{ console.log("on error, err:" + JSON.stringify(err)); } udp.on('error', callback); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. udp.off('error', callback); udp.off('error'); ``` @@ -626,7 +625,7 @@ Defines the parameters for sending data over the UDPSocket connection. | Name | Type | Mandatory| Description | | ------- | ---------------------------------- | ---- | -------------- | -| data | string \| ArrayBuffer7+ | Yes | Data to send. | +| data | string \| ArrayBuffer7+ | Yes | Data to send. | | address | [NetAddress](#netaddress) | Yes | Destination address.| ## UDPExtraOptions @@ -645,7 +644,7 @@ Defines other properties of the UDPSocket connection. ## SocketStateBase -Defines the status of the UDPSocket connection. +Defines the status of the socket connection. **System capability**: SystemCapability.Communication.NetStack @@ -657,7 +656,7 @@ Defines the status of the UDPSocket connection. ## SocketRemoteInfo -Defines information about the UDPSocket connection. +Defines information about the socket connection. **System capability**: SystemCapability.Communication.NetStack @@ -676,7 +675,7 @@ Creates a **TCPSocket** object. **System capability**: SystemCapability.Communication.NetStack -**Return Value** +**Return value** | Type | Description | | :--------------------------------- | :---------------------- | @@ -684,7 +683,7 @@ Creates a **TCPSocket** object. **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); ``` @@ -699,7 +698,7 @@ bind\(address: NetAddress, callback: AsyncCallback\): void Binds the IP address and port number. The port number can be specified or randomly allocated by the system. This API uses an asynchronous callback to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -713,7 +712,7 @@ Binds the IP address and port number. The port number can be specified or random **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); tcp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { if (err) { @@ -731,7 +730,7 @@ bind\(address: NetAddress\): Promise Binds the IP address and port number. The port number can be specified or randomly allocated by the system. This API uses a promise to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -741,7 +740,7 @@ Binds the IP address and port number. The port number can be specified or random | ------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [NetAddress](#netaddress) | Yes | Destination address. For details, see [NetAddress](#netaddress).| -**Return Value** +**Return value** | Type | Description | | :-------------- | :------------------------------------------------------- | @@ -749,7 +748,7 @@ Binds the IP address and port number. The port number can be specified or random **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}); promise.then(() => { @@ -766,7 +765,7 @@ connect\(options: TCPConnectOptions, callback: AsyncCallback\): void Sets up a connection to the specified IP address and port number. This API uses an asynchronous callback to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -779,7 +778,7 @@ Sets up a connection to the specified IP address and port number. This API uses **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}, err => { if (err) { @@ -797,7 +796,7 @@ connect\(options: TCPConnectOptions\): Promise Sets up a connection to the specified IP address and port number. This API uses a promise to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -807,7 +806,7 @@ Sets up a connection to the specified IP address and port number. This API uses | ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPConnectOptions](#tcpconnectoptions) | Yes | TCPSocket connection parameters. For details, see [TCPConnectOptions](#tcpconnectoptions).| -**Return Value** +**Return value** | Type | Description | | :-------------- | :--------------------------------------------------------- | @@ -815,7 +814,7 @@ Sets up a connection to the specified IP address and port number. This API uses **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise.then(() => { @@ -832,10 +831,10 @@ send\(options: TCPSendOptions, callback: AsyncCallback\): void Sends data over a TCPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -848,7 +847,7 @@ Sends data over a TCPSocket connection. This API uses an asynchronous callback t **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise.then(() => { @@ -874,10 +873,10 @@ send\(options: TCPSendOptions\): Promise Sends data over a TCPSocket connection. This API uses a promise to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -887,7 +886,7 @@ Sends data over a TCPSocket connection. This API uses a promise to return the re | ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPSendOptions](#tcpsendoptions) | Yes | Parameters for sending data over the TCPSocket connection. For details, see [TCPSendOptions](#tcpsendoptions).| -**Return Value** +**Return value** | Type | Description | | :-------------- | :------------------------------------------------- | @@ -895,7 +894,7 @@ Sends data over a TCPSocket connection. This API uses a promise to return the re **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise1 = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise1.then(() => { @@ -920,7 +919,7 @@ close\(callback: AsyncCallback\): void Closes a TCPSocket connection. This API uses an asynchronous callback to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -933,7 +932,7 @@ Closes a TCPSocket connection. This API uses an asynchronous callback to return **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); tcp.close(err => { if (err) { @@ -951,11 +950,11 @@ close\(\): Promise Closes a TCPSocket connection. This API uses a promise to return the result. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack -**Return Value** +**Return value** | Type | Description | | :-------------- | :----------------------------------------- | @@ -963,7 +962,7 @@ Closes a TCPSocket connection. This API uses a promise to return the result. **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.close(); promise.then(() => { @@ -978,12 +977,12 @@ promise.then(() => { getRemoteAddress\(callback: AsyncCallback\): void -Obtains the remote address of a TCPSocket connection. This API uses an asynchronous callback to return the result. +Obtains the remote address of a socket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -995,7 +994,7 @@ Obtains the remote address of a TCPSocket connection. This API uses an asynchron **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise.then(() => { @@ -1017,16 +1016,16 @@ promise.then(() => { getRemoteAddress\(\): Promise -Obtains the remote address of a TCPSocket connection. This API uses a promise to return the result. +Obtains the remote address of a socket connection. This API uses a promise to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack -**Return Value** +**Return value** | Type | Description | | :------------------------------------------ | :------------------------------------------ | @@ -1034,7 +1033,7 @@ Obtains the remote address of a TCPSocket connection. This API uses a promise to **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise1 = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise1.then(() => { @@ -1057,10 +1056,10 @@ getState\(callback: AsyncCallback\): void Obtains the status of the TCPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) or [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -1073,7 +1072,7 @@ Obtains the status of the TCPSocket connection. This API uses an asynchronous ca **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise.then(() => { @@ -1097,14 +1096,14 @@ getState\(\): Promise Obtains the status of the TCPSocket connection. This API uses a promise to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) or [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack -**Return Value** +**Return value** | Type | Description | | :----------------------------------------------- | :----------------------------------------- | @@ -1113,7 +1112,7 @@ Obtains the status of the TCPSocket connection. This API uses a promise to retur **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise.then(() => { @@ -1136,10 +1135,10 @@ setExtraOptions\(options: TCPExtraOptions, callback: AsyncCallback\): voi Sets other properties of the TCPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) or [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -1152,7 +1151,7 @@ Sets other properties of the TCPSocket connection. This API uses an asynchronous **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise.then(() => { @@ -1185,10 +1184,10 @@ setExtraOptions\(options: TCPExtraOptions\): Promise Sets other properties of the TCPSocket connection. This API uses a promise to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >This API can be called only after [bind](#bind) or [connect](#connect) is successfully called. -**Required permission**: ohos.permission.INTERNET +**Required permissions**: ohos.permission.INTERNET **System capability**: SystemCapability.Communication.NetStack @@ -1198,7 +1197,7 @@ Sets other properties of the TCPSocket connection. This API uses a promise to re | ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | Yes | Other properties of the TCPSocket connection. For details, see [TCPExtraOptions](#tcpextraoptions).| -**Return Value** +**Return value** | Type | Description | | :-------------- | :--------------------------------------------------- | @@ -1207,7 +1206,7 @@ Sets other properties of the TCPSocket connection. This API uses a promise to re **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let promise = tcp.connect({ address: {address: '192.168.xx.xxx', port: xxxx, family: 1} , timeout: 6000}); promise.then(() => { @@ -1245,12 +1244,12 @@ Enables listening for message receiving events of the TCPSocket connection. This | Name | Type | Mandatory| Description | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | -| type | string | Yes | Event type.
**message**: message receiving event| +| type | string | Yes | Type of the event to subscribe to.
**message**: message receiving event| | callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | Yes | Callback used to return the result. | **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); tcp.on('message', value => { console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo) @@ -1264,7 +1263,7 @@ off\(type: 'message', callback?: Callback<\{message: ArrayBuffer, remoteInfo: So Disables listening for message receiving events of the TCPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events. **System capability**: SystemCapability.Communication.NetStack @@ -1273,18 +1272,18 @@ Disables listening for message receiving events of the TCPSocket connection. Thi | Name | Type | Mandatory| Description | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | -| type | string | Yes | Event type.
**message**: message receiving event| +| type | string | Yes | Type of the event to subscribe to.
**message**: message receiving event| | callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | No | Callback used to return the result. | **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let callback = value =>{ console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo); } tcp.on('message', callback); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. tcp.off('message', callback); tcp.off('message'); ``` @@ -1302,13 +1301,13 @@ Enables listening for connection or close events of the TCPSocket connection. Th | Name | Type | Mandatory| Description | | -------- | ---------------- | ---- | ------------------------------------------------------------ | -| type | string | Yes | Event type.
- **connect**: connection event
- **close**: close event| +| type | string | Yes | Type of the event to subscribe to.

- **connect**: connection event
- **close**: close event| | callback | Callback\ | Yes | Callback used to return the result. | **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); tcp.on('connect', () => { console.log("on connect success") @@ -1325,7 +1324,7 @@ off\(type: 'connect' | 'close', callback?: Callback\): void Disables listening for connection or close events of the TCPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events. **System capability**: SystemCapability.Communication.NetStack @@ -1334,25 +1333,25 @@ Disables listening for connection or close events of the TCPSocket connection. T | Name | Type | Mandatory| Description | | -------- | ---------------- | ---- | ------------------------------------------------------------ | -| type | string | Yes | Event type.
- **connect**: connection event
- **close**: close event| +| type | string | Yes | Type of the event to subscribe to.

- **connect**: connection event
- **close**: close event| | callback | Callback\ | No | Callback used to return the result. | **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let callback1 = () =>{ console.log("on connect success"); } tcp.on('connect', callback1); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. tcp.off('connect', callback1); tcp.off('connect'); let callback2 = () =>{ console.log("on close success"); } tcp.on('close', callback2); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. tcp.off('close', callback2); tcp.off('close'); ``` @@ -1370,12 +1369,12 @@ Enables listening for error events of the TCPSocket connection. This API uses an | Name | Type | Mandatory| Description | | -------- | ------------- | ---- | ------------------------------------ | -| type | string | Yes | Event type.
**error**: error event| +| type | string | Yes | Type of the event to subscribe to.
**error**: error event| | callback | ErrorCallback | Yes | Callback used to return the result. | **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); tcp.on('error', err => { console.log("on error, err:" + JSON.stringify(err)) @@ -1389,7 +1388,7 @@ off\(type: 'error', callback?: ErrorCallback\): void Disables listening for error events of the TCPSocket connection. This API uses an asynchronous callback to return the result. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>**NOTE** >You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events. **System capability**: SystemCapability.Communication.NetStack @@ -1398,18 +1397,18 @@ Disables listening for error events of the TCPSocket connection. This API uses a | Name | Type | Mandatory| Description | | -------- | ------------- | ---- | ------------------------------------ | -| type | string | Yes | Event type.
**error**: error event| +| type | string | Yes | Type of the event to subscribe to.
**error**: error event| | callback | ErrorCallback | No | Callback used to return the result. | **Example** -``` +```js let tcp = socket.constructTCPSocketInstance(); let callback = err =>{ console.log("on error, err:" + JSON.stringify(err)); } tcp.on('error', callback); -// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks. +// You can pass the **callback** of the **on** method to cancel listening for a certain type of callback. If you do not pass the **callback**, you will cancel listening for all callbacks. tcp.off('error', callback); tcp.off('error'); ``` @@ -1434,7 +1433,7 @@ Defines the parameters for sending data over the TCPSocket connection. | Name | Type | Mandatory| Description | | -------- | ------ | ---- | ------------------------------------------------------------ | -| data | string\| ArrayBuffer7+ | Yes | Data to send. | +| data | string\| ArrayBuffer7+ | Yes | Data to send. | | encoding | string | No | Character encoding format. The options are as follows: **UTF-8**, **UTF-16BE**, **UTF-16LE**, **UTF-16**, **US-AECII**, and **ISO-8859-1**. The default value is **UTF-8**.| ## TCPExtraOptions @@ -1453,3 +1452,1080 @@ Defines other properties of the TCPSocket connection. | sendBufferSize | number | No | Size of the send buffer, in bytes. | | reuseAddress | boolean | No | Whether to reuse addresses. The default value is **false**. | | socketTimeout | number | No | Timeout duration of the TCPSocket connection, in ms. | + +## socket.constructTLSSocketInstance9+ + +constructTLSSocketInstance(): TLSSocket + +Creates a **TLSSocket** object. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| :--------------------------------- | :---------------------- | +| [TLSSocket](#tlssocket9) | **TLSSocket** object.| + +**Example** + +```js +let tls = socket.constructTLSSocketInstance(); +``` + +## TLSSocket9+ + +Defines a TLSSocket connection. Before invoking TLSSocket APIs, you need to call [socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9) to create a **TLSSocket** object. + +### bind9+ + +bind\(address: NetAddress, callback: AsyncCallback\): void + +Binds the IP address and port number. This API uses an asynchronous callback to return the result. + +**Required permissions**: ohos.permission.INTERNET + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | +| address | [NetAddress](#netaddress) | Yes | Destination address. For details, see [NetAddress](#netaddress).| +| callback | AsyncCallback\ | Yes | Callback used to return the result. If the operation is successful, the result of binding the local IP address and port number is returned. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ----------------------- | +| 401 | Parameter error. | +| 201 | Permission denied. | +| 2303198 | Address already in use. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +``` + +### bind9+ + +bind\(address: NetAddress\): Promise + +Binds the IP address and port number. This API uses a promise to return the result. + +**Required permissions**: ohos.permission.INTERNET + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | +| address | [NetAddress](#netaddress) | Yes | Destination address. For details, see [NetAddress](#netaddress).| + +**Return value** + +| Type | Description | +| :-------------- | :------------------------------------------------------- | +| Promise\ | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ----------------------- | +| 401 | Parameter error. | +| 201 | Permission denied. | +| 2303198 | Address already in use. | +| 2300002 | System internal error. | + +**Example** + +```js +let promise = tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}); +promise.then(() => { + console.log('bind success'); +}).catch(err => { + console.log('bind fail'); +}); +``` + +### getState9+ + +getState\(callback: AsyncCallback\): void + +Obtains the status of the TLSSocket connection. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | ------------------------------------------------------ | ---- | ---------- | +| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)> | Yes | Callback used to return the result. If the operation is successful, the status of the TLSSocket connection is returned. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303188 | Socket operation on non-socket.| +| 2300002 | System internal error. | + +**Example** + +```js +let promise = tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +tls.getState((err, data) => { + if (err) { + console.log('getState fail'); + return; + } + console.log('getState success:' + JSON.stringify(data)); +}); +``` + +### getState9+ + +getState\(\): Promise + +Obtains the status of the TLSSocket connection. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| :----------------------------------------------- | :----------------------------------------- | +| Promise\<[SocketStateBase](#socketstatebase)> | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303188 | Socket operation on non-socket.| +| 2300002 | System internal error. | + +**Example** + +```js +tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +let promise = tls.getState(); +promise.then(() => { + console.log('getState success'); +}).catch(err => { + console.log('getState fail'); +}); +``` + +### setExtraOptions9+ + +setExtraOptions\(options: TCPExtraOptions, callback: AsyncCallback\): void + +Sets other properties of the TCPSocket connection after successful binding of the local IP address and port number of the TLSSocket connection. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | +| options | [TCPExtraOptions](#tcpextraoptions) | Yes | Other properties of the TCPSocket connection. For details, see [TCPExtraOptions](#tcpextraoptions).| +| callback | AsyncCallback\ | Yes | Callback used to return the result. If the operation is successful, the result of setting other properties of the TCPSocket connection is returned. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ----------------------------- | +| 401 | Parameter error. | +| 2303188 | Socket operation on non-socket.| +| 2300002 | System internal error. | + +**Example** + +```js +tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); + +tls.setExtraOptions({ + keepAlive: true, + OOBInline: true, + TCPNoDelay: true, + socketLinger: { on:true, linger:10 }, + receiveBufferSize: 1000, + sendBufferSize: 1000, + reuseAddress: true, + socketTimeout: 3000, +},err => { + if (err) { + console.log('setExtraOptions fail'); + return; + } + console.log('setExtraOptions success'); +}); +``` + +### setExtraOptions9+ + +setExtraOptions\(options: TCPExtraOptions\): Promise + +Sets other properties of the TCPSocket connection after successful binding of the local IP address and port number of the TLSSocket connection. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | +| options | [TCPExtraOptions](#tcpextraoptions) | Yes | Other properties of the TCPSocket connection. For details, see [TCPExtraOptions](#tcpextraoptions).| + +**Return value** + +| Type | Description | +| :-------------- | :--------------------------------------------------- | +| Promise\ | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 401 | Parameter error. | +| 2303188 | Socket operation on non-socket.| +| 2300002 | System internal error. | + +**Example** + +```js +tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +let promise = tls.setExtraOptions({ + keepAlive: true, + OOBInline: true, + TCPNoDelay: true, + socketLinger: { on:true, linger:10 }, + receiveBufferSize: 1000, + sendBufferSize: 1000, + reuseAddress: true, + socketTimeout: 3000, +}); +promise.then(() => { + console.log('setExtraOptions success'); +}).catch(err => { + console.log('setExtraOptions fail'); +}); +``` + +### connect9+ + +connect(options: TLSConnectOptions, callback: AsyncCallback\): void + +Sets up a TLSSocket connection, and creates and initializes a TLS session after successful binding of the local IP address and port number of the TLSSocket connection. During this process, a TLS/SSL handshake is performed between the application and the server to implement data transmission. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description| +| -------- | ---------------------------------------| ----| --------------- | +| options | [TLSConnectOptions](#tlsconnectoptions9) | Yes | Parameters required for the TLSSocket connection.| +| callback | AsyncCallback\ | Yes | Callback used to return the result. If the operation is successful, no value is returned. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | -------------------------------------------- | +| 401 | Parameter error. | +| 2303104 | Interrupted system call. | +| 2303109 | Bad file number. | +| 2303111 | Resource temporarily unavailable try again. | +| 2303113 | System permission denied. | +| 2303188 | Socket operation on non-socket. | +| 2303191 | Protocol wrong type for socket. | +| 2303198 | Address already in use. | +| 2303199 | Cannot assign requested address. | +| 2303210 | Connection timed out. | +| 2303501 | SSL is null. | +| 2303502 | Error in tls reading. | +| 2303503 | Error in tls writing | +| 2303505 | Error occurred in the tls system call. | +| 2303506 | Error clearing tls connection. | +| 2300002 | System internal error. | + +**Example** + +```js +let tlsTwoWay = socket.constructTLSSocketInstance(); // Two way authentication +tlsTwoWay.bind({address: '192.168.xxx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +let options = { + ALPNProtocols: ["spdy/1", "http/1.1"], + address: { + address: "192.168.xx.xxx", + port: xxxx, + family: 1, + }, + secureOptions: { + key: "xxxx", + cert: "xxxx", + ca: ["xxxx"], + passwd: "xxxx", + protocols: [socket.Protocol.TLSv12], + useRemoteCipherPrefer: true, + signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", + cipherSuite: "AES256-SHA256", + }, +}; +tlsTwoWay.connect(options, (err, data) => { + console.error(err); + console.log(data); +}); + +let tlsOneWay = socket.constructTLSSocketInstance(); // One way authentication +tlsOneWay.bind({address: '192.168.xxx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +let oneWayOptions = { + address: { + address: "192.168.xxx.xxx", + port: xxxx, + family: 1, + }, + secureOptions: { + ca: ["xxxx","xxxx"], + cipherSuite: "AES256-SHA256", + }, +}; +tlsOneWay.connect(oneWayOptions, (err, data) => { + console.error(err); + console.log(data); +}); +``` + +### connect9+ + +connect(options: TLSConnectOptions): Promise\ + +Sets up a TLSSocket connection, and creates and initializes a TLS session after successful binding of the local IP address and port number of the TLSSocket connection. During this process, a TLS/SSL handshake is performed between the application and the server to implement data transmission. Both two-way and one-way authentication modes are supported. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description| +| -------- | --------------------------------------| ----| --------------- | +| options | [TLSConnectOptions](#tlsconnectoptions9) | Yes | Parameters required for the connection.| + +**Return value** + +| Type | Description | +| ------------------------------------------- | ----------------------------- | +| Promise\ | Promise used to return the result. If the operation is successful, no value is returned. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | -------------------------------------------- | +| 401 | Parameter error. | +| 2303104 | Interrupted system call. | +| 2303109 | Bad file number. | +| 2303111 | Resource temporarily unavailable try again. | +| 2303113 | System permission denied. | +| 2303188 | Socket operation on non-socket. | +| 2303191 | Protocol wrong type for socket. | +| 2303198 | Address already in use. | +| 2303199 | Cannot assign requested address. | +| 2303210 | Connection timed out. | +| 2303501 | SSL is null. | +| 2303502 | Error in tls reading. | +| 2303503 | Error in tls writing | +| 2303505 | Error occurred in the tls system call. | +| 2303506 | Error clearing tls connection. | +| 2300002 | System internal error. | + +**Example** + +```js +let tlsTwoWay = socket.constructTLSSocketInstance(); // Two way authentication +tlsTwoWay.bind({address: '192.168.xxx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +let options = { + ALPNProtocols: ["spdy/1", "http/1.1"], + address: { + address: "xxxx", + port: xxxx, + family: 1, + }, + secureOptions: { + key: "xxxx", + cert: "xxxx", + ca: ["xxxx"], + passwd: "xxxx", + protocols: [socket.Protocol.TLSv12], + useRemoteCipherPrefer: true, + signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", + cipherSuite: "AES256-SHA256", + }, +}; +tlsTwoWay.connect(options).then(data => { + console.log(data); +}).catch(err => { + console.error(err); +}); + +let tlsOneWay = socket.constructTLSSocketInstance(); // One way authentication +tlsOneWay.bind({address: '192.168.xxx.xxx', port: xxxx, family: 1}, err => { + if (err) { + console.log('bind fail'); + return; + } + console.log('bind success'); +}); +let oneWayOptions = { + address: { + address: "192.168.xxx.xxx", + port: xxxx, + family: 1, + }, + secureOptions: { + ca: ["xxxx","xxxx"], + cipherSuite: "AES256-SHA256", + }, +}; +tlsOneWay.connect(oneWayOptions).then(data => { + console.log(data); +}).catch(err => { + console.error(err); +}); +``` + +### getRemoteAddress9+ + +getRemoteAddress\(callback: AsyncCallback\): void + +Obtains the remote address of a TLSSocket connection. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | ------------------------------------------------- | ---- | ---------- | +| callback | AsyncCallback\<[NetAddress](#netaddress)> | Yes | Callback used to return the result. If the operation is successful, the remote address is returned. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ----------------------------- | +| 2303188 | Socket operation on non-socket.| +| 2300002 | System internal error. | + +**Example** + +```js +tls.getRemoteAddress((err, data) => { + if (err) { + console.log('getRemoteAddress fail'); + return; + } + console.log('getRemoteAddress success:' + JSON.stringify(data)); +}); +``` + +### getRemoteAddress9+ + +getRemoteAddress\(\): Promise\ + +Obtains the remote address of a TLSSocket connection. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| :------------------------------------------ | :------------------------------------------ | +| Promise\<[NetAddress](#netaddress)> | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303188 | Socket operation on non-socket.| +| 2300002 | System internal error. | + +**Example** + +```js +let promise = tls.getRemoteAddress(); +promise.then(() => { + console.log('getRemoteAddress success'); +}).catch(err => { + console.log('getRemoteAddress fail'); +}); +``` + +### getCertificate9+ + +getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)>): void + +Obtains the local digital certificate after a TLSSocket connection is established. This API is applicable to two-way authentication. It uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description| +| -------- | ----------------------------------------| ---- | ---------------| +| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)> | Yes | Callback used to return the result. If the operation is successful, the local certificate is returned. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2303504 | Error looking up x509. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getCertificate((err, data) => { + if (err) { + console.log("getCertificate callback error = " + err); + } else { + console.log("getCertificate callback = " + data); + } +}); +``` + +### getCertificate9+ + +getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)> + +Obtains the local digital certificate after a TLSSocket connection is established. This API is applicable to two-way authentication. It uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| -------------- | -------------------- | +| Promise\<[X509CertRawData](#x509certrawdata9)> | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2303504 | Error looking up x509. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getCertificate().then(data => { + console.log(data); +}).catch(err => { + console.error(err); +}); +``` + +### getRemoteCertificate9+ + +getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)>): void + +Obtains the digital certificate of the server after a TLSSocket connection is established. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory | Description | +| -------- | ----------------------------------------| ---- | ---------------| +| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)> | Yes | Callback used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getRemoteCertificate((err, data) => { + if (err) { + console.log("getRemoteCertificate callback error = " + err); + } else { + console.log("getRemoteCertificate callback = " + data); + } +}); +``` + +### getRemoteCertificate9+ + +getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)> + +Obtains the digital certificate of the server after a TLSSocket connection is established. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| -------------- | -------------------- | +| Promise\<[X509CertRawData](#x509certrawdata9)> | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getRemoteCertificate().then(data => { + console.log(data); +}).catch(err => { + console.error(err); +}); +``` + +### getProtocol9+ + +getProtocol(callback: AsyncCallback\): void + +Obtains the communication protocol version after a TLSSocket connection is established. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | ----------------------------------------| ---- | ---------------| +| callback | AsyncCallback\ | Yes | Callback used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ----------------------------- | +| 2303501 | SSL is null. | +| 2303505 | Error occurred in the tls system call. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getProtocol((err, data) => { + if (err) { + console.log("getProtocol callback error = " + err); + } else { + console.log("getProtocol callback = " + data); + } +}); +``` + +### getProtocol9+ + +getProtocol():Promise\ + +Obtains the communication protocol version after a TLSSocket connection is established. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| -------------- | -------------------- | +| Promise\ | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2303505 | Error occurred in the tls system call. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getProtocol().then(data => { + console.log(data); +}).catch(err => { + console.error(err); +}); +``` + +### getCipherSuite9+ + +getCipherSuite(callback: AsyncCallback\>): void + +Obtains the cipher suite negotiated by both communication parties after a TLSSocket connection is established. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description| +| -------- | ----------------------------------------| ---- | ---------------| +| callback | AsyncCallback\> | Yes | Callback used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2303502 | Error in tls reading. | +| 2303505 | Error occurred in the tls system call. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getCipherSuite((err, data) => { + if (err) { + console.log("getCipherSuite callback error = " + err); + } else { + console.log("getCipherSuite callback = " + data); + } +}); +``` + +### getCipherSuite9+ + +getCipherSuite(): Promise\> + +Obtains the cipher suite negotiated by both communication parties after a TLSSocket connection is established. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| ---------------------- | --------------------- | +| Promise\> | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2303502 | Error in tls reading. | +| 2303505 | Error occurred in the tls system call. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getCipherSuite().then(data => { + console.log(data); +}).catch(err => { + console.error(err); +}); +``` + +### getSignatureAlgorithms9+ + +getSignatureAlgorithms(callback: AsyncCallback\>): void + +Obtains the signing algorithm negotiated by both communication parties after a TLSSocket connection is established. This API is applicable to two-way authentication. It uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | -------------------------------------| ---- | ---------------| +| callback | AsyncCallback\> | Yes | Callback used to return the result. | + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getSignatureAlgorithms((err, data) => { + if (err) { + console.log("getSignatureAlgorithms callback error = " + err); + } else { + console.log("getSignatureAlgorithms callback = " + data); + } +}); +``` + +### getSignatureAlgorithms9+ + +getSignatureAlgorithms(): Promise\> + +Obtains the signing algorithm negotiated by both communication parties after a TLSSocket connection is established. This API is applicable to two-way authentication. It uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| ---------------------- | -------------------- | +| Promise\> | Promise used to return the result.| + +**Error codes** + +| ID| Error Message | +| ------- | ------------------------------ | +| 2303501 | SSL is null. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.getSignatureAlgorithms().then(data => { + console.log(data); +}).catch(err => { + console.error(err); +}); +``` + +### send9+ + +send(data: string, callback: AsyncCallback\): void + +Sends a message to the server after a TLSSocket connection is established. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | -----------------------------| ---- | ---------------| +| data | string | Yes | Data content of the message to send. | +| callback | AsyncCallback\ | Yes | Callback used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | -------------------------------------------- | +| 401 | Parameter error. | +| 2303501 | SSL is null. | +| 2303503 | Error in tls writing | +| 2303505 | Error occurred in the tls system call. | +| 2303506 | Error clearing tls connection. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.send("xxxx", (err) => { + if (err) { + console.log("send callback error = " + err); + } else { + console.log("send success"); + } +}); +``` + +### send9+ + +send(data: string): Promise\ + +Sends a message to the server after a TLSSocket connection is established. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | -----------------------------| ---- | ---------------| +| data | string | Yes | Data content of the message to send. | + +**Error codes** + +| ID| Error Message | +| ------- | -------------------------------------------- | +| 401 | Parameter error. | +| 2303501 | SSL is null. | +| 2303503 | Error in tls writing | +| 2303505 | Error occurred in the tls system call. | +| 2303506 | Error clearing tls connection. | +| 2300002 | System internal error. | + +**Return value** + +| Type | Description | +| -------------- | -------------------- | +| Promise\ | Promise used to return the result. If the operation fails, an error message is returned.| + +**Example** + +```js +tls.send("xxxx").then(() =>{ + console.log("send success"); +}).catch(err => { + console.error(err); +}); +``` + +### close9+ + +close(callback: AsyncCallback\): void + +Closes a TLSSocket connection. This API uses an asynchronous callback to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Parameters** + +| Name | Type | Mandatory| Description | +| -------- | -----------------------------| ---- | ---------------| +| callback | AsyncCallback\ | Yes | Callback used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | -------------------------------------------- | +| 2303501 | SSL is null. | +| 2303505 | Error occurred in the tls system call. | +| 2303506 | Error clearing tls connection. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.close((err) => { + if (err) { + console.log("close callback error = " + err); + } else { + console.log("close success"); + } +}); +``` + +### close9+ + +close(): Promise\ + +Closes a TLSSocket connection. This API uses a promise to return the result. + +**System capability**: SystemCapability.Communication.NetStack + +**Return value** + +| Type | Description | +| -------------- | -------------------- | +| Promise\ | Promise used to return the result. If the operation fails, an error message is returned.| + +**Error codes** + +| ID| Error Message | +| ------- | -------------------------------------------- | +| 2303501 | SSL is null. | +| 2303505 | Error occurred in the tls system call. | +| 2303506 | Error clearing tls connection. | +| 2300002 | System internal error. | + +**Example** + +```js +tls.close().then(() =>{ + console.log("close success"); +}).catch(err => { + console.error(err); +}); +``` + +## TLSConnectOptions9+ + +Defines TLS connection options. + +**System capability**: SystemCapability.Communication.NetStack + +| Name | Type | Mandatory| Description | +| -------------- | ------------------------------------- | --- |-------------- | +| address | [NetAddress](#netaddress) | Yes | Gateway address. | +| secureOptions | [TLSSecureOptions](#tlssecureoptions9) | Yes| TLS security options.| +| ALPNProtocols | Array\ | No| Application Layer Protocol Negotiation (ALPN) protocols. | + +## TLSSecureOptions9+ + +Defines TLS security options. The CA certificate is mandatory, and other parameters are optional. When **cert** (local certificate) and **key** (private key) are not empty, the two-way authentication mode is enabled. If **cert** or **key** is empty, one-way authentication is enabled. + +**System capability**: SystemCapability.Communication.NetStack + +| Name | Type | Mandatory| Description | +| --------------------- | ------------------------------------------------------ | --- |----------------------------------- | +| ca | string \| Array\ | Yes| CA certificate of the server, which is used to authenticate the digital certificate of the server.| +| cert | string | No| Digital certificate of the local client. | +| key | string | No| Private key of the local digital certificate. | +| passwd | string | No| Password for reading the private key. | +| protocols | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)> | No| TLS protocol version. | +| useRemoteCipherPrefer | boolean | No| Whether to use the remote cipher suite preferentially. | +| signatureAlgorithms | string | No| Signing algorithm used during communication. | +| cipherSuite | string | No| Cipher suite used during communication. | + +## Protocol9+ + +Enumerates TLS protocol versions. + +**System capability**: SystemCapability.Communication.NetStack + +| Name | Value | Description | +| --------- | --------- |------------------ | +| TLSv12 | "TLSv1.2" | TLSv1.2.| +| TLSv13 | "TLSv1.3" | TLSv1.3.| + +## X509CertRawData9+ + +Defines the certificate raw data. + +**System capability**: SystemCapability.Communication.NetStack + +| Type | Description | +| --------------------------------------------------------------------- | --------------------- | +|[cryptoFramework.EncodingBlob](js-apis-cryptoFramework.md#datablob) | Data and encoding format of the certificate.| diff --git a/en/application-dev/reference/apis/js-apis-system-location.md b/en/application-dev/reference/apis/js-apis-system-location.md index 80101da6c810604815880a98aab09588af833918..fd4fba8512b1cdecae82339ef31a4b293f022aef 100644 --- a/en/application-dev/reference/apis/js-apis-system-location.md +++ b/en/application-dev/reference/apis/js-apis-system-location.md @@ -1,8 +1,8 @@ # Geographic Location > **NOTE** +> - The APIs of this module are no longer maintained since API version 7. You are advised to use [`@ohos.geolocation`](js-apis-geolocation.md). > - The initial APIs of this module are supported since API version 3. Newly added APIs will be marked with a superscript to indicate their earliest API version. -> - The APIs provided by this module are no longer maintained since API version 9. You are advised to use [geoLocationManager](js-apis-geoLocationManager.md) instead. ## Modules to Import @@ -18,15 +18,12 @@ import geolocation from '@system.geolocation'; ohos.permission.LOCATION -## geolocation.getLocation(deprecated) +## geolocation.getLocation getLocation(Object): void Obtains the geographic location. -> **NOTE** -> This API is deprecated since API version 9. You are advised to use [geoLocationManager.getCurrentLocation](js-apis-geoLocationManager.md#geolocationmanagergetcurrentlocation). - **System capability**: SystemCapability.Location.Location.Lite **Parameters** @@ -77,15 +74,12 @@ export default { ``` -## geolocation.getLocationType(deprecated) +## geolocation.getLocationType getLocationType(Object): void Obtains the supported location types. -> **NOTE** -> This API is deprecated since API version 9. - **System capability**: SystemCapability.Location.Location.Lite **Parameters** @@ -120,15 +114,12 @@ export default { ``` -## geolocation.subscribe(deprecated) +## geolocation.subscribe subscribe(Object): void Listens to the geographical location. If this method is called multiple times, the last call takes effect. -> **NOTE** -> This API is deprecated since API version 9. You are advised to use [geoLocationManager.on('locationChange')](js-apis-geoLocationManager.md#geolocationmanageronlocationchange). - **System capability**: SystemCapability.Location.Location.Lite **Parameters** @@ -175,15 +166,12 @@ export default { ``` -## geolocation.unsubscribe(deprecated) +## geolocation.unsubscribe unsubscribe(): void Cancels listening to the geographical location. -> **NOTE** -> This API is deprecated since API version 9. You are advised to use [geoLocationManager.off('locationChange')](js-apis-geoLocationManager.md#geolocationmanagerofflocationchange). - **System capability**: SystemCapability.Location.Location.Lite **Example** @@ -197,15 +185,12 @@ export default { ``` -## geolocation.getSupportedCoordTypes(deprecated) +## geolocation.getSupportedCoordTypes getSupportedCoordTypes(): Array<string> Obtains coordinate system types supported by the device. -> **NOTE** -> This API is deprecated since API version 9. - **System capability**: SystemCapability.Location.Location.Lite **Return Value** diff --git a/en/application-dev/reference/apis/js-apis-usb-deprecated.md b/en/application-dev/reference/apis/js-apis-usb-deprecated.md index d21f6372b5fe26f6e8aeded00e3245b2def23428..ca250939af9aadf2c544dee30431c889331d332e 100644 --- a/en/application-dev/reference/apis/js-apis-usb-deprecated.md +++ b/en/application-dev/reference/apis/js-apis-usb-deprecated.md @@ -348,7 +348,7 @@ let ret = usb.getFileDescriptor(devicepipe); ## usb.controlTransfer -controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise<number> +controlTransfer(pipe: USBDevicePipe, controlparam: USBControlParams, timeout?: number): Promise<number> Performs control transfer. @@ -361,7 +361,7 @@ Before you do this, call [usb.getDevices](#usbgetdevices) to obtain the USB devi | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | pipe | [USBDevicePipe](#usbdevicepipe) | Yes| USB device pipe, which is used to determine the USB device.| -| contrlparam | [USBControlParams](#usbcontrolparams) | Yes| Control transfer parameters.| +| controlparam | [USBControlParams](#usbcontrolparams) | Yes| Control transfer parameters.| | timeout | number | No| Timeout duration in ms. This parameter is optional. The default value is **0**, indicating no timeout.| **Return value** diff --git a/en/device-dev/subsystems/subsys-build-gn-hap-compilation-guide.md b/en/device-dev/subsystems/subsys-build-gn-hap-compilation-guide.md index 864fcc51756bf4c99a8c8be2f4578e98b88fee5d..1826640aa51bd09a66a8f72c5d5a0bacdbca76ea 100644 --- a/en/device-dev/subsystems/subsys-build-gn-hap-compilation-guide.md +++ b/en/device-dev/subsystems/subsys-build-gn-hap-compilation-guide.md @@ -9,7 +9,7 @@ | Ability | An abstraction of a functionality that an application can provide. It is the minimum unit for the system to schedule the application. An application can contain one or more **Ability** instances.| | FA | Feature Ability, an ability that provides a UI for user interaction in the ability framework of the FA model. The FA supports only the Page ability template.| | PA | Particle Ability, an ability that does not have a UI in the ability framework of the FA model. It provides services and support for FAs. For example, a PA can function as a background service to provide computing power or as a data store to provide data access capabilities. The PA supports three types of templates: Service, Data, and Form ability templates.| -| FA model | One of the two ability framework models. The FA model applies to application development using API version 8 and earlier versions. The FA model provides FAs and PAs. The FA supports the Page ability template, and the PA supports the Service, Data, and Form ability templates. For details, see [FA Model Overview](../../application-dev/ability/fa-brief.md).| +| FA model | One of the two ability framework models. The FA model applies to application development using API version 8 and earlier versions. The FA model provides FAs and PAs. The FA supports the Page ability template, and the PA supports the Service, Data, and Form ability templates. For details, see [FA Model Overview](../../application-dev/ability-deprecated/fa-brief.md).| | Stage model| One of the two ability framework models. The stage model applies to application development using API version 9 and later versions. The stage model provides abilities and Extension abilities. The latter ones are extended to Service Extension abilities, Form Extension abilities, Data Share Extension abilities, and more.| ### Function diff --git a/zh-cn/application-dev/internationalization/i18n-guidelines.md b/zh-cn/application-dev/internationalization/i18n-guidelines.md index 0c36d307e930eaedd8278b4878c093a69676592d..8bf711e99801cff4cfbdc58b81a6f4b74722a041 100644 --- a/zh-cn/application-dev/internationalization/i18n-guidelines.md +++ b/zh-cn/application-dev/internationalization/i18n-guidelines.md @@ -49,7 +49,7 @@ ```js try { I18n.System.setSystemLanguage("en"); // 将系统语言设置为 "en" - var language = I18n.System.getSystemLanguage(); // language = "en" + let language = I18n.System.getSystemLanguage(); // language = "en" } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -63,7 +63,7 @@ ```js try { I18n.System.setSystemRegion("CN"); // 将系统国家设置为 "CN" - var region = I18n.System.getSystemRegion(); // region = "CN" + let region = I18n.System.getSystemRegion(); // region = "CN" } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -77,7 +77,7 @@ ```js try { I18n.System.setSystemLocale("zh-Hans-CN"); // 将系统Locale设置为 "zh-Hans-CN" - var locale = I18n.System.getSystemLocale(); // locale = "zh-Hans-CN" + let locale = I18n.System.getSystemLocale(); // locale = "zh-Hans-CN" } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -88,9 +88,8 @@ 调用isRTL接口获取Locale的语言是否为从右到左语言。 ```js - try { - var rtl = I18n.isRTL("zh-CN"); // rtl = false + let rtl = I18n.isRTL("zh-CN"); // rtl = false rtl = I18n.isRTL("ar"); // rtl = true } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) @@ -103,10 +102,9 @@ 调用is24HourClock接口来判断当前是否打开系统24小时制设置。 ```js - try { I18n.System.set24HourClock(true); - var hourClock = I18n.System.is24HourClock(); // hourClock = true + let hourClock = I18n.System.is24HourClock(); // hourClock = true } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -117,12 +115,11 @@ 调用getDisplayLanguage接口获取某一语言的本地化表示。其中,language表示待本地化显示的语言,locale表示本地化的Locale,sentenceCase结果是否需要首字母大写。 ```js - try { - var language = "en"; - var locale = "zh-CN"; - var sentenceCase = false; - var localizedLanguage = I18n.System.getDisplayLanguage(language, locale, sentenceCase); // localizedLanguage = "英语" + let language = "en"; + let locale = "zh-CN"; + let sentenceCase = false; + let localizedLanguage = I18n.System.getDisplayLanguage(language, locale, sentenceCase); // localizedLanguage = "英语" } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -133,12 +130,11 @@ 调用getDisplayCountry接口获取某一国家的本地化表示。其中,country表示待本地化显示的国家,locale表示本地化的Locale,sentenceCase结果是否需要首字母大写。 ```js - try { - var country = "US"; - var locale = "zh-CN"; - var sentenceCase = false; - var localizedCountry = I18n.System.getDisplayCountry(country, locale, sentenceCase); // localizedCountry = "美国" + let country = "US"; + let locale = "zh-CN"; + let sentenceCase = false; + let localizedCountry = I18n.System.getDisplayCountry(country, locale, sentenceCase); // localizedCountry = "美国" } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -151,8 +147,8 @@ ```js try { - var languageList = I18n.System.getSystemLanguages(); // languageList = ["en-Latn-US", "zh-Hans"] - var countryList = I18n.System.getSystemCountries("zh"); // countryList = ["ZW", "YT", ..., "CN", "DE"], 共240个国家和地区 + let languageList = I18n.System.getSystemLanguages(); // languageList = ["en-Latn-US", "zh-Hans"] + let countryList = I18n.System.getSystemCountries("zh"); // countryList = ["ZW", "YT", ..., "CN", "DE"], 共240个国家和地区 } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -164,7 +160,7 @@ ```js try { - var isSuggest = I18n.System.isSuggested("zh", "CN"); // isSuggest = true + let isSuggest = I18n.System.isSuggested("zh", "CN"); // isSuggest = true } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -181,10 +177,10 @@ ```js try { I18n.System.addPreferredLanguage("en-GB", 0); // 将"en-GB"设置为系统偏好语言列表的第一个语言 - var list = I18n.System.getPreferredLanguageList(); // 获取当前系统偏好语言列表 list = ["en-GB", ...] + let list = I18n.System.getPreferredLanguageList(); // 获取当前系统偏好语言列表 list = ["en-GB", ...] I18n.System.removePreferredLanguage(list.length - 1); // 移除当前系统偏好语言列表中的最后一个偏好语言 - var firstPreferredLanguage = I18n.System.getFirstPreferredLanguage(); // firstPreferredLanguage = "en-GB" - var appPreferredLanguage = I18n.System.getAppPreferredLanguage(); // 当应用中包含 "en-GB"资源时,应用偏好语言为"en-GB" + let firstPreferredLanguage = I18n.System.getFirstPreferredLanguage(); // firstPreferredLanguage = "en-GB" + let appPreferredLanguage = I18n.System.getAppPreferredLanguage(); // 当应用中包含 "en-GB"资源时,应用偏好语言为"en-GB" } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -199,7 +195,7 @@ ```js try { I18n.System.setUsingLocalDigit(true); // 打开本地化数字开关 - var status = I18n.System.getUsingLocalDigit(); // status = true + let status = I18n.System.getUsingLocalDigit(); // status = true } catch(error) { console.error(`call i18n.System interface failed, error code: ${error.code}, message: ${error.message}`) } @@ -239,7 +235,7 @@ try { 调用getCalendar接口获取指定locale和type的时区对象(i18n为导入的模块)。其中,type表示合法的日历类型,目前合法的日历类型包括:"buddhist", "chinese", "coptic", "ethiopic", "hebrew", "gregory", "indian", "islamic_civil", "islamic_tbla", "islamic_umalqura", "japanese", "persian"。当type没有给出时,采用区域默认的日历类型。 ```js - var calendar = I18n.getCalendar("zh-CN", "chinese"); // 创建中文农历日历 + let calendar = I18n.getCalendar("zh-CN", "chinese"); // 创建中文农历日历 ``` 3. 设置日历对象的时间。 @@ -247,9 +243,9 @@ try { 调用setTime接口设置日历对象的时间。setTime接口接收两种类型的参数。一种是传入一个Date对象,另一种是传入一个数值表示从1970.1.1 00:00:00 GMT逝去的毫秒数。 ```js - var date1 = new Date(); + let date1 = new Date(); calendar.setTime(date1); - var date2 = 1000; + let date2 = 1000; calendar.setTime(date2); ``` @@ -267,7 +263,7 @@ try { ```js calendar.setTimeZone("Asia/Shanghai"); - var timezone = calendar.getTimeZone(); // timezone = "China Standard Time" + let timezone = calendar.getTimeZone(); // timezone = "China Standard Time" ``` 6. 设置、获取日历对象的一周起始日。 @@ -276,7 +272,7 @@ try { ```js calendar.setFirstDayOfWeek(1); - var firstDayOfWeek = calendar.getFirstDayOfWeek(); // firstDayOfWeek = 1 + let firstDayOfWeek = calendar.getFirstDayOfWeek(); // firstDayOfWeek = 1 ``` 7. 设置、获取日历对象第一周的最小天数。 @@ -284,14 +280,14 @@ try { ```js calendar.setMinimalDaysInFirstWeek(3); - var minimalDaysInFirstWeek = calendar.getMinimalDaysInFirstWeek(); // minimalDaysInFirstWeek = 3 + let minimalDaysInFirstWeek = calendar.getMinimalDaysInFirstWeek(); // minimalDaysInFirstWeek = 3 ``` 8. 获取日历对象的本地化显示。 调用getDisplayName来获取日历对象的本地化显示。 ```js - var localizedName = calendar.getDisplayName("zh-CN"); // localizedName = "农历" + let localizedName = calendar.getDisplayName("zh-CN"); // localizedName = "农历" ``` 9. 判断某一个日期是否为周末。 @@ -299,8 +295,8 @@ try { 调用isWeekend接口来判断输入的Date是否为周末。 ```js - var date = new Date(2022, 12, 12, 12, 12, 12); - var weekend = calendar.isWeekend(date); // weekend = false + let date = new Date(2022, 12, 12, 12, 12, 12); + let weekend = calendar.isWeekend(date); // weekend = false ``` ## 电话号码格式化 @@ -329,7 +325,7 @@ try { 调用PhoneNumberFormat的构造函数来实例化电话号码格式化对象,需要传入电话号码的国家代码及格式化选项。其中,格式化选项是可选的,包括style选项,该选项的取值包括:"E164", "INTERNATIONAL", "NATIONAL", "RFC3966"。 ```js - var phoneNumberFormat = new I18n.PhoneNumberFormat("CN", {type: "E164"}); + let phoneNumberFormat = new I18n.PhoneNumberFormat("CN", {type: "E164"}); ``` 3. 判断电话号码格式是否正确。 @@ -337,7 +333,7 @@ try { 调用isValidNumber接口来判断输入的电话号码的格式是否正确。 ```js - var validNumber = phoneNumberFormat.isValidNumber("15812341234"); // validNumber = true + let validNumber = phoneNumberFormat.isValidNumber("15812341234"); // validNumber = true ``` 4. 电话号码格式化。 @@ -345,7 +341,7 @@ try { 调用电话号码格式化对象的format接口来对输入的电话号码进行格式化。 ```js - var formattedNumber = phoneNumberFormat.format("15812341234"); // formattedNumber = "+8615812341234" + let formattedNumber = phoneNumberFormat.format("15812341234"); // formattedNumber = "+8615812341234" ``` ## 度量衡转换 @@ -371,12 +367,12 @@ try { 调用[unitConvert](../reference/apis/js-apis-i18n.md#unitconvert9)接口实现度量衡单位转换,并进行格式化显示的功能。 ```js - var fromUnit = {unit: "cup", measureSystem: "US"}; - var toUnit = {unit: "liter", measureSystem: "SI"}; - var number = 1000; - var locale = "en-US"; - var style = "long"; - var converttedUnit = I18n.I18NUtil.unitConvert(fromUnit, toUnit, number, locale, style); // converttedUnit = "236.588 liters" + let fromUnit = {unit: "cup", measureSystem: "US"}; + let toUnit = {unit: "liter", measureSystem: "SI"}; + let number = 1000; + let locale = "en-US"; + let style = "long"; + let converttedUnit = I18n.I18NUtil.unitConvert(fromUnit, toUnit, number, locale, style); // converttedUnit = "236.588 liters" ``` ## 字母表索引 @@ -406,7 +402,7 @@ try { ```js - var indexUtil = I18n.getInstance("zh-CN"); + let indexUtil = I18n.getInstance("zh-CN"); ``` 3. 获取索引列表。 @@ -414,7 +410,7 @@ try { 调用getIndexList接口来获取当前Locale对应的字母表索引列表。 ```js - var indexList = indexUtil.getIndexList(); // indexList = ["...", "A", "B", "C", ..., "X", "Y", "Z", "..."] + let indexList = indexUtil.getIndexList(); // indexList = ["...", "A", "B", "C", ..., "X", "Y", "Z", "..."] ``` 4. 增加新的索引。 @@ -430,8 +426,8 @@ try { 调用getIndex接口来获取某一字符串对应的字母表索引。 ```js - var text = "access index"; - var index = indexUtil.getIndex(text); // index = "A" + let text = "access index"; + let index = indexUtil.getIndex(text); // index = "A" ``` ## 获取文本断点位置 @@ -466,8 +462,8 @@ try { 调用getLineInstance接口来实例化断行对象。 ```js - var locale = "en-US" - var breakIterator = I18n.getLineInstance(locale); + let locale = "en-US" + let breakIterator = I18n.getLineInstance(locale); ``` 3. 设置、访问要断行处理的文本。 @@ -475,9 +471,9 @@ try { 调用setLineBreakText接口和getLineBreakText接口来设置、访问要断行处理的文本。 ```js - var text = "Apple is my favorite fruit"; + let text = "Apple is my favorite fruit"; breakIterator.setLineBreakText(text); - var breakText = breakIterator.getLineBreakText(); // breakText = "Apple is my favorite fruit" + let breakText = breakIterator.getLineBreakText(); // breakText = "Apple is my favorite fruit" ``` 4. 获取断行对象当前的位置。 @@ -485,7 +481,7 @@ try { 调用current接口来获取断行对象在当前处理文本中的位置。 ```js - var pos = breakIterator.current(); // pos = 0 + let pos = breakIterator.current(); // pos = 0 ``` 5. 设置断行对象的位置。 @@ -493,15 +489,15 @@ try { 系统提供了很多接口可以用于调整断行对象在处理文本中的位置,包括first, last, next, previous, following。 ```js - var firstPos = breakIterator.first(); // 将断行对象设置到第一个分割点的位置,即文本的起始位置;firstPos = 0 - var lastPos = breakIterator.last(); // 将断行对象设置到最后一个分割点的位置,即文本末尾的下一个位置;lastPos = 26 + let firstPos = breakIterator.first(); // 将断行对象设置到第一个分割点的位置,即文本的起始位置;firstPos = 0 + let lastPos = breakIterator.last(); // 将断行对象设置到最后一个分割点的位置,即文本末尾的下一个位置;lastPos = 26 // 将断行对象向前或向后移动一定数量的分割点。 // 当传入正数时,向后移动;当传入负数时,向前移动;当未传入数值时,则向后移动一个位置; // 当移动超出了文本的长度范围,则返回-1; - var nextPos = breakIterator.next(-2); // nextPos = 12 - var previousPos = breakIterator.previous(); // 将断行对象向前移动向前移动一个分割点,当超出文本长度范围时返回-1; previousPos = 9 + let nextPos = breakIterator.next(-2); // nextPos = 12 + let previousPos = breakIterator.previous(); // 将断行对象向前移动向前移动一个分割点,当超出文本长度范围时返回-1; previousPos = 9 // 将断行对象移动到offset指定位置的后面一个分割点。如果offset所指定的位置的下一个分割点超出了文本的长度范围,则返回-1; - var followingPos = breakIterator.following(10); // followingPos = 12 + let followingPos = breakIterator.following(10); // followingPos = 12 ``` 6. 判断某个位置是否为分割点。 @@ -509,7 +505,7 @@ try { 调用isBoundary接口来判断一个接口是否为分割点;如果该位置是分割点,则返回true,并且将断行对象移动到该位置;如果该位置不是分割点,则返回false,并且将断行对象移动到该位置后的一个分割点。 ```js - var isboundary = breakIterator.isBoundary(5); // isboundary = false + let isboundary = breakIterator.isBoundary(5); // isboundary = false ``` ## 获取时区 @@ -543,16 +539,16 @@ try { 调用getTimeZone接口来获取时区对象。 ```js - var timezone = I18n.getTimeZone(); // 使用默认参数可以获取系统时区对象。 + let timezone = I18n.getTimeZone(); // 使用默认参数可以获取系统时区对象。 ``` 获取时区ID、本地化显示、时区偏移量、某一时刻的时区偏移量信息。 ```js - var timezoneID = timezone.getID(); // timezoneID = "Asia/Shanghai" - var timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "中国标准时间" - var rawOffset = timezone.getRawOffset(); // rawOffset = 28800000 - var offset = timezone.getOffset(new Date()); // offset = 28800000 + let timezoneID = timezone.getID(); // timezoneID = "Asia/Shanghai" + let timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "中国标准时间" + let rawOffset = timezone.getRawOffset(); // rawOffset = 28800000 + let offset = timezone.getOffset(new Date().getTime()); // offset = 28800000 ``` 3. 获取系统支持的时区ID。 @@ -561,9 +557,9 @@ try { 时区ID列表中的时区ID可以作为getTimeZone接口的参数,来创建TimeZone对象。 ```js - var timezoneIDs = I18n.TimeZone.getAvailableIDs(); // timezoneIDs = ["America/Adak", ...],共包含24个时区ID - var timezone = I18n.getTimeZone(timezoneIDs[0]); - var timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "夏威夷-阿留申时间" + let timezoneIDs = I18n.TimeZone.getAvailableIDs(); // timezoneIDs = ["America/Adak", ...],共包含24个时区ID + let timezone = I18n.getTimeZone(timezoneIDs[0]); + let timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "夏威夷-阿留申时间" ``` 4. 获取系统支持的时区城市ID。 @@ -573,10 +569,10 @@ try { 调用getTimezoneFromCity接口基于时区城市ID创建时区对象。 ```js - var zoneCityIDs = I18n.TimeZone.getAvailableZoneCityIDs(); // ["Auckland", "Magadan", ...] - var cityDisplayName = I18n.TimeZone.getCityDisplayName(zoneCityIDs[0], "zh-Hans"); // cityDisplayName = "奥克兰(新西兰)" - var timezone = I18n.TimeZone.getTimezoneFromCity(zoneCityIDs[0]); - var timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "新西兰时间" + let zoneCityIDs = I18n.TimeZone.getAvailableZoneCityIDs(); // ["Auckland", "Magadan", ...] + let cityDisplayName = I18n.TimeZone.getCityDisplayName(zoneCityIDs[0], "zh-Hans"); // cityDisplayName = "奥克兰(新西兰)" + let timezone = I18n.TimeZone.getTimezoneFromCity(zoneCityIDs[0]); + let timezoneDisplayName = timezone.getDisplayName(); // timezoneDisplayName = "新西兰时间" ``` ## 获取音译对象 @@ -605,7 +601,7 @@ try { 每个ID的格式为 source-destination,例如 ASCII-Latin,表示将ASCII转换为Latin的音译ID。 ```js - var ids = I18n.Transliterator.getAvailableIDs(); // ids = ["ASCII-Latin", "Accents-Any", ... ],共支持671个语言 + let ids = I18n.Transliterator.getAvailableIDs(); // ids = ["ASCII-Latin", "Accents-Any", ... ],共支持671个语言 ``` 3. 创建音译对象,获取音译字符串。 @@ -614,8 +610,8 @@ try { 调用transform接口,获取音译字符串。 ```js - var transliterator = I18n.Transliterator.getInstance("Any-Latn"); // Any-Latn表示将任意文本转换为Latn文本 - var transformText = transliterator.transform("你好"); // transformText = "nǐ hǎo " + let transliterator = I18n.Transliterator.getInstance("Any-Latn"); // Any-Latn表示将任意文本转换为Latn文本 + let transformText = transliterator.transform("你好"); // transformText = "nǐ hǎo " ``` ## 字符类型判断 @@ -649,56 +645,56 @@ try { 判断字符是否是数字。 ```js - var isDigit = I18n.Unicode.isDigit("1"); // isDigit = true + let isDigit = I18n.Unicode.isDigit("1"); // isDigit = true isDigit = I18n.Unicode.isDigit("a"); // isDigit = false ``` 判断字符是否是空格符。 ```js - var isSpaceChar = I18n.Unicode.isSpaceChar(" "); // isSpaceChar = true + let isSpaceChar = I18n.Unicode.isSpaceChar(" "); // isSpaceChar = true isSpaceChar = I18n.Unicode.isSpaceChar("\n"); // isSpaceChar = false ``` 判断字符是否是空白符。 ```js - var isWhitespace = I18n.Unicode.isWhitespace(" "); // isWhitespace = true + let isWhitespace = I18n.Unicode.isWhitespace(" "); // isWhitespace = true isWhitespace = I18n.Unicode.isWhitespace("\n"); // isWhitespace = true ``` 判断字符是否是从左到右书写的文字。 ```js - var isRTL = I18n.Unicode.isRTL("مرحبًا"); // isRTL = true,阿拉伯语的文字是从左到右书写的文字 + let isRTL = I18n.Unicode.isRTL("مرحبًا"); // isRTL = true,阿拉伯语的文字是从左到右书写的文字 isRTL = I18n.Unicode.isRTL("a"); // isRTL = false ``` 判断字符是否是表意文字。 ```js - var isIdeograph = I18n.Unicode.isIdeograph("你好"); // isIdeograph = true + let isIdeograph = I18n.Unicode.isIdeograph("你好"); // isIdeograph = true isIdeograph = I18n.Unicode.isIdeograph("a"); // isIdeograph = false ``` 判断字符是否是字母。 ```js - var isLetter = I18n.Unicode.isLetter("a"); // isLetter = true + let isLetter = I18n.Unicode.isLetter("a"); // isLetter = true isLetter = I18n.Unicode.isLetter("."); // isLetter = false ``` 判断字符是否是小写字母。 ```js - var isLowerCase = I18n.Unicode.isLowerCase("a"); // isLetter = true + let isLowerCase = I18n.Unicode.isLowerCase("a"); // isLetter = true isLowerCase = I18n.Unicode.isLowerCase("A"); // isLetter = false ``` 判断字符是否是大写字母。 ```js - var isUpperCase = I18n.Unicode.isUpperCase("a"); // isUpperCase = false + let isUpperCase = I18n.Unicode.isUpperCase("a"); // isUpperCase = false isUpperCase = I18n.Unicode.isUpperCase("A"); // isUpperCase = true ``` @@ -707,7 +703,7 @@ try { 调用getType接口获取字符的类型。 ```js - var type = I18n.Unicode.getType("a"); // type = U_LOWER_CASE_LETTER + let type = I18n.Unicode.getType("a"); // type = U_LOWER_CASE_LETTER ``` ## 获取日期中年月日的排列顺序 @@ -732,5 +728,5 @@ try { 接口返回一个字符串,由"y","L","d"三部分组成,分别表示年、月、日,使用中划线进行拼接。例如,"y-L-d"。 ```js - var order = I18n.I18NUtil.getDateOrder("zh-CN"); // order = "y-L-d",表示中文中年月日的顺序为年-月-日。 + let order = I18n.I18NUtil.getDateOrder("zh-CN"); // order = "y-L-d",表示中文中年月日的顺序为年-月-日。 ``` \ No newline at end of file diff --git a/zh-cn/application-dev/internationalization/intl-guidelines.md b/zh-cn/application-dev/internationalization/intl-guidelines.md index 68b7299740326df79e675fa8ca9bd7b7f59e20db..172d24522a9c4724aa6c50680baab9e421cd9dd3 100644 --- a/zh-cn/application-dev/internationalization/intl-guidelines.md +++ b/zh-cn/application-dev/internationalization/intl-guidelines.md @@ -48,9 +48,9 @@ ```js - var locale = "zh-CN"; - var options = {caseFirst: "false", calendar: "chinese", collation: "pinyin"}; - var localeObj = new Intl.Locale(locale, options); + let locale = "zh-CN"; + let options = {caseFirst: "false", calendar: "chinese", collation: "pinyin"}; + let localeObj = new Intl.Locale(locale, options); ``` 3. 获取Locale的字符串表示。 @@ -58,7 +58,7 @@ 调用toString方法来获取Locale对象的字符串表示,其中包括了语言、区域及其他选项信息。 ```js - var localeStr = localeObj.toString(); // localeStr = "zh-CN-u-ca-chinese-co-pinyin-kf-false + let localeStr = localeObj.toString(); // localeStr = "zh-CN-u-ca-chinese-co-pinyin-kf-false ``` 4. 最大化区域信息。 @@ -66,8 +66,8 @@ 调用maximize方法来最大化区域信息,即当缺少脚本与地区信息时,对其进行补全。 ```js - var maximizedLocale = localeObj.maximize(); - var maximizedLocaleStr = maximizedLocale.toString(); // localeStr = "zh-Hans-CN-u-ca-chinese-co-pinyin-kf-false + let maximizedLocale = localeObj.maximize(); + let maximizedLocaleStr = maximizedLocale.toString(); // localeStr = "zh-Hans-CN-u-ca-chinese-co-pinyin-kf-false ``` 5. 最小化区域信息。 @@ -75,8 +75,8 @@ 调用minimize方法来最小化区域信息,即当存在脚本与地区信息时,对其进行删除。 ```js - var minimizedLocale = localeObj.minimize(); - var minimizedLocaleStr = minimizedLocale.toString(); // zh-u-ca-chinese-co-pinyin-kf-false + let minimizedLocale = localeObj.minimize(); + let minimizedLocaleStr = minimizedLocale.toString(); // zh-u-ca-chinese-co-pinyin-kf-false ``` ## 格式化日期时间 @@ -108,14 +108,14 @@ 一种方法是使用DateTimeFormat提供的默认构造函数,通过访问系统语言和地区设置,获取系统默认Locale,并将其作为DateTimeFormat对象内部的Locale。 ```js - var dateTimeFormat = new Intl.DateTimeFormat(); + let dateTimeFormat = new Intl.DateTimeFormat(); ``` 另一种方法是使用开发者提供的Locale和格式化参数来创建日期时间格式化对象。其中,格式化参数是可选的,完整的格式化参数列表见[DateTimeOptions](../reference/apis/js-apis-intl.md#datetimeoptions)。 ```js - var options = {dateStyle: "full", timeStyle: "full"}; - var dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options); + let options = {dateStyle: "full", timeStyle: "full"}; + let dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options); ``` 3. 格式化日期时间。 @@ -123,10 +123,10 @@ 使用DateTimeFormat的format方法对一个Date对象进行格式化,该方法会返回一个字符串作为格式化的结果。 ```js - var options = {dateStyle: "full", timeStyle: "full"}; - var dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options); - var date = new Date(2022, 12, 12, 12, 12, 12); - var formatResult = dateTimeFormat.format(date); // formatResult = "2023年1月12日星期四 中国标准时间 下午12:12:12" + let options = {dateStyle: "full", timeStyle: "full"}; + let dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options); + let date = new Date(2022, 12, 12, 12, 12, 12); + let formatResult = dateTimeFormat.format(date); // formatResult = "2023年1月12日星期四 中国标准时间 下午12:12:12" ``` 4. 格式化时间段。 @@ -134,10 +134,10 @@ 使用DateTimeFormat的formatRange方法对一个时间段进行格式化。该方法需要传入两个Date对象,分别表示时间段的起止日期,返回一个字符串作为格式化的结果。 ```js - var startDate = new Date(2021, 11, 17, 3, 24, 0); - var endDate = new Date(2021, 11, 18, 3, 24, 0); - var datefmt = new Intl.DateTimeFormat("en-GB"); - var formatRangeResult = datefmt.formatRange(startDate, endDate); // formatRangeResult = "17/12/2021-18/12/2021" + let startDate = new Date(2021, 11, 17, 3, 24, 0); + let endDate = new Date(2021, 11, 18, 3, 24, 0); + let datefmt = new Intl.DateTimeFormat("en-GB"); + let formatRangeResult = datefmt.formatRange(startDate, endDate); // formatRangeResult = "17/12/2021-18/12/2021" ``` 5. 访问日期时间格式化对象的相关属性。 @@ -145,9 +145,9 @@ DateTimeFormat的resolvedOptions方法会返回一个对象,该对象包含了DateTimeFormat对象的所有相关属性及其值。 ```js - var options = {dateStyle: "full", timeStyle: "full"}; - var dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options); - var resolvedOptions = dateTimeFormat.resolvedOptions(); // resolvedOptions = {"locale": "zh-CN", "calendar": "gregorian", "dateStyle":"full", "timeStyle":"full", "timeZone": "CST"} + let options = {dateStyle: "full", timeStyle: "full"}; + let dateTimeFormat = new Intl.DateTimeFormat("zh-CN", options); + let resolvedOptions = dateTimeFormat.resolvedOptions(); // resolvedOptions = {"locale": "zh-CN", "calendar": "gregorian", "dateStyle":"full", "timeStyle":"full", "timeZone": "CST"} ``` ## 数字格式化 @@ -178,14 +178,14 @@ 一种方法是使用NumberFormat提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。 ```js - var numberFormat = new Intl.NumberFormat(); + let numberFormat = new Intl.NumberFormat(); ``` 另一种方法是使用开发者提供的Locale和格式化参数来创建数字格式化对象。其中,格式化参数是可选的,完整的格式化参数列表参见[NumberOptions](../reference/apis/js-apis-intl.md#numberoptions)。 ```js - var options = {compactDisplay: "short", notation: "compact"}; - var numberFormat = new Intl.NumberFormat("zh-CN", options); + let options = {compactDisplay: "short", notation: "compact"}; + let numberFormat = new Intl.NumberFormat("zh-CN", options); ``` 3. 数字格式化。 @@ -193,10 +193,10 @@ 使用NumberFormat的format方法对传入的数字进行格式化。该方法返回一个字符串作为格式化的结果。 ```js - var options = {compactDisplay: "short", notation: "compact"}; - var numberFormat = new Intl.NumberFormat("zh-CN", options); - var number = 1234.5678 - var formatResult = numberFormat.format(number); // formatResult = "1235" + let options = {compactDisplay: "short", notation: "compact"}; + let numberFormat = new Intl.NumberFormat("zh-CN", options); + let number = 1234.5678 + let formatResult = numberFormat.format(number); // formatResult = "1235" ``` 4. 访问数字格式化对象的相关属性。 @@ -204,9 +204,9 @@ NumberFormat的resolvedOptions方法会返回一个对象,该对象包含了NumberFormat对象的所有相关属性及其值。 ```js - var options = {compactDisplay: "short", notation: "compact"}; - var numberFormat = new Intl.NumberFormat("zh-CN", options); - var resolvedOptions = numberFormat.resolvedOptions(); // resolvedOptions = {"locale": "zh-CN", "compactDisplay": "short", "notation": "compact", "numberingSystem": "Latn"} + let options = {compactDisplay: "short", notation: "compact"}; + let numberFormat = new Intl.NumberFormat("zh-CN", options); + let resolvedOptions = numberFormat.resolvedOptions(); // resolvedOptions = {"locale": "zh-CN", "compactDisplay": "short", "notation": "compact", "numberingSystem": "Latn"} ``` ## 字符串排序 @@ -237,14 +237,14 @@ 一种方法是使用Collator提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。 ```js - var collator = new Intl.Collator(); + let collator = new Intl.Collator(); ``` 另一种方法是使用开发者提供的Locale和其他相关参数来创建Collator对象,完整的参数列表参见[CollatorOptions](../reference/apis/js-apis-intl.md#collatoroptions9)。 其中,sensitivity参数用于控制哪些级别的差异会被用于比较两个字符串。取值"base"表示,仅比较字符本身,不考虑重音符号、大小写差异。例如,'a' != 'b','a' == 'á','a' == 'A'。取值"accent"表示考虑重音符号,不考虑大小写的差异。例如,'a' != 'b','a' != 'á','a' == 'A'。取值"case"表示考虑大小写的差异,不考虑重音符号的差异。例如,'a' != 'b','a' == 'á','a' != 'A'。取值"variant"表示考虑重音符号、大小写等方面差异。例如'a' != 'b','a' != 'á','a' != 'A'。 ```js - var collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort", sensitivity: "case"}); + let collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort", sensitivity: "case"}); ``` 3. 比较字符串。 @@ -252,10 +252,10 @@ 使用Collator的compare方法对传入的两个字符串进行比较。该方法返回一个数值作为比较的结果,返回-1表示第一个字符串小于第二个字符串,返回1表示第一个字符大于第二个字符串,返回0表示两个字符串相同。基于两个字符串的比较结果,开发者可以字符串集合进行排序。 ```js - var collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort", sensitivity: "case"}); - var str1 = "first string"; - var str2 = "second string"; - var compareResult = collator.compare(str1, str2); // compareResult = -1 + let collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort", sensitivity: "case"}); + let str1 = "first string"; + let str2 = "second string"; + let compareResult = collator.compare(str1, str2); // compareResult = -1 str1 = "first"; str2 = "First"; compareResult = collator.compare(str1, str2); // compareResult = -1 @@ -266,8 +266,8 @@ Collator的resolvedOptions方法会返回一个对象,该对象包含了Collator对象的所有相关属性及其值。 ```js - var collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort"}); - var options = collator.resolvedOptions(); // options = {"localeMatcher": "best fit", "locale": "zh-CN", "usage": "sort", "sensitivity": "variant", "ignorePunctuation": "false", "numeric": false, "caseFirst": "false", "collation": "default"} + let collator= new Intl.Collator("zh-CN", {localeMatcher: "best fit", usage: "sort"}); + let options = collator.resolvedOptions(); // options = {"localeMatcher": "best fit", "locale": "zh-CN", "usage": "sort", "sensitivity": "variant", "ignorePunctuation": "false", "numeric": false, "caseFirst": "false", "collation": "default"} ``` ## 判定单复数类别 @@ -298,13 +298,13 @@ 一种方法是使用PluralRules提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。 ```js - var pluralRules = new Intl.PluralRules(); + let pluralRules = new Intl.PluralRules(); ``` 另一种方法是使用开发者提供的Locale和其他相关参数来创建单复数对象。完整的参数列表参见[PluralRulesOptions](../reference/apis/js-apis-intl.md#pluralrulesoptions9)。 ```js - var pluralRules = new Intl.PluralRules("zh-CN", {localeMatcher: "best fit", type: "cardinal"}); + let pluralRules = new Intl.PluralRules("zh-CN", {localeMatcher: "best fit", type: "cardinal"}); ``` 3. 计算数字单复数类别。 @@ -312,9 +312,9 @@ 使用PluralRules的select方法计算传入数字的单复数类别。该方法返回一个字符串作为传入数字的类别,包括:"zero", "one", "two", "few", "many", "other"六个类别。 ```js - var pluralRules = new Intl.PluralRules("zh-CN", {localeMatcher: "best fit", type: "cardinal"}); - var number = 1234.5678 - var categoryResult = pluralRules.select(number); // categoryResult = "other" + let pluralRules = new Intl.PluralRules("zh-CN", {localeMatcher: "best fit", type: "cardinal"}); + let number = 1234.5678 + let categoryResult = pluralRules.select(number); // categoryResult = "other" ``` ## 相对时间格式化 @@ -346,13 +346,13 @@ 一种方法是使用RelativeTimeFormat提供的默认构造函数,通过访问系统的语言和地区以获取系统默认Locale并进行设置(intl为导入的模块名)。 ```js - var relativeTimeFormat = new Intl.RelativeTimeFormat(); + let relativeTimeFormat = new Intl.RelativeTimeFormat(); ``` 另一种方法是使用开发者提供的Locale和格式化参数来创建相对时间格式化对象。其中,格式化参数是可选的,完整的参数列表参见[ RelativeTimeFormatInputOptions](../reference/apis/js-apis-intl.md#relativetimeformatinputoptions9)。 ```js - var relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); + let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); ``` 3. 相对时间格式化。 @@ -360,10 +360,10 @@ 使用RelativeTimeFormat的format方法对相对时间进行格式化。方法接收一个表示相对时间长度的数值和表示单位的字符串,其中单位包括:"year", "quarter", "month", "week", "day", "hour", "minute", "second"。方法返回一个字符串作为格式化的结果。 ```js - var relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); - var number = 2; - var unit = "year" - var formatResult = relativeTimeFormat.format(number, unit); // 2年后 + let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); + let number = 2; + let unit = "year" + let formatResult = relativeTimeFormat.format(number, unit); // 2年后 ``` 4. 获取相对时间格式化结果的各个部分。 @@ -371,10 +371,10 @@ 获取相对时间格式化结果的各个部分,从而自定义格式化结果。 ```js - var relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); - var number = 2; - var unit = "year" - var formatPartsResult = relativeTimeFormat.formatToParts(number, unit); // formatPartsResult = [{"type": "integer", "value": "2", "unit": "year"}, {"type":"literal", "value": "年后"}] + let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); + let number = 2; + let unit = "year" + let formatPartsResult = relativeTimeFormat.formatToParts(number, unit); // formatPartsResult = [{"type": "integer", "value": "2", "unit": "year"}, {"type":"literal", "value": "年后"}] ``` 5. 访问相对时间格式化对象的相关属性。 @@ -382,8 +382,8 @@ RelativeTimeFormat的resolvedOptions方法会返回一个对象,该对象包含了RelativeTimeFormat对象的所有相关属性及其值,完整的属性列表参见[ RelativeTimeFormatResolvedOptions](../reference/apis/js-apis-intl.md#relativetimeformatresolvedoptions8)。 ```js - var relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); - var options = relativeTimeFormat.resolvedOptions(); // options = {"locale": "zh-CN", "style": "long", "numeric": "always", "numberingSystem": "latn"} + let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {numeric: "always", style: "long"}); + let options = relativeTimeFormat.resolvedOptions(); // options = {"locale": "zh-CN", "style": "long", "numeric": "always", "numberingSystem": "latn"} ``` ## 相关实例 diff --git a/zh-cn/application-dev/reference/apis/js-apis-ability-wantConstant.md b/zh-cn/application-dev/reference/apis/js-apis-ability-wantConstant.md index dd2ecaa22d0fb1bf6541edc3abc9800290982954..cbb472d8643abc4f611d8d957df428141ff4df8e 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-ability-wantConstant.md +++ b/zh-cn/application-dev/reference/apis/js-apis-ability-wantConstant.md @@ -14,7 +14,7 @@ import wantConstant from '@ohos.ability.wantConstant'; ## wantConstant.Action -want操作的常数。 +want操作的常数。用于表示要执行的通用操作。 **系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityBase @@ -57,13 +57,13 @@ want操作的常数。 ## wantConstant.Entity -want实体的常数。 +want实体的常数。用于表示目标Ability额外的类别信息。 **系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityBase | 名称 | 值 | 说明 | | ------------ | ------------------ | ---------------------- | -| ENTITY_DEFAULT | entity.system.default | 指示默认实体,如果未指定该实体,则使用该实体。 | +| ENTITY_DEFAULT | entity.system.default | 指示默认实体,如果未指定实体,则使用该实体。 | | ENTITY_HOME | entity.system.home | 指示主屏幕实体。 | | ENTITY_VOICE | entity.system.voice | 表示语音交互实体。 | | ENTITY_BROWSABLE | entity.system.browsable | 指示浏览器类别。 | @@ -72,7 +72,7 @@ want实体的常数。 ## wantConstant.Flags -Flags说明。 +Flags说明。用于表示处理Want的方式。 **系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityBase diff --git a/zh-cn/application-dev/reference/apis/js-apis-abilityAccessCtrl.md b/zh-cn/application-dev/reference/apis/js-apis-abilityAccessCtrl.md index 17f9cec6f0be735e6b3ef1717ed00e8954802ff7..d1f0f8963ac45e979c56a19b6cbf566339280ece 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-abilityAccessCtrl.md +++ b/zh-cn/application-dev/reference/apis/js-apis-abilityAccessCtrl.md @@ -385,7 +385,6 @@ import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId -let permissionFlag = 1; try { atManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => { console.log(`getPermissionFlags success, data->${JSON.stringify(data)}`); @@ -459,11 +458,12 @@ on(type: 'permissionStateChange', tokenIDList: Array<number>, permissionNa **示例:** ```js -import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); -let tokenIDList: Array = []; -let permissionNameList = []; +let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100); +let tokenIDList: Array = [appInfo.accessTokenId]; +let permissionNameList: Array = ["ohos.permission.DISTRIBUTED_DATASYNC"]; try { atManager.on('permissionStateChange', tokenIDList, permissionNameList, (data) => { console.debug("receive permission state change, data:" + JSON.stringify(data)); @@ -508,11 +508,12 @@ off(type: 'permissionStateChange', tokenIDList: Array<number>, permissionN **示例:** ```js -import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); -let tokenIDList: Array = []; -let permissionNameList = []; +let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100); +let tokenIDList: Array = [appInfo.accessTokenId]; +let permissionNameList: Array = ["ohos.permission.DISTRIBUTED_DATASYNC"]; try { atManager.off('permissionStateChange', tokenIDList, permissionNameList); } catch(err) { diff --git a/zh-cn/application-dev/reference/apis/js-apis-app-ability-configuration.md b/zh-cn/application-dev/reference/apis/js-apis-app-ability-configuration.md index f4cb10d8993d5615f6632babb69e0413cca2d565..36eeaa4c5d369277b6ee8570113c1c72f73e5ca2 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-app-ability-configuration.md +++ b/zh-cn/application-dev/reference/apis/js-apis-app-ability-configuration.md @@ -16,7 +16,7 @@ import Configuration from '@ohos.app.ability.Configuration' | 名称 | 类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| language | string | 是 | 是 | 表示应用程序的当前语言。 | +| language | string | 是 | 是 | 表示应用程序的当前语言。例如:zh。 | | colorMode | [ColorMode](js-apis-app-ability-configurationConstant.md#configurationconstantcolormode) | 是 | 是 | 表示深浅色模式,取值范围:浅色模式(COLOR_MODE_LIGHT),深色模式(COLOR_MODE_DARK)。默认为浅色。 | | direction | [Direction](js-apis-app-ability-configurationConstant.md#configurationconstantdirection) | 是 | 否 | 表示屏幕方向,取值范围:水平方向(DIRECTION_HORIZONTAL),垂直方向(DIRECTION_VERTICAL)。 | | screenDensity | [ScreenDensity](js-apis-app-ability-configurationConstant.md#configurationconstantscreendensity) | 是 | 否 | 表示屏幕分辨率,取值范围:SCREEN_DENSITY_SDPI(120)、SCREEN_DENSITY_MDPI(160)、SCREEN_DENSITY_LDPI(240)、SCREEN_DENSITY_XLDPI(320)、SCREEN_DENSITY_XXLDPI(480)、SCREEN_DENSITY_XXXLDPI(640)。 | @@ -40,7 +40,7 @@ import Configuration from '@ohos.app.ability.Configuration' } }; try { - var callbackId = applicationContext.on("environment", envCallback); + let callbackId = applicationContext.on("environment", envCallback); } catch (paramError) { console.log("error: " + paramError.code + ", " + paramError.message); } diff --git a/zh-cn/application-dev/reference/apis/js-apis-app-ability-want.md b/zh-cn/application-dev/reference/apis/js-apis-app-ability-want.md index 2d2af9285c7747858c3cce1bee8693b7b40b8f17..19c13000427a72db9a781c4f7a9add5136f2fa56 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-app-ability-want.md +++ b/zh-cn/application-dev/reference/apis/js-apis-app-ability-want.md @@ -18,23 +18,23 @@ import Want from '@ohos.app.ability.Want'; | 名称 | 类型 | 必填 | 说明 | | ----------- | -------------------- | ---- | ------------------------------------------------------------ | -| deviceId | string | 否 | 表示运行指定Ability的设备ID。 | -| bundleName | string | 否 | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| deviceId | string | 否 | 表示运行指定Ability的设备ID。如果未设置该字段,则表明指定本设备。 | +| bundleName | string | 否 | 表示Bundle名称。 | | abilityName | string | 否 | 表示待启动的Ability名称。如果在Want中该字段同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。AbilityName需要在一个应用的范围内保证唯一。 | | uri | string | 否 | 表示Uri描述。如果在Want中指定了Uri,则Want将匹配指定的Uri信息,包括scheme, schemeSpecificPart, authority和path信息。 | | type | string | 否 | 表示MIME type类型描述,打开文件的类型,主要用于文管打开文件。比如:"text/xml" 、 "image/*"等,MIME定义参考:https://www.iana.org/assignments/media-types/media-types.xhtml?utm_source=ld246.com。 | | flags | number | 否 | 表示处理Want的方式。默认传数字,具体参考:[flags说明](js-apis-app-ability-wantConstant.md#wantConstant.Flags)。 | -| action | string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。 | +| action | string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。具体参考:[action说明](js-apis-app-ability-wantConstant.md#wantConstant.Action)。隐式Want定义及匹配规则参考:[显式Want与隐式Want匹配规则](application-models/explicit-implicit-want-mappings.md)。 | | parameters | {[key: string]: any} | 否 | 表示WantParams描述,由开发者自行决定传入的键值对。默认会携带以下key值:
ohos.aafwk.callerPid 表示拉起方的pid。
ohos.aafwk.param.callerToken 表示拉起方的token。
ohos.aafwk.param.callerUid 表示[bundleInfo](js-apis-bundleManager-bundleInfo.md#bundleinfo-1)中的uid,应用包里应用程序的uid。 | -| entities | Array\ | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器),在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。 | +| entities | Array\ | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器)。在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。具体参考:[entity说明](js-apis-app-ability-wantConstant.md#wantConstant.Entity)。 | | moduleName | string | 否 | 表示待启动的Ability所属的模块(module)。 | **示例:** -- 基础用法 +- 基础用法(在UIAbility对象中调用,其中示例中的context为UIAbility的上下文对象) ```ts - var want = { + let want = { "deviceId": "", // deviceId为空表示本设备 "bundleName": "com.extreme.test", "abilityName": "MainAbility", @@ -46,7 +46,7 @@ import Want from '@ohos.app.ability.Want'; }) ``` -- 通过自定字段传递数据, 以下为当前支持类型。 +- 通过自定字段传递数据, 以下为当前支持类型。(在UIAbility对象中调用,其中示例中的context为UIAbility的上下文对象) * 字符串(String) ```ts @@ -110,13 +110,13 @@ import Want from '@ohos.app.ability.Want'; * 文件描述符(FD) ```ts import fileio from '@ohos.fileio'; - var fd; + let fd; try { fd = fileio.openSync("/data/storage/el2/base/haps/pic.png"); } catch(e) { console.log("openSync fail:" + JSON.stringify(e)); } - var want = { + let want = { "deviceId": "", // deviceId为空表示本设备 "bundleName": "com.extreme.test", "abilityName": "MainAbility", @@ -131,6 +131,8 @@ import Want from '@ohos.app.ability.Want'; }) ``` +- 更多详细说明和示例请参见: [应用模型](../../application-models/Readme-CN.md)的信息传递载体Want + diff --git a/zh-cn/application-dev/reference/apis/js-apis-app-ability-wantConstant.md b/zh-cn/application-dev/reference/apis/js-apis-app-ability-wantConstant.md index 3eb59cab78930721cff47fbb5606611d18ea4022..2e1ae34b79b98cff1b9d24f7e54e13af36fb86c4 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-app-ability-wantConstant.md +++ b/zh-cn/application-dev/reference/apis/js-apis-app-ability-wantConstant.md @@ -14,7 +14,7 @@ import wantConstant from '@ohos.app.ability.wantConstant'; ## wantConstant.Action -want操作的常数。 +want操作的常数。用于表示要执行的通用操作。 **系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityBase @@ -56,7 +56,7 @@ want操作的常数。 ## wantConstant.Entity -want实体的常数。 +want实体的常数。用于表示目标Ability额外的类别信息。 **系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityBase @@ -71,7 +71,7 @@ want实体的常数。 ## wantConstant.Flags -Flags说明。 +Flags说明。用于表示处理Want的方式。 **系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityBase diff --git a/zh-cn/application-dev/reference/apis/js-apis-application-configuration.md b/zh-cn/application-dev/reference/apis/js-apis-application-configuration.md index b632f5ddd1e8703b864c507ec8376325bfc6a88f..9ce0e705dc901490a240cd23e44e79c1b56a5e24 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-application-configuration.md +++ b/zh-cn/application-dev/reference/apis/js-apis-application-configuration.md @@ -16,7 +16,7 @@ import Configuration from '@ohos.application.Configuration' | 名称 | 类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| language8+ | string | 是 | 是 | 表示应用程序的当前语言。 | +| language8+ | string | 是 | 是 | 表示应用程序的当前语言。例如:zh。 | | colorMode8+ | [ColorMode](js-apis-application-configurationConstant.md#configurationconstantcolormode) | 是 | 是 | 表示深浅色模式,取值范围:浅色模式(COLOR_MODE_LIGHT),深色模式(COLOR_MODE_DARK)。默认为浅色。 | | direction9+ | [Direction](js-apis-application-configurationConstant.md#configurationconstantdirection9) | 是 | 否 | 表示屏幕方向,取值范围:水平方向(DIRECTION_HORIZONTAL),垂直方向(DIRECTION_VERTICAL)。 | | screenDensity9+ | [ScreenDensity](js-apis-application-configurationConstant.md#configurationconstantscreendensity9) | 是 | 否 | 表示屏幕分辨率,取值范围:SCREEN_DENSITY_SDPI(120)、SCREEN_DENSITY_MDPI(160)、SCREEN_DENSITY_LDPI(240)、SCREEN_DENSITY_XLDPI(320)、SCREEN_DENSITY_XXLDPI(480)、SCREEN_DENSITY_XXXLDPI(640)。 | diff --git a/zh-cn/application-dev/reference/apis/js-apis-application-want.md b/zh-cn/application-dev/reference/apis/js-apis-application-want.md index a6b40f6271cc8350a61635fe1cfe58b5017b65b9..79e7c66ecdf85f36bc9d039cd78bea02188481bc 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-application-want.md +++ b/zh-cn/application-dev/reference/apis/js-apis-application-want.md @@ -18,23 +18,23 @@ import Want from '@ohos.application.Want'; | 名称 | 类型 | 必填 | 说明 | | ----------- | -------------------- | ---- | ------------------------------------------------------------ | -| deviceId | string | 否 | 表示运行指定Ability的设备ID。 | -| bundleName | string | 否 | 表示包描述。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| deviceId | string | 否 | 表示运行指定Ability的设备ID。如果未设置该字段,则表明指定本设备。 | +| bundleName | string | 否 | 表示Bundle名称。 | | abilityName | string | 否 | 表示待启动的Ability名称。如果在Want中该字段同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。AbilityName需要在一个应用的范围内保证唯一。 | | uri | string | 否 | 表示Uri描述。如果在Want中指定了Uri,则Want将匹配指定的Uri信息,包括scheme, schemeSpecificPart, authority和path信息。 | | type | string | 否 | 表示MIME type类型描述,打开文件的类型,主要用于文管打开文件。比如:"text/xml" 、 "image/*"等,MIME定义参考:https://www.iana.org/assignments/media-types/media-types.xhtml?utm_source=ld246.com。 | | flags | number | 否 | 表示处理Want的方式。默认传数字,具体参考:[flags说明](js-apis-ability-wantConstant.md#wantConstant.Flags)。 | -| action | string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。 | +| action | string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。具体参考:[action说明](js-apis-app-ability-wantConstant.md#wantConstant.Action)。隐式Want定义及匹配规则参考:[显式Want与隐式Want匹配规则](application-models/explicit-implicit-want-mappings.md)。 | | parameters | {[key: string]: any} | 否 | 表示WantParams描述,由开发者自行决定传入的键值对。默认会携带以下key值:
ohos.aafwk.callerPid 表示拉起方的pid。
ohos.aafwk.param.callerToken 表示拉起方的token。
ohos.aafwk.param.callerUid 表示[bundleInfo](js-apis-bundle-BundleInfo.md#bundleinfo-1)中的uid,应用包里应用程序的uid。 | -| entities | Array\ | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器),在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。 | +| entities | Array\ | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器)。在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。具体参考:[entity说明](js-apis-app-ability-wantConstant.md#wantConstant.Entity)。 | | moduleName9+ | string | 否 | 表示待启动的Ability所属的模块(module)。 | **示例:** -- 基础用法 +- 基础用法(在UIAbility对象中调用,其中示例中的context为UIAbility的上下文对象) ```ts - var want = { + let want = { "deviceId": "", // deviceId为空表示本设备 "bundleName": "com.extreme.test", "abilityName": "MainAbility", @@ -46,7 +46,7 @@ import Want from '@ohos.application.Want'; }) ``` -- 通过自定字段传递数据, 以下为当前支持类型。 +- 通过自定字段传递数据, 以下为当前支持类型。(在UIAbility对象中调用,其中示例中的context为UIAbility的上下文对象) * 字符串(String) ```ts @@ -110,13 +110,13 @@ import Want from '@ohos.application.Want'; * 文件描述符(FD) ```ts import fileio from '@ohos.fileio'; - var fd; + let fd; try { fd = fileio.openSync("/data/storage/el2/base/haps/pic.png"); } catch(e) { console.log("openSync fail:" + JSON.stringify(e)); } - var want = { + let want = { "deviceId": "", // deviceId为空表示本设备 "bundleName": "com.extreme.test", "abilityName": "MainAbility", @@ -131,4 +131,6 @@ import Want from '@ohos.application.Want'; }) ``` +- 更多详细说明和示例请参见: [应用模型](../../application-models/Readme-CN.md)的信息传递载体Want + \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-bundle-AbilityInfo.md b/zh-cn/application-dev/reference/apis/js-apis-bundle-AbilityInfo.md index 0fbfcdd306c5a5806894717d98f3ca16b1c5fb14..f550f11880e483a30197c0390dfe0e32c8a025bf 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-bundle-AbilityInfo.md +++ b/zh-cn/application-dev/reference/apis/js-apis-bundle-AbilityInfo.md @@ -18,8 +18,8 @@ Ability信息,未做特殊说明的属性,均通过[bundle.getAbilityInfo](j | label | string | 是 | 否 | Ability对用户显示的名称。 | | description | string | 是 | 否 | Ability的描述。 | | icon | string | 是 | 否 | Ability的图标资源文件索引。 | -| descriptionId | number | 是 | 否 | Ability的描述id。 | -| iconId | number | 是 | 否 | Ability的图标id。 | +| descriptionId | number | 是 | 否 | Ability的描述的资源id值。 | +| iconId | number | 是 | 否 | Ability的图标的资源id值。 | | moduleName | string | 是 | 否 | Ability所属的HAP的名称。 | | process | string | 是 | 否 | Ability的进程,如果不设置,默认为包的名称。 | | targetAbility | string | 是 | 否 | 当前Ability重用的目标Ability。
此属性仅可在FA模型下使用。 | @@ -36,7 +36,7 @@ Ability信息,未做特殊说明的属性,均通过[bundle.getAbilityInfo](j | writePermission | string | 是 | 否 | 向Ability写数据所需的权限。
此属性仅可在FA模型下使用。 | | applicationInfo | [ApplicationInfo](js-apis-bundle-ApplicationInfo.md) | 是 | 否 | 应用程序的配置信息。
通过调用[bundle.getAbilityInfo](js-apis-Bundle.md#bundlegetabilityinfodeprecated)接口时,传入GET_ABILITY_INFO_WITH_APPLICATION获取。 | | uri | string | 是 | 否 | 获取Ability的统一资源标识符(URI)。
此属性仅可在FA模型下使用。 | -| labelId | number | 是 | 否 | Ability的标签id。 | +| labelId | number | 是 | 否 | Ability的标签的资源id值。 | | subType | AbilitySubType | 是 | 否 | Ability中枚举使用的模板的子类型。
此属性仅可在FA模型下使用。 | | metadata8+ | Array\<[CustomizeData](js-apis-bundle-CustomizeData.md)> | 是 | 否 | ability的元信息。
通过调用[bundle.getAbilityInfo](js-apis-Bundle.md#bundlegetabilityinfodeprecated)接口时,传入GET_ABILITY_INFO_WITH_METADATA获取。 | | enabled8+ | boolean | 是 | 否 | ability是否可用。 | diff --git a/zh-cn/application-dev/reference/apis/js-apis-bundle-ElementName.md b/zh-cn/application-dev/reference/apis/js-apis-bundle-ElementName.md index a066cf5bc3603432a525b81b09f8cee8922f35ff..11a4e8325b1f59d74aef6d9668120d06d3904e6f 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-bundle-ElementName.md +++ b/zh-cn/application-dev/reference/apis/js-apis-bundle-ElementName.md @@ -17,8 +17,8 @@ ElementName信息,标识Ability的基本信息,通过接口[Context.getEleme | 名称 | 类型 | 可读 | 可写 | 说明 | | ----------------------- | ---------| ---- | ---- | ------------------------- | -| deviceId | string | 是 | 是 | 设备id。 | -| bundleName | string | 是 | 是 | 应用Bundle名称。 | -| abilityName | string | 是 | 是 | Ability名称。 | +| deviceId | string | 是 | 是 | 设备id值。 | +| bundleName | string | 是 | 是 | 应用Bundle的名称。 | +| abilityName | string | 是 | 是 | Ability的名称。 | | uri | string | 是 | 是 | 资源标识符。 | -| shortName | string | 是 | 是 | Ability短名称。 | \ No newline at end of file +| shortName | string | 是 | 是 | Ability的短名称。 | \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-bundle-LauncherAbilityInfo.md b/zh-cn/application-dev/reference/apis/js-apis-bundle-LauncherAbilityInfo.md index 560a3362a8c9f2fc4f8dee442a2ae08116ae8a1d..c3be16604ba856d95ce87039cb2061e824937218 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-bundle-LauncherAbilityInfo.md +++ b/zh-cn/application-dev/reference/apis/js-apis-bundle-LauncherAbilityInfo.md @@ -17,7 +17,7 @@ LauncherAbilityInfo信息,通过接口[innerBundleManager.getLauncherAbilityIn | --------------- | ---------------------------------------------------- | ---- | ---- | -------------------------------------- | | applicationInfo | [ApplicationInfo](js-apis-bundle-ApplicationInfo.md) | 是 | 否 | launcher ability的应用程序的配置信息。 | | elementName | [ElementName](js-apis-bundle-ElementName.md) | 是 | 否 | launcher ability的ElementName信息。 | -| labelId | number | 是 | 否 | launcher ability的标签ID。 | -| iconId | number | 是 | 否 | launcher ability的图标ID。 | -| userId | number | 是 | 否 | launcher ability的用户ID。 | +| labelId | number | 是 | 否 | launcher ability的标签的资源id值。 | +| iconId | number | 是 | 否 | launcher ability的图标的资源id值。 | +| userId | number | 是 | 否 | launcher ability的用户的资源id值。 | | installTime | number | 是 | 否 | launcher ability的安装时间。 | \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis/js-apis-bundleManager-hapModuleInfo.md b/zh-cn/application-dev/reference/apis/js-apis-bundleManager-hapModuleInfo.md index bef694cdeae04b4ab06fabc8de1e6d7de8255c0d..93352047b4b24c2498dfdcf6c51ecd5471baf443 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-bundleManager-hapModuleInfo.md +++ b/zh-cn/application-dev/reference/apis/js-apis-bundleManager-hapModuleInfo.md @@ -13,17 +13,17 @@ HAP信息,系统应用可以通过[bundleManager.getBundleInfo](js-apis-bundle | --------------------------------- | ------------------------------------------------------------ | ---- | ---- | -------------------- | | name | string | 是 | 否 | 模块名称。 | | icon | string | 是 | 否 | 模块图标。 | -| iconId | number | 是 | 否 | 模块图标资源id。 | +| iconId | number | 是 | 否 | 模块图标的资源id值。 | | label | string | 是 | 否 | 模块标签。 | -| labelId | number | 是 | 否 | 模块标签资源id。 | +| labelId | number | 是 | 否 | 模块标签的资源id值。 | | description | string | 是 | 否 | 模块描述信息。 | -| descriptionId | number | 是 | 否 | 描述信息资源id。 | +| descriptionId | number | 是 | 否 | 描述信息的资源id值。 | | mainElementName | string | 是 | 否 | 入口ability信息。 | | abilitiesInfo | Array\<[AbilityInfo](js-apis-bundleManager-abilityInfo.md)> | 是 | 否 | Ability信息。 | | extensionAbilitiesInfo | Array\<[ExtensionAbilityInfo](js-apis-bundleManager-extensionAbilityInfo.md)> | 是 | 否 | ExtensionAbility信息。 | | metadata | Array\<[Metadata](js-apis-bundleManager-metadata.md)> | 是 | 否 | Ability的元信息。 | -| deviceTypes | Array\ | 是 | 否 | 支持运行的设备类型。 | -| installationFree | boolean | 是 | 否 | 是否支持免安装。 | -| hashValue | string | 是 | 否 | Module的Hash值。 | -| moduleSourceDir | string | 是 | 否 | Module的路径。| +| deviceTypes | Array\ | 是 | 否 | 可以运行模块的设备类型。 | +| installationFree | boolean | 是 | 否 | 模块是否支持免安装。 | +| hashValue | string | 是 | 否 | 模块的Hash值。 | +| moduleSourceDir | string | 是 | 否 | 模块的路径。| diff --git a/zh-cn/application-dev/reference/apis/js-apis-bundleMonitor.md b/zh-cn/application-dev/reference/apis/js-apis-bundleMonitor.md index 0c4f4fe181ad774d6f00a3ed9904fae6aae07673..2b8da356536dd6183ece8114e6e0e4d8a45edefa 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-bundleMonitor.md +++ b/zh-cn/application-dev/reference/apis/js-apis-bundleMonitor.md @@ -81,7 +81,7 @@ off(type: BundleChangedEvent, callback?: callback\): void; | 参数名 | 类型 | 必填 | 说明 | | ---------------------------- | -------- | ---- | ---------------------------------------------------------- | | type| BundleChangedEvent| 是 | 注销监听的事件类型。 | -| callback | callback\| 是 | 注销监听的回调函数,当为空时表示注销当前事件的所有callback。 | +| callback | callback\| 否 | 注销监听的回调函数,当为空时表示注销当前事件的所有callback。 | **示例:** diff --git a/zh-cn/application-dev/reference/apis/js-apis-distributedBundle.md b/zh-cn/application-dev/reference/apis/js-apis-distributedBundle.md index e1c43fc5263f5024da1f63d8d9f5e6b4e28a51ef..8cc6ff1dc468ddbc6c31b4af9f15f6e6dbacce22 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-distributedBundle.md +++ b/zh-cn/application-dev/reference/apis/js-apis-distributedBundle.md @@ -67,13 +67,13 @@ try { abilityName: 'MainAbility' }, (err, data) => { if (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } else { console.info('Operation succeed:' + JSON.stringify(data)); } }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` @@ -124,10 +124,10 @@ try { }).then(data => { console.info('Operation succeed:' + JSON.stringify(data)); }).catch(err => { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` @@ -179,13 +179,13 @@ try { } ], (err, data) => { if (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } else { console.info('Operation succeed:' + JSON.stringify(data)); } }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` @@ -243,10 +243,10 @@ try { ]).then(data => { console.info('Operation succeed:' + JSON.stringify(data)); }).catch(err => { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` @@ -292,13 +292,13 @@ try { abilityName: 'MainAbility' }, 'zh-Hans-CN', (err, data) => { if (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } else { console.info('Operation succeed:' + JSON.stringify(data)); } }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` @@ -350,10 +350,10 @@ try { }, 'zh-Hans-CN').then(data => { console.info('Operation succeed:' + JSON.stringify(data)); }).catch(err => { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` @@ -406,13 +406,13 @@ try { } ], 'zh-Hans-CN', (err, data) => { if (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } else { console.info('Operation succeed:' + JSON.stringify(data)); } }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` @@ -471,9 +471,9 @@ try { ], 'zh-Hans-CN').then(data => { console.info('Operation succeed:' + JSON.stringify(data)); }).catch(err => { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); }); } catch (err) { - console.error('Operation failed: error code is ' + err.code + 'and error message is ' + err.message); + console.log(`Operation failed: error code is ${err.code} and error message is ${err.message}`); } ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-fileAccess.md b/zh-cn/application-dev/reference/apis/js-apis-fileAccess.md index 6e291e2abdd44561aaa2b29288146beb41395586..75d3376f372dcaf914f842ca86d28fc38bd3d3fc 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-fileAccess.md +++ b/zh-cn/application-dev/reference/apis/js-apis-fileAccess.md @@ -70,7 +70,7 @@ createFileAccessHelper(context: Context, wants: Array<Want>) : FileAccessH ```js createFileAccessHelper() { - let fileAccesssHelper = null; + let fileAccessHelper = null; // wantInfos 从getFileAccessAbilityInfo()获取 // 创建只连接媒体库服务的helper对象 let wantInfos = [ @@ -81,8 +81,8 @@ createFileAccessHelper(context: Context, wants: Array<Want>) : FileAccessH ] try { // this.context 是MainAbility 传过来的context - fileAccesssHelper = fileAccess.createFileAccessHelper(this.context, wantInfos); - if (!fileAccesssHelper) + fileAccessHelper = fileAccess.createFileAccessHelper(this.context, wantInfos); + if (!fileAccessHelper) console.error("createFileAccessHelper interface returns an undefined object"); } catch (error) { console.error("createFileAccessHelper failed, error " + error); @@ -154,6 +154,7 @@ getRoots( ) : Promise<RootIterator> let rootinfos = []; let isDone = false; try { + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 rootIterator = await fileAccessHelper.getRoots(); if (!rootIterator) { console.error("getRoots interface returns an undefined object"); @@ -248,26 +249,26 @@ scanFile(filter?: Filter) : FileIterator **示例:** ```js - // rootinfos 从 getRoots()获取 + // rootInfos 从 getRoots()获取 // let filter = {suffix : [".txt", ".jpg", ".xlsx"]}; - let rootInfo = rootinfos[0]; + let rootInfo = rootInfos[0]; let fileInfos = []; let isDone = false; try { - let fileIterator = rootInfo.scanFile(); - // 含过滤器实现的scanFile - // let fileIterator = rootInfo.scanFile(filter); - if (!fileIterator) { - console.error("scanFile interface returns undefined object"); - return; - } - while (!isDone) { - let result = fileIterator.next(); - console.log("next result = " + JSON.stringify(result)); - isDone = result.done; - if (!isDone) - fileInfos.push(result.value); - } + let fileIterator = rootInfo.scanFile(); + // 含过滤器实现的scanFile + // let fileIterator = rootInfo.scanFile(filter); + if (!fileIterator) { + console.error("scanFile interface returns undefined object"); + return; + } + while (!isDone) { + let result = fileIterator.next(); + console.log("next result = " + JSON.stringify(result)); + isDone = result.done; + if (!isDone) + fileInfos.push(result.value); + } } catch (error) { console.error("scanFile failed, error " + error); } @@ -364,7 +365,7 @@ scanFile(filter?: Filter) : FileIterator; } while (!isDone) { let result = fileIterator.next(); - console.error("next result = " + JSON.stringify(result)); + console.log("next result = " + JSON.stringify(result)); isDone = result.done; if (!isDone) subfileInfos.push(result.value); @@ -407,6 +408,7 @@ createFile(uri: string, displayName: string) : Promise<string> let displayName = "file1" let fileUri = null; try { + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 fileUri = await fileAccessHelper.createFile(sourceUri, displayName) if (!fileUri) { console.error("createFile return undefined object"); @@ -451,6 +453,7 @@ mkDir(parentUri: string, displayName: string) : Promise<string> let dirName = "dirTest" let dirUri = null; try { + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 dirUri = await fileAccessHelper.mkDir(sourceUri, dirName) if (!dirUri) { console.error("mkDir return undefined object"); @@ -483,7 +486,7 @@ openFile(uri: string, flags: OPENFLAGS) : Promise<number> | 类型 | 说明 | | --- | -- | -| Promise<number> | 文件句柄 | +| Promise<number> | 文件句柄 | **示例:** @@ -493,7 +496,8 @@ openFile(uri: string, flags: OPENFLAGS) : Promise<number> // 开发者应根据自己实际获取的uri进行开发 let targetUri = "datashare:///media/file/100"; try { - let fd = await fileAccessHelper.openFile(targetUri, OPENFLAGS.READ); + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 + let fd = await fileAccessHelper.openFile(targetUri, fileAccess.OPENFLAGS.READ); } catch (error) { console.error("openFile failed, error " + error); }; @@ -529,6 +533,7 @@ delete(uri: string) : Promise<number> // 开发者应根据自己实际获取的uri进行开发 let targetUri = "datashare:///media/file/100"; try { + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 let code = await fileAccessHelper.delete(targetUri); if (code != 0) console.error("delete failed, code " + code); @@ -569,6 +574,7 @@ move(sourceFile: string, destFile: string) : Promise<string> let sourceFile = "datashare:///media/file/102"; let destFile = "datashare:///media/file/101"; try { + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 let fileUri = await fileAccessHelper.move(sourceFile, destFile); console.log("move sucess, fileUri: " + JSON.stringify(fileUri)); } catch (error) { @@ -607,6 +613,7 @@ rename(uri: string, displayName: string) : Promise<string> // 开发者应根据自己实际获取的uri进行开发 let sourceDir = "datashare:///media/file/100"; try { + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 let DestDir = await fileAccessHelper.rename(sourceDir, "testDir"); console.log("rename sucess, DestDir: " + JSON.stringify(DestDir)); } catch (error) { @@ -644,6 +651,7 @@ access(sourceFileUri: string) : Promise<boolean> // 开发者应根据自己实际获取的uri进行开发 let sourceDir = "datashare:///media/file/100"; try { + // fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取 let existJudgment = await fileAccessHelper.access(sourceDir); if (existJudgment) console.log("sourceDir exists"); diff --git a/zh-cn/application-dev/reference/apis/js-apis-fileExtensionInfo.md b/zh-cn/application-dev/reference/apis/js-apis-fileExtensionInfo.md index 42eea3448b3f1d73aae3a91d5547fe329aef57d1..b8f4a30ab45aaa0fab68d6137498da9f2dc3d7a0 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-fileExtensionInfo.md +++ b/zh-cn/application-dev/reference/apis/js-apis-fileExtensionInfo.md @@ -39,8 +39,8 @@ import fileExtensionInfo from '@ohos.fileExtensionInfo'; | 名称 | 类型 | 可读 | 可写 | 说明 | | ------ | ------ | ---- | ---- | -------- | - | SUPPORTS_READ | number | 是 | 否 | 支持读 | - | SUPPORTS_WRITE | number | 是 | 否 | 支持写 | + | SUPPORTS_READ | number | 是 | 否 | 此设备支持读 | + | SUPPORTS_WRITE | number | 是 | 否 | 此设备支持写 | ## fileExtensionInfo.DocumentFlag @@ -54,5 +54,5 @@ import fileExtensionInfo from '@ohos.fileExtensionInfo'; | ------ | ------ | ---- | ---- | -------- | | REPRESENTS_FILE | number | 是 | 否 | 代表文件 | | REPRESENTS_DIR | number | 是 | 否 | 代表目录 | - | SUPPORTS_READ | number | 是 | 否 | 支持读 | - | SUPPORTS_WRITE | number | 是 | 否 | 支持写 | + | SUPPORTS_READ | number | 是 | 否 | 此文件支持读 | + | SUPPORTS_WRITE | number | 是 | 否 | 此文件支持写 | diff --git a/zh-cn/application-dev/reference/apis/js-apis-i18n.md b/zh-cn/application-dev/reference/apis/js-apis-i18n.md index 7f4806e2cd02c761d139bb4e1368d40d0b9ff604..fb0fdee505e8c217d264088978a0d646be1634c7 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-i18n.md +++ b/zh-cn/application-dev/reference/apis/js-apis-i18n.md @@ -51,7 +51,7 @@ static getDisplayCountry(country: string, locale: string, sentenceCase?: boolean **示例:** ```js try { - var displayCountry = I18n.System.getDisplayCountry("zh-CN", "en-GB"); // displayCountry = "China" + let displayCountry = I18n.System.getDisplayCountry("zh-CN", "en-GB"); // displayCountry = "China" } catch(error) { console.error(`call System.getDisplayCountry failed, error code: ${error.code}, message: ${error.message}.`) } @@ -90,7 +90,7 @@ static getDisplayLanguage(language: string, locale: string, sentenceCase?: boole **示例:** ```js try { - var displayLanguage = I18n.System.getDisplayLanguage("zh", "en-GB"); // displayLanguage = Chinese + let displayLanguage = I18n.System.getDisplayLanguage("zh", "en-GB"); // displayLanguage = Chinese } catch(error) { console.error(`call System.getDisplayLanguage failed, error code: ${error.code}, message: ${error.message}.`) } @@ -121,7 +121,7 @@ static getSystemLanguages(): Array<string> **示例:** ```js try { - var systemLanguages = I18n.System.getSystemLanguages(); // [ "en-Latn-US", "zh-Hans" ] + let systemLanguages = I18n.System.getSystemLanguages(); // [ "en-Latn-US", "zh-Hans" ] } catch(error) { console.error(`call System.getSystemLanguages failed, error code: ${error.code}, message: ${error.message}.`) } @@ -158,7 +158,7 @@ static getSystemCountries(language: string): Array<string> **示例:** ```js try { - var systemCountries = I18n.System.getSystemCountries('zh'); // systemCountries = [ "ZW", "YT", "YE", ..., "ER", "CN", "DE" ],共计240个国家或地区 + let systemCountries = I18n.System.getSystemCountries('zh'); // systemCountries = [ "ZW", "YT", "YE", ..., "ER", "CN", "DE" ],共计240个国家或地区 } catch(error) { console.error(`call System.getSystemCountries failed, error code: ${error.code}, message: ${error.message}.`) } @@ -196,7 +196,7 @@ static isSuggested(language: string, region?: string): boolean **示例:** ```js try { - var res = I18n.System.isSuggested('zh', 'CN'); // res = true + let res = I18n.System.isSuggested('zh', 'CN'); // res = true } catch(error) { console.error(`call System.isSuggested failed, error code: ${error.code}, message: ${error.message}.`) } @@ -227,7 +227,7 @@ static getSystemLanguage(): string **示例:** ```js try { - var systemLanguage = I18n.System.getSystemLanguage(); // systemLanguage为当前系统语言 + let systemLanguage = I18n.System.getSystemLanguage(); // systemLanguage为当前系统语言 } catch(error) { console.error(`call System.getSystemLanguage failed, error code: ${error.code}, message: ${error.message}.`) } @@ -293,7 +293,7 @@ static getSystemRegion(): string **示例:** ```js try { - var systemRegion = I18n.System.getSystemRegion(); // 获取系统当前地区设置 + let systemRegion = I18n.System.getSystemRegion(); // 获取系统当前地区设置 } catch(error) { console.error(`call System.getSystemRegion failed, error code: ${error.code}, message: ${error.message}.`) } @@ -359,7 +359,7 @@ static getSystemLocale(): string **示例:** ```js try { - var systemLocale = I18n.System.getSystemLocale(); // 获取系统当前Locale + let systemLocale = I18n.System.getSystemLocale(); // 获取系统当前Locale } catch(error) { console.error(`call System.getSystemLocale failed, error code: ${error.code}, message: ${error.message}.`) } @@ -425,7 +425,7 @@ static is24HourClock(): boolean **示例:** ```js try { - var is24HourClock = I18n.System.is24HourClock(); // 系统24小时开关是否开启 + let is24HourClock = I18n.System.is24HourClock(); // 系统24小时开关是否开启 } catch(error) { console.error(`call System.is24HourClock failed, error code: ${error.code}, message: ${error.message}.`) } @@ -497,8 +497,8 @@ static addPreferredLanguage(language: string, index?: number): void **示例:** ```js // 将语言zh-CN添加到系统偏好语言列表中 - var language = 'zh-CN'; - var index = 0; + let language = 'zh-CN'; + let index = 0; try { I18n.System.addPreferredLanguage(language, index); // 将zh-CN添加到系统偏好语言列表的第1位 } catch(error) { @@ -535,7 +535,7 @@ static removePreferredLanguage(index: number): void **示例:** ```js // 删除系统偏好语言列表中的第一个偏好语言 - var index = 0; + let index = 0; try { I18n.System.removePreferredLanguage(index); } catch(error) { @@ -568,7 +568,7 @@ static getPreferredLanguageList(): Array<string> **示例:** ```js try { - var preferredLanguageList = I18n.System.getPreferredLanguageList(); // 获取系统当前偏好语言列表 + let preferredLanguageList = I18n.System.getPreferredLanguageList(); // 获取系统当前偏好语言列表 } catch(error) { console.error(`call System.getPreferredLanguageList failed, error code: ${error.code}, message: ${error.message}.`) } @@ -599,7 +599,7 @@ static getFirstPreferredLanguage(): string **示例:** ```js try { - var firstPreferredLanguage = I18n.System.getFirstPreferredLanguage(); // 获取系统当前偏好语言列表中的第一个偏好语言 + let firstPreferredLanguage = I18n.System.getFirstPreferredLanguage(); // 获取系统当前偏好语言列表中的第一个偏好语言 } catch(error) { console.error(`call System.getFirstPreferredLanguage failed, error code: ${error.code}, message: ${error.message}.`) } @@ -630,7 +630,7 @@ static getAppPreferredLanguage(): string **示例:** ```js try { - var appPreferredLanguage = I18n.System.getAppPreferredLanguage(); // 获取应用偏好语言 + let appPreferredLanguage = I18n.System.getAppPreferredLanguage(); // 获取应用偏好语言 } catch(error) { console.error(`call System.getAppPreferredLanguage failed, error code: ${error.code}, message: ${error.message}.`) } @@ -696,7 +696,7 @@ static getUsingLocalDigit(): boolean **示例:** ```ts try { - var status = I18n.System.getUsingLocalDigit(); // 判断本地化数字开关是否打开 + let status = I18n.System.getUsingLocalDigit(); // 判断本地化数字开关是否打开 } catch(error) { console.error(`call System.getUsingLocalDigit failed, error code: ${error.code}, message: ${error.message}.`) } @@ -776,8 +776,8 @@ setTime(date: Date): void **示例:** ```js - var calendar = I18n.getCalendar("en-US", "gregory"); - var date = new Date(2021, 10, 7, 8, 0, 0, 0); + let calendar = I18n.getCalendar("en-US", "gregory"); + let date = new Date(2021, 10, 7, 8, 0, 0, 0); calendar.setTime(date); ``` @@ -798,7 +798,7 @@ setTime(time: number): void **示例:** ```js - var calendar = I18n.getCalendar("en-US", "gregory"); + let calendar = I18n.getCalendar("en-US", "gregory"); calendar.setTime(10540800000); ``` @@ -824,7 +824,7 @@ set(year: number, month: number, date:number, hour?: number, minute?: number, se **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); + let calendar = I18n.getCalendar("zh-Hans"); calendar.set(2021, 10, 1, 8, 0, 0); // set time to 2021.10.1 08:00:00 ``` @@ -845,7 +845,7 @@ setTimeZone(timezone: string): void **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); + let calendar = I18n.getCalendar("zh-Hans"); calendar.setTimeZone("Asia/Shanghai"); ``` @@ -866,9 +866,9 @@ getTimeZone(): string **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); + let calendar = I18n.getCalendar("zh-Hans"); calendar.setTimeZone("Asia/Shanghai"); - var timezone = calendar.getTimeZone(); // timezone = "Asia/Shanghai" + let timezone = calendar.getTimeZone(); // timezone = "Asia/Shanghai" ``` @@ -888,8 +888,8 @@ getFirstDayOfWeek(): number **示例:** ```js - var calendar = I18n.getCalendar("en-US", "gregory"); - var firstDayOfWeek = calendar.getFirstDayOfWeek(); // firstDayOfWeek = 1 + let calendar = I18n.getCalendar("en-US", "gregory"); + let firstDayOfWeek = calendar.getFirstDayOfWeek(); // firstDayOfWeek = 1 ``` @@ -909,9 +909,9 @@ setFirstDayOfWeek(value: number): void **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); + let calendar = I18n.getCalendar("zh-Hans"); calendar.setFirstDayOfWeek(3); - var firstDayOfWeek = calendar.getFirstDayOfWeek(); // firstDayOfWeek = 3 + let firstDayOfWeek = calendar.getFirstDayOfWeek(); // firstDayOfWeek = 3 ``` @@ -931,8 +931,8 @@ getMinimalDaysInFirstWeek(): number **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); - var minimalDaysInFirstWeek = calendar.getMinimalDaysInFirstWeek(); // minimalDaysInFirstWeek = 1 + let calendar = I18n.getCalendar("zh-Hans"); + let minimalDaysInFirstWeek = calendar.getMinimalDaysInFirstWeek(); // minimalDaysInFirstWeek = 1 ``` @@ -952,9 +952,9 @@ setMinimalDaysInFirstWeek(value: number): void **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); + let calendar = I18n.getCalendar("zh-Hans"); calendar.setMinimalDaysInFirstWeek(3); - var minimalDaysInFirstWeek = calendar.getMinimalDaysInFirstWeek(); // minimalDaysInFirstWeek = 3 + let minimalDaysInFirstWeek = calendar.getMinimalDaysInFirstWeek(); // minimalDaysInFirstWeek = 3 ``` @@ -980,9 +980,9 @@ get(field: string): number **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); + let calendar = I18n.getCalendar("zh-Hans"); calendar.set(2021, 10, 1, 8, 0, 0); // set time to 2021.10.1 08:00:00 - hourOfDay = calendar.get("hour_of_day"); // hourOfDay = 8 + let hourOfDay = calendar.get("hour_of_day"); // hourOfDay = 8 ``` @@ -1008,8 +1008,8 @@ getDisplayName(locale: string): string **示例:** ```js - var calendar = I18n.getCalendar("en-US", "buddhist"); - var calendarName = calendar.getDisplayName("zh"); // calendarName = "佛历" + let calendar = I18n.getCalendar("en-US", "buddhist"); + let calendarName = calendar.getDisplayName("zh"); // calendarName = "佛历" ``` @@ -1035,10 +1035,10 @@ isWeekend(date?: Date): boolean **示例:** ```js - var calendar = I18n.getCalendar("zh-Hans"); + let calendar = I18n.getCalendar("zh-Hans"); calendar.set(2021, 11, 11, 8, 0, 0); // set time to 2021.11.11 08:00:00 calendar.isWeekend(); // false - var date = new Date(2011, 11, 6, 9, 0, 0); + let date = new Date(2011, 11, 6, 9, 0, 0); calendar.isWeekend(date); // true ``` @@ -1063,7 +1063,7 @@ constructor(country: string, options?: PhoneNumberFormatOptions) **示例:** ```js - var phoneNumberFormat= new I18n.PhoneNumberFormat("CN", {"type": "E164"}); + let phoneNumberFormat= new I18n.PhoneNumberFormat("CN", {"type": "E164"}); ``` @@ -1089,8 +1089,8 @@ isValidNumber(number: string): boolean **示例:** ```js - var phonenumberfmt = new I18n.PhoneNumberFormat("CN"); - var isValidNumber = phonenumberfmt.isValidNumber("15812312312"); // isValidNumber = true + let phonenumberfmt = new I18n.PhoneNumberFormat("CN"); + let isValidNumber = phonenumberfmt.isValidNumber("15812312312"); // isValidNumber = true ``` @@ -1116,8 +1116,8 @@ format(number: string): string **示例:** ```js - var phonenumberfmt = new I18n.PhoneNumberFormat("CN"); - var formattedPhoneNumber = phonenumberfmt.format("15812312312"); // formattedPhoneNumber = "158 1231 2312" + let phonenumberfmt = new I18n.PhoneNumberFormat("CN"); + let formattedPhoneNumber = phonenumberfmt.format("15812312312"); // formattedPhoneNumber = "158 1231 2312" ``` @@ -1144,8 +1144,8 @@ getLocationName(number: string, locale: string): string **示例:** ```js - var phonenumberfmt = new I18n.PhoneNumberFormat("CN"); - var locationName = phonenumberfmt.getLocationName("15812312345", "zh-CN"); // locationName = "广东省湛江市" + let phonenumberfmt = new I18n.PhoneNumberFormat("CN"); + let locationName = phonenumberfmt.getLocationName("15812312345", "zh-CN"); // locationName = "广东省湛江市" ``` @@ -1194,7 +1194,7 @@ getInstance(locale?:string): IndexUtil **示例:** ```js - var indexUtil= I18n.getInstance("zh-CN"); + let indexUtil= I18n.getInstance("zh-CN"); ``` @@ -1217,10 +1217,10 @@ getIndexList(): Array<string> **示例:** ```js - var indexUtil = I18n.getInstance("zh-CN"); + let indexUtil = I18n.getInstance("zh-CN"); // indexList = [ "...", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", // "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "..." ] - var indexList = indexUtil.getIndexList(); + let indexList = indexUtil.getIndexList(); ``` @@ -1240,7 +1240,7 @@ addLocale(locale: string): void **示例:** ```js - var indexUtil = I18n.getInstance("zh-CN"); + let indexUtil = I18n.getInstance("zh-CN"); indexUtil.addLocale("en-US"); ``` @@ -1267,8 +1267,8 @@ getIndex(text: string): string **示例:** ```js - var indexUtil= I18n.getInstance("zh-CN"); - var index = indexUtil.getIndex("hi"); // index = "H" + let indexUtil= I18n.getInstance("zh-CN"); + let index = indexUtil.getIndex("hi"); // index = "H" ``` @@ -1294,7 +1294,7 @@ getLineInstance(locale: string): BreakIterator **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); ``` @@ -1317,7 +1317,7 @@ setLineBreakText(text: string): void **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); // 设置短句文本 ``` @@ -1338,9 +1338,9 @@ getLineBreakText(): string **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var breakText = iterator.getLineBreakText(); // breakText = "Apple is my favorite fruit." + let breakText = iterator.getLineBreakText(); // breakText = "Apple is my favorite fruit." ``` @@ -1360,9 +1360,9 @@ current(): number **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var currentPos = iterator.current(); // currentPos = 0 + let currentPos = iterator.current(); // currentPos = 0 ``` @@ -1382,9 +1382,9 @@ first(): number **示例:** ```js - var iterator = i18n.getLineInstance("en"); + let iterator = i18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var firstPos = iterator.first(); // firstPos = 0 + let firstPos = iterator.first(); // firstPos = 0 ``` @@ -1404,9 +1404,9 @@ last(): number **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var lastPos = iterator.last(); // lastPos = 27 + let lastPos = iterator.last(); // lastPos = 27 ``` @@ -1432,9 +1432,9 @@ next(index?: number): number **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var pos = iterator.first(); // pos = 0 + let pos = iterator.first(); // pos = 0 pos = iterator.next(); // pos = 6 pos = iterator.next(10); // pos = -1 ``` @@ -1456,9 +1456,9 @@ previous(): number **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var pos = iterator.first(); // pos = 0 + let pos = iterator.first(); // pos = 0 pos = iterator.next(3); // pos = 12 pos = iterator.previous(); // pos = 9 ``` @@ -1486,9 +1486,9 @@ following(offset: number): number **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var pos = iterator.following(0); // pos = 6 + let pos = iterator.following(0); // pos = 6 pos = iterator.following(100); // pos = -1 pos = iterator.current(); // pos = 27 ``` @@ -1516,9 +1516,9 @@ isBoundary(offset: number): boolean **示例:** ```js - var iterator = I18n.getLineInstance("en"); + let iterator = I18n.getLineInstance("en"); iterator.setLineBreakText("Apple is my favorite fruit."); - var isBoundary = iterator.isBoundary(0); // isBoundary = true; + let isBoundary = iterator.isBoundary(0); // isBoundary = true; isBoundary = iterator.isBoundary(5); // isBoundary = false; ``` @@ -1545,7 +1545,7 @@ getTimeZone(zoneID?: string): TimeZone **示例:** ```js - var timezone = I18n.getTimeZone(); + let timezone = I18n.getTimeZone(); ``` @@ -1568,8 +1568,8 @@ getID(): string **示例:** ```js - var timezone = I18n.getTimeZone(); - var timezoneID = timezone.getID(); // timezoneID = "Asia/Shanghai" + let timezone = I18n.getTimeZone(); + let timezoneID = timezone.getID(); // timezoneID = "Asia/Shanghai" ``` @@ -1596,8 +1596,8 @@ getDisplayName(locale?: string, isDST?: boolean): string **示例:** ```js - var timezone = I18n.getTimeZone(); - var timezoneName = timezone.getDisplayName("zh-CN", false); // timezoneName = "中国标准时间" + let timezone = I18n.getTimeZone(); + let timezoneName = timezone.getDisplayName("zh-CN", false); // timezoneName = "中国标准时间" ``` @@ -1617,8 +1617,8 @@ getRawOffset(): number **示例:** ```js - var timezone = I18n.getTimeZone(); - var offset = timezone.getRawOffset(); // offset = 28800000 + let timezone = I18n.getTimeZone(); + let offset = timezone.getRawOffset(); // offset = 28800000 ``` @@ -1638,8 +1638,8 @@ getOffset(date?: number): number **示例:** ```js - var timezone = I18n.getTimeZone(); - var offset = timezone.getOffset(1234567890); // offset = 28800000 + let timezone = I18n.getTimeZone(); + let offset = timezone.getOffset(1234567890); // offset = 28800000 ``` @@ -1660,7 +1660,7 @@ static getAvailableIDs(): Array<string> **示例:** ```ts // ids = ["America/Adak", "America/Anchorage", "America/Bogota", "America/Denver", "America/Los_Angeles", "America/Montevideo", "America/Santiago", "America/Sao_Paulo", "Asia/Ashgabat", "Asia/Hovd", "Asia/Jerusalem", "Asia/Magadan", "Asia/Omsk", "Asia/Shanghai", "Asia/Tokyo", "Asia/Yerevan", "Atlantic/Cape_Verde", "Australia/Lord_Howe", "Europe/Dublin", "Europe/London", "Europe/Moscow", "Pacific/Auckland", "Pacific/Easter", "Pacific/Pago-Pago"], 当前共支持24个时区 - var ids = I18n.TimeZone.getAvailableIDs(); + let ids = I18n.TimeZone.getAvailableIDs(); ``` @@ -1681,7 +1681,7 @@ static getAvailableZoneCityIDs(): Array<string> **示例:** ```ts // cityIDs = ["Auckland", "Magadan", "Lord Howe Island", "Tokyo", "Shanghai", "Hovd", "Omsk", "Ashgabat", "Yerevan", "Moscow", "Tel Aviv", "Dublin", "London", "Praia", "Montevideo", "Brasília", "Santiago", "Bogotá", "Easter Island", "Salt Lake City", "Los Angeles", "Anchorage", "Adak", "Pago Pago"],当前共支持24个时区城市 - var cityIDs = I18n.TimeZone.getAvailableZoneCityIDs(); + let cityIDs = I18n.TimeZone.getAvailableZoneCityIDs(); ``` @@ -1708,7 +1708,7 @@ static getCityDisplayName(cityID: string, locale: string): string **示例:** ```ts - var displayName = I18n.TimeZone.getCityDisplayName("Shanghai", "zh-CN"); // displayName = "上海(中国)" + let displayName = I18n.TimeZone.getCityDisplayName("Shanghai", "zh-CN"); // displayName = "上海(中国)" ``` @@ -1734,7 +1734,7 @@ static getTimezoneFromCity(cityID: string): TimeZone **示例:** ```ts - var timezone = I18n.TimeZone.getTimezoneFromCity("Shanghai"); + let timezone = I18n.TimeZone.getTimezoneFromCity("Shanghai"); ``` @@ -1759,7 +1759,7 @@ static getAvailableIDs(): string[] ```ts // ids = ["ASCII-Latin", "Accents-Any", "Amharic-Latin/BGN", ...],共支持671个id // 每一个id由使用中划线分割的两部分组成,格式为 source-destination - var ids = I18n.Transliterator.getAvailableIDs(); + let ids = I18n.Transliterator.getAvailableIDs(); ``` @@ -1785,7 +1785,7 @@ static getInstance(id: string): Transliterator **示例:** ```ts - var transliterator = I18n.Transliterator.getInstance("Any-Latn"); + let transliterator = I18n.Transliterator.getInstance("Any-Latn"); ``` @@ -1811,8 +1811,8 @@ transform(text: string): string **示例:** ```ts - var transliterator = I18n.Transliterator.getInstance("Any-Latn"); - var res = transliterator.transform("中国"); // res = "zhōng guó" + let transliterator = I18n.Transliterator.getInstance("Any-Latn"); + let res = transliterator.transform("中国"); // res = "zhōng guó" ``` @@ -1841,7 +1841,7 @@ static isDigit(char: string): boolean **示例:** ```js - var isdigit = I18n.Unicode.isDigit("1"); // isdigit = true + let isdigit = I18n.Unicode.isDigit("1"); // isdigit = true ``` @@ -1867,7 +1867,7 @@ static isSpaceChar(char: string): boolean **示例:** ```js - var isspacechar = I18n.Unicode.isSpaceChar("a"); // isspacechar = false + let isspacechar = I18n.Unicode.isSpaceChar("a"); // isspacechar = false ``` @@ -1893,7 +1893,7 @@ static isWhitespace(char: string): boolean **示例:** ```js - var iswhitespace = I18n.Unicode.isWhitespace("a"); // iswhitespace = false + let iswhitespace = I18n.Unicode.isWhitespace("a"); // iswhitespace = false ``` @@ -1919,7 +1919,7 @@ static isRTL(char: string): boolean **示例:** ```js - var isrtl = I18n.Unicode.isRTL("a"); // isrtl = false + let isrtl = I18n.Unicode.isRTL("a"); // isrtl = false ``` @@ -1945,7 +1945,7 @@ static isIdeograph(char: string): boolean **示例:** ```js - var isideograph = I18n.Unicode.isIdeograph("a"); // isideograph = false + let isideograph = I18n.Unicode.isIdeograph("a"); // isideograph = false ``` @@ -1971,7 +1971,7 @@ static isLetter(char: string): boolean **示例:** ```js - var isletter = I18n.Unicode.isLetter("a"); // isletter = true + let isletter = I18n.Unicode.isLetter("a"); // isletter = true ``` @@ -1997,7 +1997,7 @@ static isLowerCase(char: string): boolean **示例:** ```js - var islowercase = I18n.Unicode.isLowerCase("a"); // islowercase = true + let islowercase = I18n.Unicode.isLowerCase("a"); // islowercase = true ``` @@ -2023,7 +2023,7 @@ static isUpperCase(char: string): boolean **示例:** ```js - var isuppercase = I18n.Unicode.isUpperCase("a"); // isuppercase = false + let isuppercase = I18n.Unicode.isUpperCase("a"); // isuppercase = false ``` @@ -2049,7 +2049,7 @@ static getType(char: string): string **示例:** ```js - var type = I18n.Unicode.getType("a"); // type = "U_LOWERCASE_LETTER" + let type = I18n.Unicode.getType("a"); // type = "U_LOWERCASE_LETTER" ``` @@ -2082,7 +2082,7 @@ static unitConvert(fromUnit: UnitInfo, toUnit: UnitInfo, value: number, locale: **示例:** ```js - var res = I18n.I18NUtil.unitConvert({unit: "cup", measureSystem: "US"}, {unit: "liter", measureSystem: "SI"}, 1000, "en-US", "long"); // res = 236.588 liters + let res = I18n.I18NUtil.unitConvert({unit: "cup", measureSystem: "US"}, {unit: "liter", measureSystem: "SI"}, 1000, "en-US", "long"); // res = 236.588 liters ``` @@ -2108,7 +2108,7 @@ static getDateOrder(locale: string): string **示例:** ```js - var order = I18n.I18NUtil.getDateOrder("zh-CN"); // order = "y-L-d" + let order = I18n.I18NUtil.getDateOrder("zh-CN"); // order = "y-L-d" ``` @@ -2138,7 +2138,7 @@ getDisplayCountry(country: string, locale: string, sentenceCase?: boolean): stri **示例:** ```js - var countryName = I18n.getDisplayCountry("zh-CN", "en-GB", true); // countryName = true + let countryName = I18n.getDisplayCountry("zh-CN", "en-GB", true); // countryName = true countryName = I18n.getDisplayCountry("zh-CN", "en-GB"); // countryName = true ``` @@ -2169,7 +2169,7 @@ getDisplayLanguage(language: string, locale: string, sentenceCase?: boolean): st **示例:** ```js - var languageName = I18n.getDisplayLanguage("zh", "en-GB", true); // languageName = "Chinese" + let languageName = I18n.getDisplayLanguage("zh", "en-GB", true); // languageName = "Chinese" languageName = I18n.getDisplayLanguage("zh", "en-GB"); // languageName = "Chinese" ``` @@ -2192,7 +2192,7 @@ getSystemLanguage(): string **示例:** ```js - var systemLanguage = I18n.getSystemLanguage(); // 返回当前系统语言 + let systemLanguage = I18n.getSystemLanguage(); // 返回当前系统语言 ``` @@ -2214,7 +2214,7 @@ getSystemRegion(): string **示例:** ```js - var region = I18n.getSystemRegion(); // 返回当前系统地区 + let region = I18n.getSystemRegion(); // 返回当前系统地区 ``` @@ -2236,7 +2236,7 @@ getSystemLocale(): string **示例:** ```js - var locale = I18n.getSystemLocale(); // 返回系统Locale + let locale = I18n.getSystemLocale(); // 返回系统Locale ``` @@ -2258,7 +2258,7 @@ is24HourClock(): boolean **示例:** ```js - var is24HourClock = I18n.is24HourClock(); + let is24HourClock = I18n.is24HourClock(); ``` @@ -2289,7 +2289,7 @@ set24HourClock(option: boolean): boolean **示例:** ```js // 将系统时间设置为24小时制 - var success = I18n.set24HourClock(true); + let success = I18n.set24HourClock(true); ``` @@ -2321,9 +2321,9 @@ addPreferredLanguage(language: string, index?: number): boolean **示例:** ```js // 将语言zh-CN添加到系统偏好语言列表中 - var language = 'zh-CN'; - var index = 0; - var success = I18n.addPreferredLanguage(language, index); + let language = 'zh-CN'; + let index = 0; + let success = I18n.addPreferredLanguage(language, index); ``` @@ -2354,8 +2354,8 @@ removePreferredLanguage(index: number): boolean **示例:** ```js // 删除系统偏好语言列表中的第一个偏好语言 - var index = 0; - var success = I18n.removePreferredLanguage(index); + let index = 0; + let success = I18n.removePreferredLanguage(index); ``` @@ -2377,7 +2377,7 @@ getPreferredLanguageList(): Array<string> **示例:** ```js - var preferredLanguageList = I18n.getPreferredLanguageList(); // 获取系统偏好语言列表 + let preferredLanguageList = I18n.getPreferredLanguageList(); // 获取系统偏好语言列表 ``` @@ -2399,7 +2399,7 @@ getFirstPreferredLanguage(): string **示例:** ```js - var firstPreferredLanguage = I18n.getFirstPreferredLanguage(); + let firstPreferredLanguage = I18n.getFirstPreferredLanguage(); ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-inner-ability-want.md b/zh-cn/application-dev/reference/apis/js-apis-inner-ability-want.md index b0bea630d59c478157e97fc0f93aa59de9f01727..1d9c28233486316814e156f257f9aed89b87b04c 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-inner-ability-want.md +++ b/zh-cn/application-dev/reference/apis/js-apis-inner-ability-want.md @@ -10,15 +10,15 @@ Want是对象间信息传递的载体, 可以用于应用组件间的信息传 | 名称 | 类型 | 必填 | 说明 | | ----------- | -------------------- | ---- | ------------------------------------------------------------ | -| deviceId | string | 否 | 表示运行指定Ability的设备ID。 | -| bundleName | string | 否 | 表示Bundle名称。如果在Want中同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。 | +| deviceId | string | 否 | 表示运行指定Ability的设备ID。如果未设置该字段,则表明指定本设备。 | +| bundleName | string | 否 | 表示Bundle名称。 | | abilityName | string | 否 | 表示待启动的Ability名称。如果在Want中该字段同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。AbilityName需要在一个应用的范围内保证唯一。 | | uri | string | 否 | 表示Uri。如果在Want中指定了Uri,则Want将匹配指定的Uri信息,包括scheme, schemeSpecificPart, authority和path信息。 | | type | string | 否 | 表示MIME type类型,打开文件的类型,主要用于文管打开文件。比如:"text/xml" 、 "image/*"等,MIME定义参考:https://www.iana.org/assignments/media-types/media-types.xhtml?utm_source=ld246.com。 | | flags | number | 否 | 表示处理Want的方式。默认传数字,具体参考:[flags说明](js-apis-ability-wantConstant.md#wantConstant.Flags)。 | -| action | string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。 | +| action | string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。具体参考:[action说明](js-apis-app-ability-wantConstant.md#wantConstant.Action)。隐式Want定义及匹配规则参考:[显式Want与隐式Want匹配规则](application-models/explicit-implicit-want-mappings.md)。 | | parameters | {[key: string]: any} | 否 | 表示WantParams,由开发者自行决定传入的键值对。默认会携带以下key值:
ohos.aafwk.callerPid 表示拉起方的pid。
ohos.aafwk.param.callerToken 表示拉起方的token。
ohos.aafwk.param.callerUid 表示[bundleInfo](js-apis-bundle-BundleInfo.md#bundleinfo-1)中的uid,应用包里应用程序的uid。 | -| entities | Array\ | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器),在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。 | +| entities | Array\ | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器),在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。具体参考:[entity说明](js-apis-app-ability-wantConstant.md#wantConstant.Entity)。 | | moduleName9+ | string | 否 | 表示待启动的Ability所属的模块(module)。 | **示例:** diff --git a/zh-cn/application-dev/reference/apis/js-apis-intl.md b/zh-cn/application-dev/reference/apis/js-apis-intl.md index ae08faf6705b09361342f0c46aff211294cbe2d4..f0f8b660be17993f46028d9ee08e976f7e9e2104 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-intl.md +++ b/zh-cn/application-dev/reference/apis/js-apis-intl.md @@ -48,9 +48,9 @@ constructor() **示例:** ```js // 默认构造函数使用系统当前locale创建Locale对象 - var locale = new Intl.Locale() + let locale = new Intl.Locale() // 返回系统当前localel - var localeID = locale.toString() + let localeID = locale.toString() ``` @@ -72,8 +72,8 @@ constructor(locale: string, options?: LocaleOptions) **示例:** ```js // 创建 "zh-CN" Locale对象 - var locale = new Intl.Locale("zh-CN") - var localeID = locale.toString() // localeID = "zh-CN" + let locale = new Intl.Locale("zh-CN") + let localeID = locale.toString() // localeID = "zh-CN" ``` @@ -94,8 +94,8 @@ toString(): string **示例:** ```js // 创建 "en-GB" Locale对象 - var locale = new Intl.Locale("en-GB"); - var localeID = locale.toString(); // localeID = "en-GB" + let locale = new Intl.Locale("en-GB"); + let localeID = locale.toString(); // localeID = "en-GB" ``` @@ -116,16 +116,16 @@ maximize(): Locale **示例:** ```js // 创建 "zh" Locale对象 - var locale = new Intl.Locale("zh"); + let locale = new Intl.Locale("zh"); // 补齐Locale对象的脚本和地区 - locale.maximize(); - var localeID = locale.toString(); // localeID = "zh-Hans-CN" + let maximizedLocale = locale.maximize(); + let localeID = maximizedLocale.toString(); // localeID = "zh-Hans-CN" // 创建 "en-US" Locale对象 locale = new Intl.Locale("en-US"); // 补齐Locale对象的脚本 - locale.maximize(); - localeID = locale.toString(); // localeID = "en-Latn-US" + maximizedLocale = locale.maximize(); + localeID = maximizedLocale.toString(); // localeID = "en-Latn-US" ``` @@ -146,16 +146,16 @@ minimize(): Locale **示例:** ```js // 创建 "zh-Hans-CN" Locale对象 - var locale = new Intl.Locale("zh-Hans-CN"); + let locale = new Intl.Locale("zh-Hans-CN"); // 去除Locale对象的脚本和地区 - locale.minimize(); - var localeID = locale.toString(); // localeID = "zh" + let minimizedLocale = locale.minimize(); + let localeID = minimizedLocale.toString(); // localeID = "zh" // 创建 "en-US" Locale对象 locale = new Intl.Locale("en-US"); // 去除Locale对象的地区 - locale.minimize(); - localeID = locale.toString(); // localeID = "en" + minimizedLocale = locale.minimize(); + localeID = minimizedLocale.toString(); // localeID = "en" ``` @@ -189,7 +189,7 @@ constructor() **示例:** ```js // 使用系统当前locale创建DateTimeFormat对象 - var datefmt= new Intl.DateTimeFormat(); + let datefmt= new Intl.DateTimeFormat(); ``` @@ -211,14 +211,14 @@ constructor(locale: string | Array<string>, options?: DateTimeOptions) **示例:** ```js // 使用 "zh-CN" locale创建DateTimeFormat对象,日期风格为full,时间风格为medium - var datefmt= new Intl.DateTimeFormat("zh-CN", { dateStyle: 'full', timeStyle: 'medium' }); + let datefmt= new Intl.DateTimeFormat("zh-CN", { dateStyle: 'full', timeStyle: 'medium' }); ``` **示例:** ```js // 使用 ["ban", "zh"] locale列表创建DateTimeFormat对象,因为ban为非法LocaleID,因此使用zh Locale创建DateTimeFormat对象 - var datefmt= new Intl.DateTimeFormat(["ban", "zh"], { dateStyle: 'full', timeStyle: 'medium' }); + let datefmt= new Intl.DateTimeFormat(["ban", "zh"], { dateStyle: 'full', timeStyle: 'medium' }); ``` @@ -244,10 +244,10 @@ format(date: Date): string **示例:** ```js - var date = new Date(2021, 11, 17, 3, 24, 0); + let date = new Date(2021, 11, 17, 3, 24, 0); // 使用 en-GB locale创建DateTimeFormat对象 - var datefmt = new Intl.DateTimeFormat("en-GB"); - var formattedDate = datefmt.format(date); // formattedDate "17/12/2021" + let datefmt = new Intl.DateTimeFormat("en-GB"); + let formattedDate = datefmt.format(date); // formattedDate "17/12/2021" // 使用 en-GB locale创建DateTimeFormat对象,dateStyle设置为full,timeStyle设置为medium datefmt = new Intl.DateTimeFormat("en-GB", { dateStyle: 'full', timeStyle: 'medium' }); @@ -278,11 +278,11 @@ formatRange(startDate: Date, endDate: Date): string **示例:** ```js - var startDate = new Date(2021, 11, 17, 3, 24, 0); - var endDate = new Date(2021, 11, 18, 3, 24, 0); + let startDate = new Date(2021, 11, 17, 3, 24, 0); + let endDate = new Date(2021, 11, 18, 3, 24, 0); // 使用 en-GB locale创建DateTimeFormat对象 - var datefmt = new Intl.DateTimeFormat("en-GB"); - var formattedDateRange = datefmt.formatRange(startDate, endDate); // formattedDateRange = "17/12/2021-18/12/2021" + let datefmt = new Intl.DateTimeFormat("en-GB"); + let formattedDateRange = datefmt.formatRange(startDate, endDate); // formattedDateRange = "17/12/2021-18/12/2021" ``` @@ -302,11 +302,11 @@ resolvedOptions(): DateTimeOptions **示例:** ```js - var datefmt = new Intl.DateTimeFormat("en-GB", { dateStyle: 'full', timeStyle: 'medium' }); + let datefmt = new Intl.DateTimeFormat("en-GB", { dateStyle: 'full', timeStyle: 'medium' }); // 返回DateTimeFormat对象的配置项 - var options = datefmt.resolvedOptions(); - var dateStyle = options.dateStyle; // dateStyle = "full" - var timeStyle = options.timeStyle; // timeStyle = "medium" + let options = datefmt.resolvedOptions(); + let dateStyle = options.dateStyle; // dateStyle = "full" + let timeStyle = options.timeStyle; // timeStyle = "medium" ``` @@ -353,7 +353,7 @@ constructor() **示例:** ```js // 使用系统当前locale创建NumberFormat对象 - var numfmt = new Intl.NumberFormat(); + let numfmt = new Intl.NumberFormat(); ``` @@ -375,7 +375,7 @@ constructor(locale: string | Array<string>, options?: NumberOptions) **示例:** ```js // 使用 en-GB locale创建NumberFormat对象,style设置为decimal,notation设置为scientific - var numfmt = new Intl.NumberFormat("en-GB", {style:'decimal', notation:"scientific"}); + let numfmt = new Intl.NumberFormat("en-GB", {style:'decimal', notation:"scientific"}); ``` @@ -403,8 +403,8 @@ format(number: number): string; **示例:** ```js // 使用 ["en-GB", "zh"] locale列表创建NumberFormat对象,因为en-GB为合法LocaleID,因此使用en-GB创建NumberFormat对象 - var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); - var formattedNumber = numfmt.format(1223); // formattedNumber = 1.223E3 + let numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); + let formattedNumber = numfmt.format(1223); // formattedNumber = 1.223E3 ``` @@ -425,11 +425,11 @@ resolvedOptions(): NumberOptions **示例:** ```js - var numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); + let numfmt = new Intl.NumberFormat(["en-GB", "zh"], {style:'decimal', notation:"scientific"}); // 获取NumberFormat对象配置项 - var options = numfmt.resolvedOptions(); - var style = options.style; // style = decimal - var notation = options.notation // notation = scientific + let options = numfmt.resolvedOptions(); + let style = options.style; // style = decimal + let notation = options.notation // notation = scientific ``` @@ -476,7 +476,7 @@ constructor() **示例:** ```js // 使用系统locale创建Collator对象 - var collator = new Intl.Collator(); + let collator = new Intl.Collator(); ``` @@ -498,7 +498,7 @@ constructor(locale: string | Array<string>, options?: CollatorOptions) **示例:** ```js // 使用 zh-CN locale创建Collator对象,localeMatcher设置为lookup,usage设置为sort - var collator = new Intl.Collator("zh-CN", {localeMatcher: "lookup", usage: "sort"}); + let collator = new Intl.Collator("zh-CN", {localeMatcher: "lookup", usage: "sort"}); ``` @@ -526,9 +526,9 @@ compare(first: string, second: string): number **示例:** ```js // 使用en-GB locale创建Collator对象 - var collator = new Intl.Collator("en-GB"); + let collator = new Intl.Collator("en-GB"); // 比较 "first" 和 "second" 的先后顺序 - var compareResult = collator.compare("first", "second"); // compareResult = -1 + let compareResult = collator.compare("first", "second"); // compareResult = -1 ``` @@ -548,11 +548,11 @@ resolvedOptions(): CollatorOptions **示例:** ```js - var collator = new Intl.Collator("zh-Hans", { usage: 'sort', ignorePunctuation: 'true' }); + let collator = new Intl.Collator("zh-Hans", { usage: 'sort', ignorePunctuation: true }); // 获取Collator对象的配置项 - var options = collator.resolvedOptions(); - var usage = options.usage; // usage = "sort" - var ignorePunctuation = options.ignorePunctuation // ignorePunctuation = true + let options = collator.resolvedOptions(); + let usage = options.usage; // usage = "sort" + let ignorePunctuation = options.ignorePunctuation // ignorePunctuation = true ``` @@ -566,7 +566,7 @@ resolvedOptions(): CollatorOptions | ----------------- | ------- | ---- | ---- | ---------------------------------------- | | localeMatcher | string | 是 | 是 | locale匹配算法,取值范围:"best fit", "lookup"。 | | usage | string | 是 | 是 | 比较的用途,取值范围:"sort", "search"。 | -| sensitivity | string | 是 | 是 | 表示字符串中的哪些差异会导致非零结果值,取值范围:"base", "accent", "case", "variant"。 | +| sensitivity | string | 是 | 是 | 表示字符串中的哪些差异会导致非零结果值,取值范围:"base", "accent", "case", "letiant"。 | | ignorePunctuation | boolean | 是 | 是 | 表示是否忽略标点符号,取值范围:true, false。 | | collation | string | 是 | 是 | 排序规则,取值范围:"big5han", "compat", "dict", "direct", "ducet", "eor", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan", "zhuyin"。 | | numeric | boolean | 是 | 是 | 是否使用数字排序,取值范围:true, false。 | @@ -580,14 +580,14 @@ resolvedOptions(): CollatorOptions constructor() -创建PluralRules对象。 +创建单复数对象来计算数字的单复数类别。 **系统能力**:SystemCapability.Global.I18n **示例:** ```js // 使用系统locale创建PluralRules对象 - var pluralRules = new Intl.PluralRules(); + let pluralRules = new Intl.PluralRules(); ``` @@ -595,7 +595,7 @@ constructor() constructor(locale: string | Array<string>, options?: PluralRulesOptions) -创建PluralRules对象。 +创建单复数对象来计算数字的单复数类别。 **系统能力**:SystemCapability.Global.I18n @@ -609,7 +609,7 @@ constructor(locale: string | Array<string>, options?: PluralRulesOptions) **示例:** ```js // 使用 zh-CN locale创建PluralRules对象,localeMatcher设置为lookup,type设置为cardinal - var pluralRules= new Intl.PluralRules("zh-CN", {"localeMatcher": "lookup", "type": "cardinal"}); + let pluralRules= new Intl.PluralRules("zh-CN", {"localeMatcher": "lookup", "type": "cardinal"}); ``` @@ -636,9 +636,14 @@ select(n: number): string **示例:** ```js // 使用 zh-Hans locale创建PluralRules对象 - var pluralRules = new Intl.PluralRules("zh-Hans"); + let zhPluralRules = new Intl.PluralRules("zh-Hans"); // 计算 zh-Hans locale中数字1对应的单复数类别 - var plural = pluralRules.select(1); // plural = other + let plural = zhPluralRules.select(1); // plural = other + + // 使用 en-US locale创建PluralRules对象 + let enPluralRules = new Intl.PluralRules("en-US"); + // 计算 en-US locale中数字1对应的单复数类别 + plural = enPluralRules.select(1); // plural = one ``` @@ -673,7 +678,7 @@ constructor() **示例:** ```js // 使用系统locale创建RelativeTimeFormat对象 - var relativetimefmt = new Intl.RelativeTimeFormat(); + let relativetimefmt = new Intl.RelativeTimeFormat(); ``` @@ -695,7 +700,7 @@ constructor(locale: string | Array<string>, options?: RelativeTimeFormatIn **示例:** ```js // 使用 zh-CN locale创建RelativeTimeFormat对象,localeMatcher设置为lookup,numeric设置为always,style设置为long - var relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {"localeMatcher": "lookup", "numeric": "always", "style": "long"}); + let relativeTimeFormat = new Intl.RelativeTimeFormat("zh-CN", {"localeMatcher": "lookup", "numeric": "always", "style": "long"}); ``` @@ -723,9 +728,9 @@ format(value: number, unit: string): string **示例:** ```js // 使用 zh-CN locale创建RelativeTimeFormat对象 - var relativetimefmt = new Intl.RelativeTimeFormat("zh-CN"); + let relativetimefmt = new Intl.RelativeTimeFormat("zh-CN"); // 计算 zh-CN locale中数字3,单位quarter的本地化表示 - var formatResult = relativetimefmt.format(3, "quarter"); // formatResult = "3个季度后" + let formatResult = relativetimefmt.format(3, "quarter"); // formatResult = "3个季度后" ``` @@ -753,8 +758,8 @@ formatToParts(value: number, unit: string): Array<object> **示例:** ```js // 使用 en locale创建RelativeTimeFormat对象,numeric设置为auto - var relativetimefmt = new Intl.RelativeTimeFormat("en", {"numeric": "auto"}); - var parts = relativetimefmt.formatToParts(10, "seconds"); // parts = [ {type: "literal", value: "in"}, {type: "integer", value: 10, unit: "second"}, {type: "literal", value: "seconds"} ] + let relativetimefmt = new Intl.RelativeTimeFormat("en", {"numeric": "auto"}); + let parts = relativetimefmt.formatToParts(10, "seconds"); // parts = [ {type: "literal", value: "in"}, {type: "integer", value: 10, unit: "second"}, {type: "literal", value: "seconds"} ] ``` @@ -775,10 +780,10 @@ resolvedOptions(): RelativeTimeFormatResolvedOptions **示例:** ```js // 使用 en-GB locale创建RelativeTimeFormat对象 - var relativetimefmt= new Intl.RelativeTimeFormat("en-GB", { style: "short" }); + let relativetimefmt= new Intl.RelativeTimeFormat("en-GB", { style: "short" }); // 获取RelativeTimeFormat对象配置项 - var options = relativetimefmt.resolvedOptions(); - var style = options.style; // style = "short" + let options = relativetimefmt.resolvedOptions(); + let style = options.style; // style = "short" ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-system-configuration.md b/zh-cn/application-dev/reference/apis/js-apis-system-configuration.md index 8d8cb562baa47c2bf9d8c988701de9c3baf0803a..5f1beafc9fa71efd83ee715b86813858c98fe9ab 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-system-configuration.md +++ b/zh-cn/application-dev/reference/apis/js-apis-system-configuration.md @@ -10,8 +10,8 @@ ## 导入模块 -``` -import configuration from '@system.configuration'; +```ts +import Configuration from '@system.configuration'; ``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-userFileManager.md b/zh-cn/application-dev/reference/apis/js-apis-userFileManager.md index bed88decc2c62c51f17cfac3e9b8ca1beccf12a5..bf2320e1b06b9ed1cccdf1cead5af2d752b0df6f 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-userFileManager.md +++ b/zh-cn/application-dev/reference/apis/js-apis-userFileManager.md @@ -2343,7 +2343,7 @@ async function example() { **系统能力:** 以下各项对应的系统能力均为SystemCapability.FileManagement.UserFileManager.Core -| 名称 | 类型 | 可读 | 可写 说明 | +| 名称 | 类型 | 可读 | 可写 | 说明 | | ----- | ---- | ---- | ---- | ---- | | deviceChange | string | 是 | 是 | 设备 | | albumChange | string | 是 | 是 | 相册 | diff --git a/zh-cn/application-dev/reference/native-lib/third_party_libuv/libuv.md b/zh-cn/application-dev/reference/native-lib/third_party_libuv/libuv.md index ef385c1cab99647f650f2b152f9a7615758f4148..b891d0cd1df03c1cc3df50a12671701a10e967a5 100644 --- a/zh-cn/application-dev/reference/native-lib/third_party_libuv/libuv.md +++ b/zh-cn/application-dev/reference/native-lib/third_party_libuv/libuv.md @@ -6,12 +6,17 @@ -libuv是一个跨平台库,基于事件驱动来实现异步I/O,主要作为Node.js的多平台支持库。 +[libuv](http://libuv.org/)是一个跨平台库,基于事件驱动来实现异步I/O,主要作为Node.js的多平台支持库。 ## 支持的能力 -libuv实现了跨平台的基于事件驱动的异步I/O。 +[libuv](http://libuv.org/)实现了跨平台的基于事件驱动的异步I/O。 + +支持标准库接口。 + +## 接口列表 + +[libuv支持的API文档](http://docs.libuv.org/en/v1.x/api.html)。 -支持标准库接口。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-mini-appx-code.md b/zh-cn/device-dev/kernel/kernel-mini-appx-code.md index 3c92cc74ce65af388c8dd4295ff6850518028238..341817ed342487fe2caba82e1dc00453138ef8a3 100644 --- a/zh-cn/device-dev/kernel/kernel-mini-appx-code.md +++ b/zh-cn/device-dev/kernel/kernel-mini-appx-code.md @@ -58,7 +58,7 @@ OsMuxInit ## 注释 -一般的,尽量通过清晰的软件架构,良好的符号命名来提高代码可读性;然后在需要的时候,才辅以注释说明。 +一般的,尽量通过清晰的软件架构,良好的符号命名来提高代码可读性;在需要的时候,辅以注释说明。 注释是为了帮助阅读者快速读懂代码,所以要从读者的角度出发,按需注释。 diff --git a/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-event.md b/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-event.md index ef398c91849fcae751bcb1c848424acaa609772d..9a7c3c83e48325e39b2cf98a09be1132e6a14c5d 100644 --- a/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-event.md +++ b/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-event.md @@ -84,7 +84,7 @@ typedef struct tagEvent { > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 进行事件读写操作时,事件的第25位为保留位,不可以进行位设置。 +> - 进行事件读写操作时,事件的第25bit(`0x02U << 24`)为保留bit位,不可以进行位设置。 > > - 对同一事件反复写入,算作一次写入。 diff --git a/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-queue.md b/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-queue.md index f2e60ebd8b30ea049f5238dbd1ae52bc17e40ec9..1bafb4de87da9338e67b4331b760078c8667f402 100644 --- a/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-queue.md +++ b/zh-cn/device-dev/kernel/kernel-mini-basic-ipc-queue.md @@ -7,7 +7,7 @@ 任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。任务也能够往队列里写入消息,当队列已经写满消息时,挂起写入任务;当队列中有空闲消息节点时,挂起的写入任务被唤醒并写入消息。 -可以通过调整读队列和写队列的超时时间来调整读写接口的阻塞模式,如果将读队列和写队列的超时时间设置为0,就不会挂起任务,接口会直接返回,这就是非阻塞模式。反之,如果将都队列和写队列的超时时间设置为大于0的时间,就会以阻塞模式运行。 +可以通过调整读队列和写队列的超时时间来调整读写接口的阻塞模式,如果将读队列和写队列的超时时间设置为0,就不会挂起任务,接口会直接返回,这就是非阻塞模式。反之,如果将读队列和写队列的超时时间设置为大于0的时间,就会以阻塞模式运行。 消息队列提供了异步处理机制,允许将一个消息放入队列,但不立即处理。同时队列还有缓冲消息的作用,可以使用队列实现任务异步通信,队列具有如下特性: diff --git a/zh-cn/device-dev/kernel/kernel-mini-memory-perf.md b/zh-cn/device-dev/kernel/kernel-mini-memory-perf.md index 6803d34b7a8c07b660a56ae000d39ece93aef518..bb16cd80a5a72e77cb63e84eb1e0e1fdc382f6dd 100644 --- a/zh-cn/device-dev/kernel/kernel-mini-memory-perf.md +++ b/zh-cn/device-dev/kernel/kernel-mini-memory-perf.md @@ -12,7 +12,7 @@ Perf为性能分析工具,依赖PMU(Performance Monitoring Unit)对采样 Perf提供2种工作模式,计数模式和采样模式。 -计数模式仅统计事件发生的次数和耗时,采样模式会收集上下文数据到环形buffer中,需要IDE进行数据解析生成热点函数与热点路径 +计数模式仅统计事件发生的次数和耗时,采样模式会收集上下文数据到环形buffer中,需要IDE进行数据解析生成热点函数与热点路径。 ## 接口说明 @@ -24,21 +24,21 @@ OpenHarmony LiteOS-A内核的Perf模块提供下面几种功能,接口详细 **表1** Perf模块接口说明 -| 功能分类 | 接口描述 | +| 功能分类 | 接口描述 | | -------- | -------- | -| 开启/停止Perf采样 | LOS_PerfStart:开启采样
LOS_PerfStop:停止采样 | -| 配置Perf采样事件 | LOS_PerfConfig:配置采样事件的类型、周期等 | -| 读取采样数据 | LOS_PerfDataRead:读取采样数据到指定地址 | -| 注册采样数据缓冲区的钩子函数 | LOS_PerfNotifyHookReg:注册缓冲区水线到达的处理钩子
LOS_PerfFlushHookReg:注册缓冲区刷cache的钩子 | +| 开启/停止Perf采样 | LOS_PerfInit : 初始化Perf
LOS_PerfStart:开启采样
LOS_PerfStop:停止采样 | +| 配置Perf采样事件 | LOS_PerfConfig:配置采样事件的类型、周期等 | +| 读取采样数据 | LOS_PerfDataRead:读取采样数据到指定地址 | +| 注册采样数据缓冲区的钩子函数 | LOS_PerfNotifyHookReg:注册缓冲区水线到达的处理钩子
LOS_PerfFlushHookReg:注册缓冲区刷cache的钩子 | -1. Perf采样事件的结构体为PerfConfigAttr,详细字段含义及取值详见kernel\include\los_perf.h。 +1. Perf采样事件的结构体为PerfConfigAttr,详细字段含义及取值详见 [kernel\include\los_perf.h](https://gitee.com/openharmony/kernel_liteos_a/blob/master/kernel/include/los_perf.h) 。 2. 采样数据缓冲区为环形buffer,buffer中读过的区域可以覆盖写,未被读过的区域不能被覆盖写。 3. 缓冲区有限,用户可通过注册水线到达的钩子进行buffer溢出提醒或buffer读操作。默认水线值为buffer总大小的1/2。 示例如下: - - ``` + + ```c VOID Example_PerfNotifyHook(VOID) { CHAR buf[LOSCFG_PERF_BUFFER_SIZE] = {0}; @@ -51,8 +51,8 @@ OpenHarmony LiteOS-A内核的Perf模块提供下面几种功能,接口详细 ``` 4. 若perf采样的buffer涉及到CPU跨cache,则用户可通过注册刷cache的钩子,进行cache同步。 示例如下: - - ``` + + ```c VOID Example_PerfFlushHook(VOID *addr, UINT32 size) { OsCacheFlush(addr, size); /* platform interface */ @@ -74,8 +74,8 @@ OpenHarmony LiteOS-A内核的Perf模块提供下面几种功能,接口详细 - write: 用户态采样事件配置 - ioctl: 用户态Perf控制操作,包括 - - ``` + + ```c #define PERF_IOC_MAGIC 'T' #define PERF_START _IO(PERF_IOC_MAGIC, 1) #define PERF_STOP _IO(PERF_IOC_MAGIC, 2) @@ -97,15 +97,15 @@ OpenHarmony LiteOS-A内核的Perf模块提供下面几种功能,接口详细 1. 配置Perf模块相关宏。 配置Perf控制宏LOSCFG_KERNEL_PERF,默认关,在kernel/liteos_a目录下执行 make update_config命令配置"Kernel->Enable Perf Feature"中打开: - | 配置项 | menuconfig选项 | 含义 | 设置值 | + | 配置项 | menuconfig选项 | 含义 | 设置值 | | -------- | -------- | -------- | -------- | - | LOSCFG_KERNEL_PERF | Enable Perf Feature | Perf模块的裁剪开关 | YES/NO | - | LOSCFG_PERF_CALC_TIME_BY_TICK | Time-consuming Calc Methods->By Tick | Perf计时单位为tick | YES/NO | - | LOSCFG_PERF_CALC_TIME_BY_CYCLE | Time-consuming Calc Methods->By Cpu Cycle | Perf计时单位为cycle | YES/NO | - | LOSCFG_PERF_BUFFER_SIZE | Perf Sampling Buffer Size | Perf采样buffer的大小 | INT | - | LOSCFG_PERF_HW_PMU | Enable Hardware Pmu Events for Sampling | 使能硬件PMU事件,需要目标平台支持硬件PMU | YES/NO | - | LOSCFG_PERF_TIMED_PMU | Enable Hrtimer Period Events for Sampling | 使能高精度周期事件,需要目标平台支持高精度定时器 | YES/NO | - | LOSCFG_PERF_SW_PMU | Enable Software Events for Sampling | 使能软件事件,需要开启LOSCFG_KERNEL_HOOK | YES/NO | + | LOSCFG_KERNEL_PERF | Enable Perf Feature | Perf模块的裁剪开关 | YES/NO | + | LOSCFG_PERF_CALC_TIME_BY_TICK | Time-consuming Calc Methods->By Tick | Perf计时单位为tick | YES/NO | + | LOSCFG_PERF_CALC_TIME_BY_CYCLE | Time-consuming Calc Methods->By Cpu Cycle | Perf计时单位为cycle | YES/NO | + | LOSCFG_PERF_BUFFER_SIZE | Perf Sampling Buffer Size | Perf采样buffer的大小 | INT | + | LOSCFG_PERF_HW_PMU | Enable Hardware Pmu Events for Sampling | 使能硬件PMU事件,需要目标平台支持硬件PMU | YES/NO | + | LOSCFG_PERF_TIMED_PMU | Enable Hrtimer Period Events for Sampling | 使能高精度周期事件,需要目标平台支持高精度定时器 | YES/NO | + | LOSCFG_PERF_SW_PMU | Enable Software Events for Sampling | 使能软件事件,需要开启LOSCFG_KERNEL_HOOK | YES/NO | 2. 调用LOS_PerfConfig配置需要采样的事件。 Perf提供2种模式的配置,及3大类型的事件配置: @@ -142,9 +142,11 @@ OpenHarmony LiteOS-A内核的Perf模块提供下面几种功能,接口详细 前提条件:在menuconfig菜单中完成perf模块的配置。 +该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试。 + 实例代码如下: - -``` + +```c #include "los_perf.h" STATIC VOID OsPrintBuff(const CHAR *buf, UINT32 num) { @@ -176,7 +178,7 @@ STATIC VOID perfTestHwEvent(VOID) .predivided = 1, /* cycle counter increase every 64 cycles */ }, .taskIds = {0}, - .taskIdsNr = 0, + .taskIdsNr = 0, .needSample = 0, .sampleType = PERF_RECORD_IP | PERF_RECORD_CALLCHAIN, }; @@ -192,7 +194,7 @@ STATIC VOID perfTestHwEvent(VOID) PRINTK("--------sample mode------ \n"); attr.needSample = 1; LOS_PerfConfig(&attr); - LOS_PerfStart(2); + LOS_PerfStart(2); // 2: set the section id to 2. test(); /* this is any test function*/ LOS_PerfStop(); buf = LOS_MemAlloc(m_aucSysMem1, LOSCFG_PERF_BUFFER_SIZE); @@ -201,24 +203,25 @@ STATIC VOID perfTestHwEvent(VOID) return; } /* get sample data */ - len = LOS_PerfDataRead(buf, LOSCFG_PERF_BUFFER_SIZE); + len = LOS_PerfDataRead(buf, LOSCFG_PERF_BUFFER_SIZE); OsPrintBuff(buf, len); /* print data */ (VOID)LOS_MemFree(m_aucSysMem1, buf); } -UINT32 Example_Perf_test(VOID){ - UINT32 ret; - TSK_INIT_PARAM_S perfTestTask; - /* 创建用于perf测试的任务 */ - memset(&perfTestTask, 0, sizeof(TSK_INIT_PARAM_S)); - perfTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)perfTestHwEvent; - perfTestTask.pcName = "TestPerfTsk"; /* 测试任务名称 */ - perfTestTask.uwStackSize = 0x800; - perfTestTask.usTaskPrio = 5; - perfTestTask.uwResved = LOS_TASK_STATUS_DETACHED; - ret = LOS_TaskCreate(&g_perfTestTaskId, &perfTestTask); - if(ret != LOS_OK){ - PRINT_ERR("PerfTestTask create failed.\n"); - return LOS_NOK; +UINT32 Example_Perf_test(VOID) +{ + UINT32 ret; + TSK_INIT_PARAM_S perfTestTask; + /* 创建用于perf测试的任务 */ + memset(&perfTestTask, 0, sizeof(TSK_INIT_PARAM_S)); + perfTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)perfTestHwEvent; + perfTestTask.pcName = "TestPerfTsk"; /* 测试任务名称 */ + perfTestTask.uwStackSize = 0x800; // 0x8000: perf test task stack size + perfTestTask.usTaskPrio = 5; // 5: perf test task priority + perfTestTask.uwResved = LOS_TASK_STATUS_DETACHED; + ret = LOS_TaskCreate(&g_perfTestTaskId, &perfTestTask); + if (ret != LOS_OK) { + PRINT_ERR("PerfTestTask create failed.\n"); + return LOS_NOK; } return LOS_OK; } @@ -229,7 +232,7 @@ LOS_MODULE_INIT(perfTestHwEvent, LOS_INIT_LEVEL_KMOD_EXTENDED); #### 内核态结果验证 输出结果如下: - + ``` --------count mode---------- [EMG] [cycles] eventType: 0xff: 5466989440 @@ -268,18 +271,18 @@ hex: 00 ef ef ef 00 00 00 00 14 00 00 00 60 00 00 00 00 00 00 00 70 88 36 40 08 - option可选如下: - -e,配置采样事件。可使用./perf list 中罗列的同类型事件。 - -p,配置事件采样周期。 - - -o, 指定perf采样数据结果保存的文件路径。 + - -o,指定perf采样数据结果保存的文件路径。 - -t,任务Id过滤(白名单),只采取指定任务中的上下文。如果不指定改参数,则默认采集所有的任务。 - - -s, 配置采样的具体上下文类型,可查阅los_perf.h中定义的PerfSampleType。 - - -P, 进程Id过滤(白名单),只采取指定进程中的上下文。如果不指定改参数,则默认采集所有进程。 - - -d, 是否进行分频(事件每发生64次累计+1),该选项仅在硬件cycle事件上生效。 + - -s,配置采样的具体上下文类型,可查阅los_perf.h中定义的PerfSampleType。 + - -P,进程Id过滤(白名单),只采取指定进程中的上下文。如果不指定改参数,则默认采集所有进程。 + - -d,是否进行分频(事件每发生64次累计+1),该选项仅在硬件cycle事件上生效。 - command 为待统计的子程序。 用户态命令行的典型使用方法如下: ./perf list 查看可使用的事件列表, 输出如下: - + ``` cycles [Hardware event] instruction [Hardware event] @@ -298,7 +301,7 @@ mux-pend [Software event] ./perf stat -e cycles os_dump, 输出如下: - + ``` type: 0 events[0]: 255, 0xffff @@ -316,7 +319,7 @@ time used: 0.058000(s) ./perf record -e cycles os_dump, 输出如下: - + ``` type: 0 events[0]: 255, 0xffff @@ -354,8 +357,8 @@ save perf data success at /storage/data/perf.data #### 用户态示例代码 实例代码如下: - -``` + +```c #include "fcntl.h" #include "user_copy.h" #include "sys/ioctl.h" @@ -367,6 +370,7 @@ save perf data success at /storage/data/perf.data #define PERF_IOC_MAGIC 'T' #define PERF_START _IO(PERF_IOC_MAGIC, 1) #define PERF_STOP _IO(PERF_IOC_MAGIC, 2) + int main(int argc, char **argv) { char *buf = NULL; @@ -425,7 +429,7 @@ int main(int argc, char **argv) #### 用户态结果验证 输出结果如下 - + ``` [EMG] dump section data, addr: 0x8000000 length: 0x800000 num: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 ... diff --git a/zh-cn/device-dev/kernel/kernel-small-apx-bitwise.md b/zh-cn/device-dev/kernel/kernel-small-apx-bitwise.md index 68cc022a69fb0ec50e8fb25b71b78101c77405e7..a94c73c188f659e871b711556bc095b39c5a1420 100644 --- a/zh-cn/device-dev/kernel/kernel-small-apx-bitwise.md +++ b/zh-cn/device-dev/kernel/kernel-small-apx-bitwise.md @@ -14,9 +14,9 @@ | **功能分类** | **接口描述** | | -------- | -------- | -| 置1/清0标志位 | - LOS_BitmapSet:对状态字的某一标志位进行置1操作
- LOS_BitmapClr:对状态字的某一标志位进行清0操作 | -| 获取标志位为1的bit位 | - LOS_HighBitGet:获取状态字中为1的最高位
- LOS_LowBitGet:获取状态字中为1的最低位 | -| 连续bit位操作 | - LOS_BitmapSetNBits:对状态字的连续标志位进行置1操作
- LOS_BitmapClrNBits:对状态字的连续标志位进行清0操作
- LOS_BitmapFfz:获取从最低有效位开始的第一个0的bit位 | +| 置1/清0标志位 | - LOS_BitmapSet:对状态字的某一标志位进行置1操作
- LOS_BitmapClr:对状态字的某一标志位进行清0操作 | +| 获取标志位为1的bit位 | - LOS_HighBitGet:获取状态字中为1的最高位
- LOS_LowBitGet:获取状态字中为1的最低位 | +| 连续bit位操作 | - LOS_BitmapSetNBits:对状态字的连续标志位进行置1操作
- LOS_BitmapClrNBits:对状态字的连续标志位进行清0操作
- LOS_BitmapFfz:获取从最低有效位开始的第一个0的bit位 | ## 编程实例 @@ -34,7 +34,10 @@ 4. 获取标志位为1的最低bit位。 - +### 编程示例 + +本演示代码在./kernel/liteos_a/testsuites/kernel/src/osTest.c中编译验证,在TestTaskEntry中调用验证入口函数BitSample。 + ``` #include "los_bitmap.h" #include "los_printf.h" diff --git a/zh-cn/device-dev/kernel/kernel-small-apx-dll.md b/zh-cn/device-dev/kernel/kernel-small-apx-dll.md index d13c006214da35581213e47da24e583cb16b861a..782dd68968e5c741075bb5687e651e7923ae79a8 100644 --- a/zh-cn/device-dev/kernel/kernel-small-apx-dll.md +++ b/zh-cn/device-dev/kernel/kernel-small-apx-dll.md @@ -17,10 +17,10 @@ | 增加节点 | - LOS_ListAdd:将指定节点插入到双向链表头端
- LOS_ListHeadInsert:将指定节点插入到双向链表头端,同LOS_ListAdd
- LOS_ListTailInsert:将指定节点插入到双向链表尾端 | | 增加链表 | - LOS_ListAddList:将指定链表的头端插入到双向链表头端
- LOS_ListHeadInsertList:将指定链表的头端插入到双向链表头端
- LOS_ListTailInsertList:将指定链表的尾端插入到双向链表头端 | | 删除节点 | - LOS_ListDelete:将指定节点从链表中删除
- LOS_ListDelInit:将指定节点从链表中删除,并使用该节点初始化链表 | -| 判断双向链表 | - LOS_ListEmpty:判断链表是否为空
- LOS_DL_LIST_IS_END:判断指定链表节点是否为链表尾端:LOS_DL_LIST_IS_ON_QUEUE:判断链表节点是否在双向链表里 | +| 判断双向链表 | - LOS_ListEmpty:判断链表是否为空
- LOS_DL_LIST_IS_END:判断指定链表节点是否为链表尾端
- LOS_DL_LIST_IS_ON_QUEUE:判断链表节点是否在双向链表里 | | 获取结构体信息 | - LOS_OFF_SET_OF:获取指定结构体内的成员相对于结构体起始地址的偏移量
- LOS_DL_LIST_ENTRY:获取双向链表中第一个链表节点所在的结构体地址,接口的第一个入参表示的是链表中的头节点,第二个入参是要获取的结构体名称,第三个入参是链表在该结构体中的名称
- LOS_ListPeekHeadType:获取双向链表中第一个链表节点所在的结构体地址,接口的第一个入参表示的是链表中的头节点,第二个入参是要获取的结构体名称,第三个入参是链表在该结构体中的名称。如果链表为空,返回NULL。
- LOS_ListRemoveHeadType:获取双向链表中第一个链表节点所在的结构体地址,并把第一个链表节点从链表中删除。接口的第一个入参表示的是链表中的头节点,第二个入参是要获取的结构体名称,第三个入参是链表在该结构体中的名称。如果链表为空,返回NULL。
- LOS_ListNextType:获取双向链表中指定链表节点的下一个节点所在的结构体地址。接口的第一个入参表示的是链表中的头节点,第二个入参是指定的链表节点,第三个入参是要获取的结构体名称,第四个入参是链表在该结构体中的名称。如果链表节点下一个为链表头结点为空,返回NULL。| -| 遍历双向链表 | - LOS_DL_LIST_FOR_EACH:遍历双向链表
- LOS_DL_LIST_FOR_EACH_SAFE:遍历双向链表,并存储当前节点的后继节点用于安全校验 | -| 遍历包含双向链表的结构体 | - LOS_DL_LIST_FOR_EACH_ENTRY:遍历指定双向链表,获取包含该链表节点的结构体地址
- LOS_DL_LIST_FOR_EACH_ENTRY_SAFE:遍历指定双向链表,获取包含该链表节点的结构体地址,并存储包含当前节点的后继节点的结构体地址 | +| 遍历双向链表 | - LOS_DL_LIST_FOR_EACH:遍历双向链表
- LOS_DL_LIST_FOR_EACH_SAFE:遍历双向链表,并存储当前节点的后继节点用于安全校验 | +| 遍历包含双向链表的结构体 | - LOS_DL_LIST_FOR_EACH_ENTRY:遍历指定双向链表,获取包含该链表节点的结构体地址
- LOS_DL_LIST_FOR_EACH_ENTRY_SAFE:遍历指定双向链表,获取包含该链表节点的结构体地址,并存储包含当前节点的后继节点的结构体地址 | ## 开发流程 @@ -48,10 +48,10 @@ > - 如果链表节点的内存是动态申请的,删除节点时,要注意释放内存。 - **编程实例** +## 编程实例 -**实例描述** +### 实例描述 本实例实现如下功能: @@ -64,7 +64,11 @@ 4. 测试操作是否成功。 +### 编程示例 +本演示代码在./kernel/liteos_a/testsuites/kernel/src/osTest.c中编译验证,在TestTaskEntry中调用验证入口函数ListSample + +示例代码如下: ``` #include "stdio.h" diff --git a/zh-cn/device-dev/kernel/kernel-small-apx-library.md b/zh-cn/device-dev/kernel/kernel-small-apx-library.md index 229046a8a171f82ed9260cdf567da6ecc43b8a98..0f06476a3449c2eabed63351c9d6c26fe611d0d6 100644 --- a/zh-cn/device-dev/kernel/kernel-small-apx-library.md +++ b/zh-cn/device-dev/kernel/kernel-small-apx-library.md @@ -15,11 +15,19 @@ musl libc库支持POSIX标准,涉及的系统调用相关接口由OpenHarmony 标准库支持接口的详细情况请参考C库的API文档,其中也涵盖了与POSIX标准之间的差异说明。 -## 操作实例 +### 编程实例 + + +#### 实例描述 在本示例中,主线程创建了THREAD_NUM个子线程,每个子线程启动后等待被主线程唤醒,主线程成功唤醒所有子线程后,子线程继续执行直至生命周期结束,同时主线程通过pthread_join方法等待所有线程执行结束。 - +#### 编程示例 + +本演示代码在./kernel/liteos_a/testsuites/kernel/src/osTest.c中编译验证,在TestTaskEntry中调用验证入口函数testcase 或新建文件由主函数调用 + +示例代码如下: + ``` #include #include diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-atomic.md b/zh-cn/device-dev/kernel/kernel-small-basic-atomic.md index ac9755b5eea1c077d3646635cd4bac19667271ea..366928f4f4c103f9a2244f1f48256f1a1b7a05c0 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-atomic.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-atomic.md @@ -16,19 +16,17 @@ OpenHarmony系统通过对ARMv6架构中的LDREX和STREX进行封装,向用户 - LDREX Rx, [Ry] 读取内存中的值,并标记对该段内存的独占访问: - - 读取寄存器Ry指向的4字节内存数据,保存到Rx寄存器中。 - 对Ry指向的内存区域添加独占访问标记。 - STREX Rf, Rx, [Ry] 检查内存是否有独占访问标记,如果有则更新内存值并清空标记,否则不更新内存: - - 有独占访问标记 - - 将寄存器Rx中的值更新到寄存器Ry指向的内存。 - - 标志寄存器Rf置为0。 + - 将寄存器Rx中的值更新到寄存器Ry指向的内存。 + - 标志寄存器Rf置为0。 - 没有独占访问标记 - - 不更新内存。 - - 标志寄存器Rf置为1。 + - 不更新内存。 + - 标志寄存器Rf置为1。 - 判断标志寄存器 - 标志寄存器为0时,退出循环,原子操作结束。 @@ -40,36 +38,36 @@ OpenHarmony系统通过对ARMv6架构中的LDREX和STREX进行封装,向用户 ### 接口说明 -OpenHarmony LiteOS-A内核的原子操作模块提供下面几种功能,接口详细信息可以查看API参考。 +OpenHarmony LiteOS-A内核的原子操作模块提供以下几种功能。 **表1** 原子操作接口说明 -| 功能分类 | 接口**名称** | 描述 | -| -------- | -------- | -------- | -| 读 | LOS_AtomicRead | 读取32bit原子数据 | -| 读 | LOS_Atomic64Read | 读取64bit原子数据 | -| 写 | LOS_AtomicSet | 设置32bit原子数据 | -| 写 | LOS_Atomic64Set | 设置64bit原子数据 | -| 加 | LOS_AtomicAdd | 对32bit原子数据做加法 | -| 加 | LOS_Atomic64Add | 对64bit原子数据做加法 | -| 加 | LOS_AtomicInc | 对32bit原子数据做加1 | -| 加 | LOS_Atomic64Inc | 对64bit原子数据做加1 | -| 加 | LOS_AtomicIncRet | 对32bit原子数据做加1并返回 | -| 加 | LOS_Atomic64IncRet | 对64bit原子数据做加1并返回 | -| 减 | LOS_AtomicSub | 对32bit原子数据做减法 | -| 减 | LOS_Atomic64Sub | 对64bit原子数据做减法 | -| 减 | LOS_AtomicDec | 对32bit原子数据做减1 | -| 减 | LOS_Atomic64Dec | 对64bit原子数据做减1 | -| 减 | LOS_AtomicDecRet | 对32bit原子数据做减1并返回 | -| 减 | LOS_Atomic64DecRet | 对64bit原子数据做减1并返回 | -| 交换 | LOS_AtomicXchgByte | 交换8bit内存数据 | -| 交换 | LOS_AtomicXchg16bits | 交换16bit内存数据 | -| 交换 | LOS_AtomicXchg32bits | 交换32bit内存数据 | -| 交换 | LOS_AtomicXchg64bits | 交换64bit内存数据 | -| 先比较后交换 | LOS_AtomicCmpXchgByte | 比较相同后交换8bit内存数据 | -| 先比较后交换 | LOS_AtomicCmpXchg16bits | 比较相同后交换16bit内存数据 | -| 先比较后交换 | LOS_AtomicCmpXchg32bits | 比较相同后交换32bit内存数据 | -| 先比较后交换 | LOS_AtomicCmpXchg64bits | 比较相同后交换64bit内存数据 | +| 功能分类 | 接口**名称** | 描述 | +| ------------ | ----------------------- | --------------------------- | +| 读 | LOS_AtomicRead | 读取32bit原子数据 | +| 读 | LOS_Atomic64Read | 读取64bit原子数据 | +| 写 | LOS_AtomicSet | 设置32bit原子数据 | +| 写 | LOS_Atomic64Set | 设置64bit原子数据 | +| 加 | LOS_AtomicAdd | 对32bit原子数据做加法 | +| 加 | LOS_Atomic64Add | 对64bit原子数据做加法 | +| 加 | LOS_AtomicInc | 对32bit原子数据做加1 | +| 加 | LOS_Atomic64Inc | 对64bit原子数据做加1 | +| 加 | LOS_AtomicIncRet | 对32bit原子数据做加1并返回 | +| 加 | LOS_Atomic64IncRet | 对64bit原子数据做加1并返回 | +| 减 | LOS_AtomicSub | 对32bit原子数据做减法 | +| 减 | LOS_Atomic64Sub | 对64bit原子数据做减法 | +| 减 | LOS_AtomicDec | 对32bit原子数据做减1 | +| 减 | LOS_Atomic64Dec | 对64bit原子数据做减1 | +| 减 | LOS_AtomicDecRet | 对32bit原子数据做减1并返回 | +| 减 | LOS_Atomic64DecRet | 对64bit原子数据做减1并返回 | +| 交换 | LOS_AtomicXchgByte | 交换8bit内存数据 | +| 交换 | LOS_AtomicXchg16bits | 交换16bit内存数据 | +| 交换 | LOS_AtomicXchg32bits | 交换32bit内存数据 | +| 交换 | LOS_AtomicXchg64bits | 交换64bit内存数据 | +| 先比较后交换 | LOS_AtomicCmpXchgByte | 比较相同后交换8bit内存数据 | +| 先比较后交换 | LOS_AtomicCmpXchg16bits | 比较相同后交换16bit内存数据 | +| 先比较后交换 | LOS_AtomicCmpXchg32bits | 比较相同后交换32bit内存数据 | +| 先比较后交换 | LOS_AtomicCmpXchg64bits | 比较相同后交换64bit内存数据 | ### 开发流程 @@ -77,7 +75,7 @@ OpenHarmony LiteOS-A内核的原子操作模块提供下面几种功能,接口 有多个任务对同一个内存数据进行加减或交换等操作时,使用原子操作保证结果的可预知性。 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 原子操作接口仅支持整型数据。 +> 原子操作接口仅支持整型数据。 ### 编程实例 @@ -96,7 +94,7 @@ OpenHarmony LiteOS-A内核的原子操作模块提供下面几种功能,接口 示例代码如下: - + ``` #include "los_hwi.h" #include "los_atomic.h" @@ -159,7 +157,7 @@ UINT32 Example_AtomicTaskEntry(VOID) **结果验证** - + ``` g_sum = 0 -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-interrupt.md b/zh-cn/device-dev/kernel/kernel-small-basic-interrupt.md index ab1018409e3517cf543bf383a51136b23e92f523..79fbfb580cbb93dba338293e60261b552834e288 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-interrupt.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-interrupt.md @@ -3,16 +3,28 @@ ## 基本概念 -中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,出现了一个必须由CPU立即处理的事务。此时,CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。通过中断机制,可以使CPU避免把大量时间耗费在等待、查询外设状态的操作上,大大提高系统实时性以及执行效率。 +中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,出现了一个必须由CPU立即处理的事务,此时CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。通过中断机制,可以使CPU避免把大量时间耗费在等待、查询外设状态的操作上,大大提高系统实时性以及执行效率。 + +目前的中断支持有 + ++ 中断初始化 ++ 中断创建 ++ 开/关中断 ++ 恢复中断 ++ 删除中断 异常处理是操作系统对运行期间发生的异常情况(芯片硬件异常)进行处理的一系列动作,例如虚拟内存缺页异常、打印异常发生时函数的调用栈信息、CPU现场信息、任务的堆栈情况等。 ## 运行机制 -外设可以在没有CPU介入的情况下完成一定的工作,但某些情况下也需要CPU为其执行一定的工作。通过中断机制,在外设不需要CPU介入时,CPU可以执行其它任务,而当外设需要CPU时,产生一个中断信号,该信号连接至中断控制器。中断控制器是一方面接收其它外设中断引脚的输入,另一方面它会发出中断信号给CPU。可以通过对中断控制器编程来打开和关闭中断源、设置中断源的优先级和触发方式。常用的中断控制器有VIC(Vector Interrupt Controller)和GIC(General Interrupt Controller)。在ARM Cortex-A7中使用的中断控制器是GIC。CPU收到中断控制器发送的中断信号后,中断当前任务来响应中断请求。 +外设可以在没有CPU介入的情况下完成一定的工作,但某些情况下也需要CPU为其执行一定的工作。通过中断机制,在外设不需要CPU介入时,CPU可以执行其它任务,而当外设需要CPU时,产生一个中断信号,该信号连接至中断控制器。 + +中断控制器一方面接收其它外设中断引脚的输入,另一方面会发出中断信号给CPU。可以通过对中断控制器编程来打开和关闭中断源、设置中断源的优先级和触发方式。常用的中断控制器有VIC(Vector Interrupt Controller)和GIC(General Interrupt Controller)。在ARM Cortex-A7中使用的中断控制器是GIC。 -异常处理就是可以打断CPU正常运行流程的一些事情,如未定义指令异常、试图修改只读的数据异常、不对齐的地址访问异常等。当异常发生时,CPU暂停当前的程序,先处理异常事件,然后再继续执行被异常打断的程序。 +CPU收到中断控制器发送的中断信号后,中断当前任务来响应中断请求。 + +异常指可以打断CPU正常运行流程的一些事情,如未定义指令异常、试图修改只读的数据异常、不对齐的地址访问异常等。当异常发生时,CPU暂停当前的程序,先处理异常事件,然后再继续执行被异常打断的程序。 以ARMv7-a架构为例,中断和异常处理的入口为中断向量表,中断向量表包含各个中断和异常处理的入口函数。 @@ -28,11 +40,27 @@ 异常处理为内部机制,不对外提供接口,中断模块提供对外接口如下: - | 功能分类 | 接口描述 | -| -------- | -------- | -| 创建和删除中断 | - LOS_HwiCreate:中断创建,注册中断号、中断触发模式、中断优先级、中断处理程序。中断被触发时,会调用该中断处理程序
- LOS_HwiDelete:删除中断 | -| 打开和关闭所有中断 | - LOS_IntUnLock:打开当前处理器所有中断响应
- LOS_IntLock:关闭当前处理器所有中断响应
- LOS_IntRestore:恢复到使用LOS_IntLock关闭所有中断之前的状态 | -| 获取系统支持的最大中断数 | LOS_GetSystemHwiMaximum:获取系统支持的最大中断数 | +##### 创建删除中断 + +| 接口名 | 接口描述 | +| :------------ | :----------------------------------------------------------- | +| LOS_HwiCreate | 中断创建,注册中断号、中断触发模式、中断优先级、中断处理程序。中断被触发时,会调用该中断处理程序 | +| LOS_HwiDelete | 根据所提供的中断号删除中断 | + +##### 开/关中断 + +| 接口名 | 接口描述 | +| -------------- | ------------------------------------------- | +| LOS_IntUnlock | 打开当前处理器所有中断响应 | +| LOS_IntLock | 关闭当前处理器所有中断响应 | +| LOS_IntRestore | 与LOS_IntLock配套使用,恢复到使用LOS_IntLock关闭所有中断之前的状态 | + +##### 获取系统中断信息 + +| 接口名 | 接口描述 | +| ----------------------- | ------------------------ | +| LOS_GetSystemHwiMaximum | 获取系统支持的最大中断数 | + ### 开发流程 @@ -53,32 +81,30 @@ 2. 删除中断。 -代码实现如下,演示如何创建中断和删除中断,当指定的中断号HWI_NUM_TEST产生中断时,会调用中断处理函数: - +代码实现如下,演示如何创建中断和删除中断,当指定的中断号HWI_NUM_TEST产生中断时,会调用中断处理函数(该示例代码的测试函数可以加在kernel/liteos_a/testsuites/kernel/src/osTest.c中的TestTaskEntry中进行测试): - -``` +```c #include "los_hwi.h" /*中断处理函数*/ STATIC VOID HwiUsrIrq(VOID) { - printf("in the func HwiUsrIrq \n"); + PRINK("in the func HwiUsrIrq \n"); } static UINT32 Example_Interrupt(VOID) { UINT32 ret; - HWI_HANDLE_T hwiNum = 7; - HWI_PRIOR_T hwiPrio = 3; + HWI_HANDLE_T hwiNum = 7; // 7: 使用的中断号 + HWI_PRIOR_T hwiPrio = 3; // 3: 中断优先级 HWI_MODE_T mode = 0; HWI_ARG_T arg = 0; /*创建中断*/ ret = LOS_HwiCreate(hwiNum, hwiPrio, mode, (HWI_PROC_FUNC)HwiUsrIrq, (HwiIrqParam *)arg); - if(ret == LOS_OK){ - printf("Hwi create success!\n"); + if (ret == LOS_OK) { + PRINK("Hwi create success!\n"); } else { - printf("Hwi create failed!\n"); + PRINK("Hwi create failed!\n"); return LOS_NOK; } @@ -86,11 +112,11 @@ static UINT32 Example_Interrupt(VOID) LOS_TaskDelay(50); /*删除中断*/ - ret = LOS_HwiDelete(hwiNum, (HwiIrqParam *)arg); - if(ret == LOS_OK){ - printf("Hwi delete success!\n"); + ret = LOS_HwiDelete(hwiNum, (HwiIrqParam *)arg); + if (ret == LOS_OK) { + PRINK("Hwi delete success!\n"); } else { - printf("Hwi delete failed!\n"); + PRINK("Hwi delete failed!\n"); return LOS_NOK; } return LOS_OK; @@ -102,7 +128,6 @@ static UINT32 Example_Interrupt(VOID) 编译运行得到的结果为: - ``` Hwi create success! Hwi delete success! diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-process-process.md b/zh-cn/device-dev/kernel/kernel-small-basic-process-process.md index 388c81166d1afafb8a86dda0a59567394985ae90..85eac776972bb42ad8ac8071f2518052acb083ef 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-process-process.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-process-process.md @@ -3,7 +3,7 @@ ## 基本概念 -进程是系统资源管理的最小单元。OpenHarmony LiteOS-A内核提供的进程模块主要用于实现用户态进程的隔离,内核态被视为一个进程空间,不存在其它进程(KIdle除外,KIdle进程是系统提供的空闲进程,和KProcess共享一个进程空间)。 +进程是系统资源管理的最小单元。OpenHarmony LiteOS-A 内核提供的进程模块主要用于实现用户态进程的隔离,内核态被视为一个进程空间,不存在其它进程(KIdle除外,KIdle进程是系统提供的空闲进程,和KProcess共享一个进程空间。KProcess 是内核态进程的根进程,KIdle 是其子进程)。 - 进程模块主要为用户提供多个进程,实现了进程之间的切换和通信,帮助用户管理业务程序流程。 @@ -36,10 +36,10 @@ **进程状态迁移说明:** - Init→Ready: - 进程创建或fork时,拿到该进程控制块后进入Init状态,处于进程初始化阶段,当进程初始化完成将进程插入调度队列,此时进程进入就绪状态。 + 进程创建或 fork 时,拿到对应进程控制块后进入 Init 状态,即进程初始化阶段,当该阶段完成后进程将被插入调度队列,此时进程进入就绪状态。 - Ready→Running: - 进程创建后进入就绪态,发生进程切换时,就绪列表中最高优先级的进程被执行,从而进入运行态。若此时该进程中已无其它线程处于就绪态,则进程从就绪列表删除,只处于运行态;若此时该进程中还有其它线程处于就绪态,则该进程依旧在就绪队列,此时进程的就绪态和运行态共存,但对外呈现的进程状态为运行态。 + 进程创建后进入就绪态,发生进程切换时,就绪列表中优先级最高且获得时间片的进程被执行,从而进入运行态。若此时该进程中已无其它线程处于就绪态,则进程从就绪列表删除,只处于运行态;若此时该进程中还有其它线程处于就绪态,则该进程依旧在就绪队列,此时进程的就绪态和运行态共存,但对外呈现的进程状态为运行态。 - Running→Pending: 进程在最后一个线程转为阻塞态时, 进程内所有的线程均处于阻塞态,此时进程同步进入阻塞态,然后发生进程切换。 @@ -54,7 +54,7 @@ 进程由运行态转为就绪态的情况有以下两种: 1. 有更高优先级的进程创建或者恢复后,会发生进程调度,此刻就绪列表中最高优先级进程变为运行态,那么原先运行的进程由运行态变为就绪态。 - 2. 若进程的调度策略为LOS_SCHED_RR,且存在同一优先级的另一个进程处于就绪态,则该进程的时间片消耗光之后,该进程由运行态转为就绪态,另一个同优先级的进程由就绪态转为运行态。 + 2. 若进程的调度策略为 LOS_SCHED_RR(时间片轮转),且存在同一优先级的另一个进程处于就绪态,则该进程的时间片消耗光之后,该进程由运行态转为就绪态,另一个同优先级的进程由就绪态转为运行态。 - Running→Zombies: 当进程的主线程或所有线程运行结束后,进程由运行态转为僵尸态,等待父进程回收资源。 @@ -78,16 +78,47 @@ OpenHarmony 提供的进程模块主要用于实现用户态进程的隔离, ### 接口说明 - **表1** 进程管理模块接口 +##### 表1 进程及进程组 + +| 接口名 | 接口描述 | +| ------------------------- | ---------------------- | +| LOS_GetCurrProcessID | 获取当前进程的进程ID | +| LOS_GetProcessGroupID | 获取指定进程的进程组ID | +| LOS_GetCurrProcessGroupID | 获取当前进程的进程组ID | + +##### 表2 用户及用户组 + +| 接口名 | 接口描述 | +| ----------------- | ---------------------------------------- | +| LOS_GetUserID | 获取当前进程的用户ID | +| LOS_GetGroupID | 获取当前进程的用户组ID | +| LOS_CheckInGroups | 检查指定用户组ID是否在当前进程的用户组内 | + +##### 表3 进程调度控制 + +| 接口名 | 接口 | +| ----------------------- | -------------------------------------------- | +| LOS_GetProcessScheduler | 获取指定进程的调度策略 | +| LOS_SetProcessScheduler | 设置指定进程的调度参数,包括优先级和调度策略 | +| LOS_SetProcessPriority | 设置进程优先级 | +| LOS_GetProcessPriority | 获取进程优先级 | + +##### 表4 系统进程信息获取 + +| 接口名 | 接口描述 | +| --------------------------- | -------------------------- | +| LOS_GetSystemProcessMaximum | 获取系统支持的最大进程数目 | +| LOS_GetUsedPIDList | 获得已使用的进程ID列表 | + +##### 表5 进程创建与结束 + +| 接口名 | 接口描述 | +| ---------- | -------------------------- | +| LOS_Fork | 创建子进程 | +| LOS_Wait | 等待子进程结束并回收子进程 | +| LOS_Waitid | 等待相应ID的进程结束 | +| LOS_Exit | 退出进程 | -| 功能分类 | 接口描述 | -| -------- | -------- | -| 进程调度参数控制 | - LOS_GetProcessScheduler:获取指定进程的调度策略
- LOS_SetProcessScheduler:设置指定进程的调度参数,包括优先级和调度策略 | -| 等待回收子进程 | LOS_Wait:等待子进程结束并回收子进程 | -| 进程组 | - LOS_GetProcessGroupID:获取指定进程的进程组ID
- LOS_GetCurrProcessGroupID:获取当前进程的进程组ID | -| 获取进程ID | LOS_GetCurrProcessID:获取当前进程的进程ID | -| 用户及用户组 | - LOS_GetUserID:获取当前进程的用户ID
- LOS_GetGroupID:获取当前进程的用户组ID
- LOS_CheckInGroups:检查指定用户组ID是否在当前进程的用户组内 | -| 系统支持的最大进程数 | LOS_GetSystemProcessMaximum:获取系统支持的最大进程数目 | ### 开发流程 @@ -96,7 +127,7 @@ OpenHarmony 提供的进程模块主要用于实现用户态进程的隔离, > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > - idle线程的数量跟随CPU核心数,每个CPU均有一个相应的idle线程。 -> +> > - 不支持创建除KProcess和KIdle进程之外的其它内核态进程。 -> +> > - 用户态进程通过系统调用进入内核态后创建的线程属于KProcess, 不属于当前用户态进程。 diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-process-scheduler.md b/zh-cn/device-dev/kernel/kernel-small-basic-process-scheduler.md index 8a6609d70d616c72d24a878e9adecde79bb16ca6..c13860cf5f71ca1f1693f6226af4ba5212f0cb17 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-process-scheduler.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-process-scheduler.md @@ -3,18 +3,18 @@ ## 基本概念 -OpenHarmony LiteOS-A内核 了高优先级优先+同优先级时间片轮转的抢占式调度机制,系统从启动开始基于real time的时间轴向前运行,使得该调度算法具有很好的实时性。 +OpenHarmony LiteOS-A内核采用了高优先级优先 + 同优先级时间片轮转的抢占式调度机制,系统从启动开始基于real time的时间轴向前运行,使得该调度算法具有很好的实时性。 -OpenHarmony 的调度算法将tickless机制天然嵌入到调度算法中,一方面使得系统具有更低的功耗,另一方面也使得tick中断按需响应,减少无用的tick中断响应,进一步提高系统的实时性。 +OpenHarmony 的调度算法将 tickless 机制天然嵌入到调度算法中,一方面使得系统具有更低的功耗,另一方面也使得 tick 中断按需响应,减少无用的 tick 中断响应,进一步提高系统的实时性。 -OpenHarmony 的进程调度策略支持SCHED_RR,线程调度策略支持SCHED_RR和SCHED_FIFO。 +OpenHarmony 的进程调度策略支持 SCHED_RR(时间片轮转),线程调度策略支持 SCHED_RR 和 SCHED_FIFO(先进先出)。 OpenHarmony 调度的最小单元为线程。 ## 运行机制 -OpenHarmony 采用进程优先级队列+线程优先级队列的方式,进程优先级范围为0-31,共有32个进程优先级桶队列,每个桶队列对应一个线程优先级桶队列;线程优先级范围也为0-31,一个线程优先级桶队列也有32个优先级队列。 +OpenHarmony 采用进程优先级队列 + 线程优先级队列的方式,进程优先级范围为0-31,共有32个进程优先级桶队列,每个桶队列对应一个线程优先级桶队列;线程优先级范围也为0-31,一个线程优先级桶队列也有32个优先级队列。 **图1** 调度优先级桶队列示意图 @@ -31,9 +31,13 @@ OpenHarmony 在系统启动内核初始化之后开始调度,运行过程中 ### 接口说明 - | 功能分类 | 接口**名称** | 描述 | -| -------- | -------- | -------- | -| 触发系统调度 | LOS_Schedule | 触发系统调度 | +| 接口**名称** | 描述 | +| -------- | -------- | +| LOS_Schedule | 触发系统调度 | +| LOS_GetTaskScheduler | 获取指定任务的调度策略 | +| LOS_SetTaskScheduler | 设置指定任务的调度策略 | +| LOS_GetProcessScheduler | 获取指定进程的调度策略 | +| LOS_SetProcessScheduler | 设置指定进程的调度参数,包括优先级和调度策略 | ### 开发流程 diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md b/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md index a7934c306676f213033cf5b644d15555ecda34c9..ffe02de8d9733d24fad0a490e73a8fa9747872dc 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md @@ -52,7 +52,7 @@ OpenHarmony 内核的任务一共有32个优先级(0-31),最高优先级为0 有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪列表中最高优先级任务变为运行态,那么原先运行的任务由运行态变为就绪态,并加入就绪列表中。 - Running→Exit: - 运行中的任务运行结束,任务状态由运行态变为退出态。若为设置了分离属性(LOS_TASK_STATUS_DETACHED)的任务,运行结束后将直接销毁。 + 运行中的任务运行结束,任务状态由运行态变为退出态。若为设置了分离属性( 由头文件 los_task.h 中的宏定义 LOS_TASK_STATUS_DETACHED 设置)的任务,运行结束后将直接销毁。 ## 运行机制 @@ -67,16 +67,58 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起 ### 接口说明 - | 功能分类 | 接口描述 | -| -------- | -------- | -| 任务的创建和删除 | - LOS_TaskCreate:创建任务,并使该任务进入Init状态,不执行任务调度
- LOS_TaskDelete:创建任务,并使该任务进入Ready状态,并调度
- LOS_TaskDelete:删除指定的任务 | -| 任务状态控制 | - LOS_TaskResume:恢复挂起的任务
- LOS_TaskSuspend:挂起指定的任务
- LOS_TaskJoin:挂起当前任务,等待指定任务运行结束并回收其任务控制块资源
- LOS_TaskDetach:修改任务的joinable属性为detach属性,detach属性的任务运行结束会自动回收任务控制块资源
- LOS_TaskDelay:任务延时等待
- LOS_TaskYield:显式放权,调整调用任务优先级的任务调度顺序 | -| 任务调度的控制 | - LOS_TaskLock:锁任务调度
- LOS_TaskUnlock:解锁任务调度 | -| 任务优先级的控制 | - LOS_CurTaskPriSet:设置当前任务的优先级
- LOS_TaskPriSet:设置指定任务的优先级
- LOS_TaskPriGet:获取指定任务的优先级 | -| 任务信息获取 | - LOS_CurTaskIDGet:获取当前任务的ID
- LOS_TaskInfoGet:获取指定任务的信息 | -| 任务绑核操作 | - LOS_TaskCpuAffiSet:绑定指定任务到指定CPU上运行,仅在多核下使用
- LOS_TaskCpuAffiGet:获取指定任务的绑核信息,仅在多核下使用 | -| 任务调度参数的控制 | - LOS_GetTaskScheduler:获取指定任务的调度策略
- LOS_SetTaskScheduler:设置指定任务的调度参数,包括优先级和调度策略 | -| 系统支持的最大任务数 | LOS_GetSystemTaskMaximum | +##### 表1 任务的创建和删除 + +| 接口名 | 接口描述 | +| ------------------ | ------------------------------------------------------------ | +| LOS_TaskCreate | 创建任务,若所创建任务的优先级比当前的运行的任务优先级高且任务调度没有锁定,
则该任务将被调度进入运行态 | +| LOS_TaskCreateOnly | 创建任务并阻塞,任务恢复前不会将其加入就绪队列中 | +| LOS_TaskDelete | 删除指定的任务,回收其任务控制块和任务栈所消耗的资源 | + +##### 表2 任务的状态控制 + +| 接口名 | 接口描述 | +| --------------- | ------------------------------------------------------------ | +| LOS_TaskResume | 恢复挂起的任务 | +| LOS_TaskSuspend | 挂起指定的任务,该任务将从就绪任务队列中移除 | +| LOS_TaskJoin | 阻塞当前任务,等待指定任务运行结束并回收其资源 | +| LOS_TaskDetach | 修改任务的 joinable 属性为 detach 属性,detach 属性的任务运行结束会自动回收任务控制块资源 | +| LOS_TaskDelay | 延迟当前任务的执行,在延后指定的时间(tick数)后可以被调度 | +| LOS_TaskYield | 将当前任务从具有相同优先级的任务队列,移动到就绪任务队列的末尾 | + +##### 表3 任务调度 + +| 接口名 | 接口描述 | +| -------------------- | ------------------------------------------------------------ | +| LOS_TaskLock | 锁定任务调度,阻止任务切换 | +| LOS_TaskUnlock | 解锁任务调度。通过该接口可以使任务锁数量减1,若任务多次加锁,那么
任务调度在锁数量减为0时才会完全解锁 | +| LOS_GetTaskScheduler | 获取指定任务的调度策略 | +| LOS_SetTaskScheduler | 设置指定任务的调度参数,包括优先级和调度策略 | +| LOS_Schedule | 触发主动的任务调度 | + +##### 表4 任务相关信息获取 + +| 接口名 | 接口描述 | +| ------------------------ | ------------------------ | +| LOS_CurTaskIDGet | 获取当前任务的ID | +| LOS_TaskInfoGet | 获取指定任务的信息 | +| LOS_GetSystemTaskMaximum | 获取系统支持的最大任务数 | + +##### 表5 任务优先级 + +| 接口名 | 接口描述 | +| ----------------- | ------------------------------ | +| LOS_CurTaskPriSet | 设置当前正在运行的任务的优先级 | +| LOS_TaskPriSet | 设置指定任务的优先级 | +| LOS_TaskPriGet | 获取指定任务的优先级 | + +##### 表6 任务绑核操作 + +| 接口名 | 接口描述 | +| ------------------ | ------------------------------------------- | +| LOS_TaskCpuAffiSet | 绑定指定任务到指定CPU上运行,仅在多核下使用 | +| LOS_TaskCpuAffiGet | 获取指定任务的绑核信息,仅在多核下使用 | + ### 开发流程 @@ -93,78 +135,79 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起 2. 任务参与调度运行,执行用户指定的业务代码。 -3. 任务执行结束,如果设置了LOS_TASK_STATUS_DETACHED属性,则自动回收任务资源,如果任务设置了LOS_TASK_ATTR_JOINABLE属性,则需要调用LOS_TaskJoin回收任务资源,默认为LOS_TASK_STATUS_DETACHED属性。 +3. 任务执行结束,如果设置了 LOS_TASK_STATUS_DETACHED 属性,则自动回收任务资源,如果任务设置了 LOS_TASK_ATTR_JOINABLE 属性,则需要调用LOS_TaskJoin 回收任务资源,默认为 LOS_TASK_STATUS_DETACHED 属性。 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > - 内核态具有最高权限,可以操作任意进程内的任务。 -> +> > - 用户态进程通过系统调用进入内核态后创建的任务属于KProcess, 不属于当前用户态进程。 ### 编程实例 -代码实现如下: +代码实现如下(该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试。): - -``` + +```c UINT32 g_taskLoID; -UINT32 g_taskHiID; -#define TSK_PRIOR_HI 4 -#define TSK_PRIOR_LO 5 -UINT32 ExampleTaskHi(VOID) -{ +UINT32 g_taskHiID; +#define TSK_PRIOR_HI 4 +#define TSK_PRIOR_LO 5 +UINT32 ExampleTaskHi(VOID) +{ UINT32 ret; - PRINTK("Enter TaskHi Handler.\n"); - /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(g_taskLoID任务) */ + PRINTK("Enter TaskHi Handler.\n"); + /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(g_taskLoID任务) */ ret = LOS_TaskDelay(2); - if (ret != LOS_OK) { + if (ret != LOS_OK) { PRINTK("Delay Task Failed.\n"); - return LOS_NOK; - } - /* 2个Tick时间到了后,该任务恢复,继续执行 */ - PRINTK("TaskHi LOS_TaskDelay Done.\n"); - /* 挂起自身任务 */ - ret = LOS_TaskSuspend(g_taskHiID); + return LOS_NOK; + } + /* 2个Tick时间到了后,该任务恢复,继续执行 */ + PRINTK("TaskHi LOS_TaskDelay Done.\n"); + /* 挂起自身任务 */ + ret = LOS_TaskSuspend(g_taskHiID); if (ret != LOS_OK) { - PRINTK("Suspend TaskHi Failed.\n"); + PRINTK("Suspend TaskHi Failed.\n"); return LOS_NOK; - } - PRINTK("TaskHi LOS_TaskResume Success.\n"); + } + PRINTK("TaskHi LOS_TaskResume Success.\n"); return LOS_OK; } -/* 低优先级任务入口函数 */ +/* 低优先级任务入口函数 */ UINT32 ExampleTaskLo(VOID) -{ - UINT32 ret; - PRINTK("Enter TaskLo Handler.\n"); +{ + UINT32 ret; + PRINTK("Enter TaskLo Handler.\n"); /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中就高优先级的任务(背景任务) */ - ret = LOS_TaskDelay(2); - if (ret != LOS_OK) { - PRINTK("Delay TaskLo Failed.\n"); - return LOS_NOK; - } + ret = LOS_TaskDelay(2); + if (ret != LOS_OK) { + PRINTK("Delay TaskLo Failed.\n"); + return LOS_NOK; + } PRINTK("TaskHi LOS_TaskSuspend Success.\n"); /* 恢复被挂起的任务g_taskHiID */ ret = LOS_TaskResume(g_taskHiID); if (ret != LOS_OK) { PRINTK("Resume TaskHi Failed.\n"); return LOS_NOK; - } - PRINTK("TaskHi LOS_TaskDelete Success.\n"); + } + PRINTK("TaskHi LOS_TaskDelete Success.\n"); return LOS_OK; -} -/* 任务测试入口函数,在里面创建优先级不一样的两个任务 */ -UINT32 ExampleTaskCaseEntry(VOID) -{ - UINT32 ret; +} +/* 任务测试入口函数,在里面创建优先级不一样的两个任务 */ +UINT32 ExampleTaskCaseEntry(VOID) +{ + UINT32 ret; TSK_INIT_PARAM_S initParam = {0}; /* 锁任务调度 */ LOS_TaskLock(); PRINTK("LOS_TaskLock() Success!\n"); + /* 高优先级任务的初始化参数,其资源回收需要其他任务调用 LOS_TaskJoin */ initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)ExampleTaskHi; - initParam.usTaskPrio = TSK_PRIOR_HI; + initParam.usTaskPrio = TSK_PRIOR_HI; initParam.pcName = "HIGH_NAME"; initParam.uwStackSize = LOS_TASK_MIN_STACK_SIZE; initParam.uwResved = LOS_TASK_ATTR_JOINABLE; @@ -175,23 +218,24 @@ UINT32 ExampleTaskCaseEntry(VOID) LOS_TaskUnlock(); PRINTK("ExampleTaskHi create Failed! ret=%d\n", ret); return LOS_NOK; - } + } PRINTK("ExampleTaskHi create Success!\n"); + /* 低优先级任务的初始化参数,任务结束后会自行结束销毁 */ initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)ExampleTaskLo; initParam.usTaskPrio = TSK_PRIOR_LO; initParam.pcName = "LOW_NAME"; initParam.uwStackSize = LOS_TASK_MIN_STACK_SIZE; initParam.uwResved = LOS_TASK_STATUS_DETACHED; - /* 创建低优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ + /* 创建低优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskLoID, &initParam); - if (ret!= LOS_OK) { - LOS_TaskUnlock(); + if (ret!= LOS_OK) { + LOS_TaskUnlock(); PRINTK("ExampleTaskLo create Failed!\n"); - return LOS_NOK; - } - PRINTK("ExampleTaskLo create Success!\n"); + return LOS_NOK; + } + PRINTK("ExampleTaskLo create Success!\n"); /* 解锁任务调度,此时会发生任务调度,执行就绪列表中最高优先级任务 */ LOS_TaskUnlock(); @@ -203,12 +247,12 @@ UINT32 ExampleTaskCaseEntry(VOID) } while(1){}; return LOS_OK; -} +} ``` 编译运行得到的结果为: - + ``` LOS_TaskLock() Success! ExampleTaskHi create Success! diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-softtimer.md b/zh-cn/device-dev/kernel/kernel-small-basic-softtimer.md index 230c1bd90b092e73b4885b1700997be80b604254..dd2459887b373f89358020b246d2b8ff8f75e10d 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-softtimer.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-softtimer.md @@ -3,9 +3,13 @@ ## 基本概念 -软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数值后会触发用户定义的回调函数。定时精度与系统Tick时钟的周期有关。硬件定时器受硬件的限制,数量上不足以满足用户的实际需求,因此为了满足用户需求,提供更多的定时器,OpenHarmony LiteOS-A内核提供软件定时器功能。软件定时器扩展了定时器的数量,允许创建更多的定时业务。 +软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数值后会触发用户定义的回调函数。定时精度与系统Tick时钟的周期有关。 -软件定时器功能上支持: +硬件定时器受硬件的限制,数量上不足以满足用户的实际需求,因此为了满足用户需求,提供更多的定时器,OpenHarmony LiteOS-A内核提供软件定时器功能。 + +软件定时器扩展了定时器的数量,允许创建更多的定时业务。 + +**软件定时器支持以下功能:** - 静态裁剪:能通过宏关闭软件定时器功能。 @@ -22,13 +26,17 @@ ## 运行机制 -软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由los_config.h中的LOSCFG_BASE_CORE_SWTMR_LIMIT宏配置。软件定时器使用了系统的一个队列和一个任务资源,软件定时器的触发遵循队列规则,先进先出。同一时刻设置的定时时间短的定时器总是比定时时间长的靠近队列头,满足优先被触发的准则。软件定时器以Tick为基本计时单位,当用户创建并启动一个软件定时器时,OpenHarmony系统会根据当前系统Tick时间及用户设置的定时间隔确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。 +软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由los_config.h中的LOSCFG_BASE_CORE_SWTMR_LIMIT宏配置。 + +软件定时器使用了系统的一个队列和一个任务资源,软件定时器的触发遵循队列规则,先进先出。同一时刻设置的定时时间短的定时器总是比定时时间长的靠近队列头,满足优先被触发的准则。 + +软件定时器以Tick为基本计时单位,当用户创建并启动一个软件定时器时,OpenHarmony系统会根据当前系统Tick时间及用户设置的定时间隔确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。 当Tick中断到来时,在Tick中断处理函数中扫描软件定时器的计时全局链表,看是否有定时器超时,若有则将超时的定时器记录下来。 Tick中断处理函数结束后,软件定时器任务(优先级为最高)被唤醒,在该任务中调用之前记录下来的定时器的超时回调函数。 -定时器状态 +**定时器状态:** - OS_SWTMR_STATUS_UNUSED(未使用) 系统在定时器模块初始化的时候将系统中所有定时器资源初始化成该状态。 @@ -39,9 +47,7 @@ Tick中断处理函数结束后,软件定时器任务(优先级为最高) - OS_SWTMR_STATUS_TICKING(计数) 在定时器创建后调用LOS_SwtmrStart接口,定时器将变成该状态,表示定时器运行时的状态。 -定时器模式 - -OpenHarmony系统的软件定时器提供三类定时器机制: +**定时器模式:** - 第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动删除。 @@ -55,20 +61,20 @@ OpenHarmony系统的软件定时器提供三类定时器机制: ### 接口说明 -OpenHarmony LiteOS-A内核的软件定时器模块提供下面几种功能,接口详细信息可以查看API参考。 +OpenHarmony LiteOS-A内核的软件定时器模块提供以下几种功能。 **表1** 软件定时器接口说明 -| 功能分类 | 接口描述 | -| -------- | -------- | -| 创建、删除定时器 | LOS_SwtmrCreate:创建软件定时器
LOS_SwtmrDelete:删除软件定时器 | -| 启动、停止定时器 | LOS_SwtmrStart:启动软件定时器
LOS_SwtmrStop:停止软件定时器 | -| 获得软件定时剩余Tick数 | LOS_SwtmrTimeGet:获得软件定时器剩余Tick数 | +| 功能分类 | 接口描述 | +| ---------------------- | ------------------------------------------------------------ | +| 创建、删除定时器 | LOS_SwtmrCreate:创建软件定时器
LOS_SwtmrDelete:删除软件定时器 | +| 启动、停止定时器 | LOS_SwtmrStart:启动软件定时器
LOS_SwtmrStop:停止软件定时器 | +| 获得软件定时剩余Tick数 | LOS_SwtmrTimeGet:获得软件定时器剩余Tick数 | ### 开发流程 -软件定时器的典型开发流程: +**软件定时器的典型开发流程:** 1. 配置软件定时器。 - 确认配置项LOSCFG_BASE_CORE_SWTMR和LOSCFG_BASE_IPC_QUEUE为打开状态; @@ -88,14 +94,15 @@ OpenHarmony LiteOS-A内核的软件定时器模块提供下面几种功能,接 6. 删除定时器LOS_SwtmrDelete。 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** +> > - 软件定时器的回调函数中不要做过多操作,不要使用可能引起任务挂起或者阻塞的接口或操作。 -> +> > - 软件定时器使用了系统的一个队列和一个任务资源,软件定时器任务的优先级设定为0,且不允许修改 。 -> +> > - 系统可配置的软件定时器资源个数是指:整个系统可使用的软件定时器资源总个数,而并非是用户可使用的软件定时器资源个数。例如:系统软件定时器多占用一个软件定时器资源数,那么用户能使用的软件定时器资源就会减少一个。 -> +> > - 创建单次软件定时器,该定时器超时执行完回调函数后,系统会自动删除该软件定时器,并回收资源。 -> +> > - 创建单次不自删除属性的定时器,用户需要调用定时器删除接口删除定时器,回收定时器资源,避免资源泄露。 @@ -110,7 +117,7 @@ OpenHarmony LiteOS-A内核的软件定时器模块提供下面几种功能,接 - 配置好OS_SWTMR_HANDLE_QUEUE_SIZE软件定时器队列最大长度。 **编程示例** - + ``` #include "los_swtmr.h" @@ -176,7 +183,7 @@ void Timer_example(void) **运行结果** - + ``` create Timer1 success start Timer1 success @@ -206,4 +213,4 @@ g_timercount2 =9 tick_last1=2101 g_timercount2 =10 tick_last1=2201 -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-time.md b/zh-cn/device-dev/kernel/kernel-small-basic-time.md index 9dca8cc0a5b64b3e0991d73247b281c3ed105bf5..5177b7f5dce34580d4c950f73c992b91c5d691bc 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-time.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-time.md @@ -3,9 +3,11 @@ ## 基本概念 -时间管理以系统时钟为基础。时间管理提供给应用程序所有和时间有关的服务。系统时钟是由定时/计数器产生的输出脉冲触发中断而产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也称为时标或者Tick。一个Tick的时长可以静态配置。用户是以秒、毫秒为单位计时,而操作系统时钟计时是以Tick为单位的,当用户需要对系统操作时,例如任务挂起、延时等,输入秒为单位的数值,此时需要时间管理模块对二者进行转换。 +时间管理以系统时钟为基础。时间管理提供给应用程序所有和时间有关的服务。系统时钟是由定时/计数器产生的输出脉冲触发中断而产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。 -Tick与秒之间的对应关系可以配置。 +系统时钟也称为时标或者Tick。一个Tick的时长可以静态配置。用户是以秒、毫秒为单位计时,而操作系统时钟计时是以Tick为单位的,当用户需要对系统操作时,例如任务挂起、延时等,输入秒为单位的数值,此时需要时间管理模块对二者进行转换。 + +**Tick与秒之间的对应关系可以配置。** - **Cycle** 系统最小的计时单位。Cycle的时长由系统主频决定,系统主频就是每秒钟的Cycle数。 @@ -13,24 +15,24 @@ Tick与秒之间的对应关系可以配置。 - **Tick** Tick是操作系统的基本时间单位,对应的时长由系统主频及每秒Tick数决定,由用户配置。 -OpenHarmony系统的时间管理模块提供时间转换、统计、延迟功能以满足用户对时间相关需求的实现。 +**OpenHarmony系统的时间管理模块提供时间转换、统计、延迟功能以满足用户对时间相关需求的实现。** ## 开发指导 -用户需要了解当前系统运行的时间以及Tick与秒、毫秒之间的转换关系时,需要使用到时间管理模块的接口。 +用户需要了解当前系统运行的时间以及Tick与秒、毫秒之间的转换关系,以及需要使用到时间管理模块的接口。 ### 接口说明 -OpenHarmony LiteOS-A内核的时间管理提供下面几种功能,接口详细信息可以查看API参考。 +OpenHarmony LiteOS-A内核的时间管理提供以下几种功能,接口详细信息可查看API参考。 - **表1** 时间管理相关接口说明 + **表1** 时间管理相关接口说明: -| 功能分类 | 接口描述 | -| -------- | -------- | -| 时间转换 | LOS_MS2Tick:毫秒转换成Tick
LOS_Tick2MS:Tick转换成毫秒 | -| 时间统计 | LOS_TickCountGet:获取当前Tick数
LOS_CyclePerTickGet:每个Tick的cycle数 | +| 功能分类 | 接口描述 | +| -------- | ------------------------------------------------------------ | +| 时间转换 | LOS_MS2Tick:毫秒转换成Tick
LOS_Tick2MS:Tick转换成毫秒 | +| 时间统计 | LOS_TickCountGet:获取当前Tick数
LOS_CyclePerTickGet:每个Tick的cycle数 | ### 开发流程 @@ -40,25 +42,26 @@ OpenHarmony LiteOS-A内核的时间管理提供下面几种功能,接口详细 2. 获取系统Tick数完成时间统计等。 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 获取系统Tick数需要在系统时钟使能之后。 -> -> - 时间管理不是单独的功能模块,依赖于los_config.h中的OS_SYS_CLOCK和LOSCFG_BASE_CORE_TICK_PER_SECOND两个配置选项。 -> -> - 系统的Tick数在关中断的情况下不进行计数,故系统Tick数不能作为准确时间计算。 +> +> - 获取系统Tick数需要在系统时钟使能之后。 +> +> - 时间管理不是单独的功能模块,依赖于los_config.h中的OS_SYS_CLOCK和LOSCFG_BASE_CORE_TICK_PER_SECOND两个配置选项。 +> +> - 系统的Tick数在关中断的情况下不进行计数,故系统Tick数不能作为准确时间计算。 ### 编程实例 前置条件: -- 配置好LOSCFG_BASE_CORE_TICK_PER_SECOND,即系统每秒的Tick数,范围(0, 1000]。 +- 配置好LOSCFG_BASE_CORE_TICK_PER_SECOND,即系统每秒的Tick数,范围(0, 1000)。 - 配置好OS_SYS_CLOCK 系统时钟频率,单位:Hz。 **示例代码** 时间转换: - + ``` VOID Example_TransformTime(VOID) { @@ -73,7 +76,7 @@ VOID Example_TransformTime(VOID) 时间统计和时间延迟: - + ``` VOID Example_GetTime(VOID) { @@ -106,7 +109,7 @@ VOID Example_GetTime(VOID) 时间转换: - + ``` uwTick = 10000 uwMs = 100 @@ -114,9 +117,9 @@ uwMs = 100 时间统计和时间延迟: - + ``` LOS_CyclePerTickGet = 49500 -LOS_TickCountGet = 5042 -LOS_TickCountGet after delay = 5242 -``` +LOS_TickCountGet = 347931 +LOS_TickCountGet after delay = 348134 +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-trans-event.md b/zh-cn/device-dev/kernel/kernel-small-basic-trans-event.md index 56737c618168cddd11a50b91dae498ecde549733..c5f5f696c388e861a4ecf215dbd8b9ee9e3d0179 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-trans-event.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-trans-event.md @@ -15,7 +15,7 @@ OpenHarmony LiteOS-A的事件模块提供的事件,具有如下特点: - 任务通过创建事件控制块来触发事件或等待事件。 -- 事件间相互独立,内部实现为一个32位无符号整型,每一位标识一种事件类型。第25位不可用,因此最多可支持31种事件类型。 +- 事件间相互独立,内部实现为一个32位无符号整型,每一位标识一种事件类型。(0表示该时间类型未发生,1表示该事件类型已经发生,一共31种事件类型,第25bit位(`0x02U << 24`)系统保留) - 事件仅用于任务间的同步,不提供数据传输功能。 @@ -80,10 +80,10 @@ OpenHarmony LiteOS-A内核的事件模块提供下面几种功能。 | 功能分类 | 接口描述 | | -------- | -------- | | 初始化事件 | LOS_EventInit:初始化一个事件控制块 | -| 读/写事件 | - LOS_EventRead:读取指定事件类型,超时时间为相对时间:单位为Tick
- LOS_EventWrite:写指定的事件类型 | +| 读/写事件 | - LOS_EventRead:读取指定事件类型,超时时间为相对时间:单位为Tick
- LOS_EventWrite:写指定的事件类型 | | 清除事件 | LOS_EventClear:清除指定的事件类型 | -| 校验事件掩码 | - LOS_EventPoll:根据用户传入的事件ID、事件掩码及读取模式,返回用户传入的事件是否符合预期
- LOS_EventDestroy:销毁指定的事件控制块 | -| 销毁事件 | LOS_EventDestroy:销毁指定的事件控制块 | +| 校验事件掩码 | - LOS_EventPoll:根据用户传入的事件ID、事件掩码及读取模式,返回用户传入的事件是否符合预期
- LOS_EventDestroy:销毁指定的事件控制块 | +| 销毁事件 | LOS_EventDestroy:销毁指定的事件控制块 | ### 开发流程 @@ -103,7 +103,7 @@ OpenHarmony LiteOS-A内核的事件模块提供下面几种功能。 6. 事件控制块销毁 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 进行事件读写操作时,事件的第25位为保留位,不可以进行位设置。 +> - 进行事件读写操作时,事件的第25bit(`0x02U << 24`)为保留bit位,不可以进行位设置。 > > - 对同一事件反复写入,算作一次写入。 @@ -128,9 +128,10 @@ OpenHarmony LiteOS-A内核的事件模块提供下面几种功能。 ### 编程示例 +本演示代码在./kernel/liteos_a/testsuites/kernel/src/osTest.c中编译验证,在TestTaskEntry中调用验证入口函数Example_EventEntry。 + 示例代码如下: - ``` #include "los_event.h" #include "los_task.h" diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-trans-mutex.md b/zh-cn/device-dev/kernel/kernel-small-basic-trans-mutex.md index 8bebc6f1cbb3bf8b0a9ab3825a62169561ac215d..cfa4fdba5ea9cb2f6ac2b4126d8fe9058b2728fb 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-trans-mutex.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-trans-mutex.md @@ -87,7 +87,7 @@ ### 编程实例 -**实例描述** +#### 实例描述 本实例实现如下流程: @@ -99,10 +99,11 @@ 4. 100Tick休眠时间到达后,Example_MutexTask2被唤醒, 释放互斥锁,唤醒Example_MutexTask1。Example_MutexTask1成功获取到互斥锁后,释放,删除互斥锁。 -**示例代码** +#### 编程示例 -示例代码如下: +本演示代码在./kernel/liteos_a/testsuites/kernel/src/osTest.c中编译验证,在TestTaskEntry中调用验证入口函数Example_MutexEntry。 +示例代码如下: ``` #include diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-trans-queue.md b/zh-cn/device-dev/kernel/kernel-small-basic-trans-queue.md index cdf3f64c4fa5a7d9c7df3d71481568661c23d1bb..30003b1eb5c286093b479c79a8670e07838e8545 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-trans-queue.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-trans-queue.md @@ -7,7 +7,7 @@ 任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。任务也能够往队列里写入消息,当队列已经写满消息时,挂起写入任务;当队列中有空闲消息节点时,挂起的写入任务被唤醒并写入消息。 -可以通过调整读队列和写队列的超时时间来调整读写接口的阻塞模式,如果将读队列和写队列的超时时间设置为0,就不会挂起任务,接口会直接返回,这就是非阻塞模式。反之,如果将都队列和写队列的超时时间设置为大于0的时间,就会以阻塞模式运行。 +可以通过调整读队列和写队列的超时时间来调整读写接口的阻塞模式,如果将读队列和写队列的超时时间设置为0,就不会挂起任务,接口会直接返回,这就是非阻塞模式。反之,如果将读队列和写队列的超时时间设置为大于0的时间,就会以阻塞模式运行。 消息队列提供了异步处理机制,允许将一个消息放入队列,但不立即处理。同时队列还有缓冲消息的作用,可以使用队列实现任务异步通信,队列具有如下特性: @@ -137,9 +137,10 @@ typedef struct { ### 编程示例 +本演示代码在./kernel/liteos_a/testsuites/kernel/src/osTest.c中编译验证,在TestTaskEntry中调用验证入口函数ExampleQueue。 + 示例代码如下: - ``` #include "los_task.h" #include "los_queue.h" diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-trans-semaphore.md b/zh-cn/device-dev/kernel/kernel-small-basic-trans-semaphore.md index 2ab8ebb7631d97c44596c1b29a5b0e2edb2fb068..de95e53e7c38dab8a9f720652bfb9eac3e6e0da7 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-trans-semaphore.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-trans-semaphore.md @@ -116,9 +116,10 @@ typedef struct { ### 编程示例 +本演示代码在./kernel/liteos_a/testsuites/kernel/src/osTest.c中编译验证,在TestTaskEntry中调用验证入口函数ExampleSem。 + 示例代码如下: - ``` #include "los_sem.h" #include "securec.h" diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md b/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md index 3c70d1195c576bb7fcae13a046042496908ea2b4..f9a50100fa2569422ce04beecbaac2da47c39e32 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-mutex.md @@ -10,26 +10,29 @@ Futex(Fast userspace mutex,用户态快速互斥锁)是内核提供的一种 当用户态线程释放锁时,先在用户态进行锁状态的判断维护,若此时没有其他线程被该锁阻塞,则直接在用户态进行解锁返回;反之,则需要进行阻塞线程的唤醒操作,通过Futex系统调用请求内核介入来唤醒阻塞队列中的线程。 + ## 运行机制 当用户态产生锁的竞争或释放需要进行相关线程的调度操作时,会触发Futex系统调用进入内核,此时会将用户态锁的地址传入内核,并在内核的Futex中以锁地址来区分用户态的每一把锁,因为用户态可用虚拟地址空间为1GiB,为了便于查找、管理,内核Futex采用哈希桶来存放用户态传入的锁。 -当前哈希桶共有80个,0~63号桶用于存放私有锁(以虚拟地址进行哈希),64~79号桶用于存放共享锁(以物理地址进行哈希),私有/共享属性通过用户态锁的初始化以及Futex系统调用入参确定。 +当前哈希桶共有80个,~~0-63号桶用于存放私有锁(以虚拟地址进行哈希),64-79~~号桶用于存放共享锁(以物理地址进行哈希),私有/共享属性通过用户态锁的初始化以及Futex系统调用入参确定。 + +## Futex设计图 - **图1** Futex设计图 + **图1** ![zh-cn_image_0000001127535690](figures/zh-cn_image_0000001127535690.jpg) 如图1,每个futex哈希桶中存放被futex_list串联起来的哈希值相同的futex node,每个futex node对应一个被挂起的task,node中key值唯一标识一把用户态锁,具有相同key值的node被queue_list串联起来表示被同一把锁阻塞的task队列。 -Futex有以下三种操作: +## Futex有以下三种操作: - **表1** Futex模块接口 +**Futex模块接口** -| 功能分类 | 接口**名称** | 描述 | -| -------- | -------- | -------- | -| 设置线程等待 | OsFutexWait | 向Futex表中插入代表被阻塞的线程的node | -| 唤醒被阻塞线程 | OsFutexWake | 唤醒一个被指定锁阻塞的线程 | -| 调整锁的地址 | OsFutexRequeue | 调整指定锁在Futex表中的位置 | +| 功能分类 | 接口**名称** | 描述 | +| -------------- | -------------- | ------------------------------------- | +| 设置线程等待 | OsFutexWait | 向Futex表中插入代表被阻塞的线程的node | +| 唤醒被阻塞线程 | OsFutexWake | 唤醒一个被指定锁阻塞的线程 | +| 调整锁的地址 | OsFutexRequeue | 调整指定锁在Futex表中的位置 | > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> Futex系统调用通常与用户态逻辑共同组成用户态锁,故推荐使用用户态POSIX接口的锁。 +> Futex系统调用通常与用户态逻辑共同组成用户态锁,故推荐使用用户态POSIX接口的锁。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-signal.md b/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-signal.md index aaa1f061537203ee243ba8ce14556ac89c4d52d0..e045d156ffa6baa2d533ccda05a87f8454aa3a2e 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-signal.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-trans-user-signal.md @@ -12,46 +12,53 @@ **表1** 信号的运作流程及相关接口(用户态接口) -| 功能分类 | 接口**名称** | 描述 | -| -------- | -------- | -------- | -| 注册信号回调函数 | signal: | 注册信号总入口及注册和去注册某信号的回调函数。 | -| 注册信号回调函数 | sigaction | 功能同signal,但增加了信号发送相关的配置选项,目前仅支持SIGINFO结构体中的部分参数。 | -| 发送信号 | kill
pthread_kill
raise
alarm
abort | 发送信号给某个进程或进程内发送消息给某线程,为某进程下的线程设置信号标志位。 | -| 触发回调 | 无 | 由系统调用与中断触发,内核态与用户态切换前会先进入用户态指定函数并处理完相应回调函数,再回到原用户态程序继续运行。 | +| 功能分类 | 接口**名称** | 描述 | +| ---------------- | --------------------------------------------------- | ------------------------------------------------------------ | +| 注册信号回调函数 | signal | 注册信号总入口及注册和去注册某信号的回调函数。 | +| 注册信号回调函数 | sigaction | 功能同signal,但增加了信号发送相关的配置选项,目前仅支持SIGINFO结构体中的部分参数。 | +| 发送信号 | kill
pthread_kill
raise
alarm
abort | 发送信号给某个进程或进程内发送消息给某线程,为某进程下的线程设置信号标志位。 | +| 触发回调 | 无 | 由系统调用与中断触发,内核态与用户态切换前会先进入用户态指定函数并处理完相应回调函数,再回到原用户态程序继续运行。 | > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 信号机制为提供给用户态程序进程间通信的能力,故推荐使用上表1列出的用户态POSIX相关接口。 -> -> 注册回调函数: -> -> -> ``` -> void *signal(int sig, void (*func)(int))(int); -> ``` -> -> a. 31 号信号,该信号用来注册该进程的回调函数处理入口,不可重复注册。 -> -> b. 0-30 号信号,该信号段用来注册与去注册回调函数。 -> -> 注册回调函数: -> -> -> ``` -> int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict); -> ``` -> -> 支持信号注册的配置修改和配置获取,目前仅支持SIGINFO的选项,SIGINFO内容见sigtimedwait接口内描述。 -> -> 发送信号: -> -> a. 进程接收信号存在默认行为,单不支持POSIX标准所给出的STOP及CONTINUE、COREDUMP功能。 -> -> b. 进程无法屏蔽SIGSTOP、SIGKILL、SIGCONT信号。 -> -> c. 某进程后被杀死后,若其父进程不回收该进程,其转为僵尸进程。 -> -> d. 进程接收到某信号后,直到该进程被调度后才会执行信号回调。 -> -> e. 进程结束后会发送SIGCHLD信号给父进程,该发送动作无法取消。 -> -> f. 无法通过信号唤醒处于DELAY状态的进程。 +> 信号机制为提供给用户态程序进程间通信的能力,故推荐使用上表1列出的用户态POSIX相关接口。 +> +> **注册回调函数:** +> +> +> ``` +> void *signal(int sig, void (*func)(int))(int); +> ``` +> +> - 31 号信号,该信号用来注册该进程的回调函数处理入口,不可重复注册。 +> +> +> - 0-30 号信号,该信号段用来注册与去注册回调函数。 +> +> +> **注册回调函数:** +> +> +> ``` +> int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict); +> ``` +> +> 支持信号注册的配置修改和配置获取,目前仅支持SIGINFO的选项,SIGINFO内容见sigtimedwait接口内描述。 +> +> **发送信号:** +> +> - 进程接收信号存在默认行为,单不支持POSIX标准所给出的STOP及CONTINUE、COREDUMP功能。 +> +> +> - 进程无法屏蔽SIGSTOP、SIGKILL、SIGCONT信号。 +> +> +> - 某进程后被杀死后,若其父进程不回收该进程,其转为僵尸进程。 +> +> +> - 进程接收到某信号后,直到该进程被调度后才会执行信号回调。 +> +> +> - 进程结束后会发送SIGCHLD信号给父进程,该发送动作无法取消。 +> +> +> - 无法通过信号唤醒处于DELAY状态的进程。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-bundles-ipc.md b/zh-cn/device-dev/kernel/kernel-small-bundles-ipc.md index a88b52fbe6f9c54ac59f3a1ff83dc440d3a25edd..62dc10cba0747b8e1e6b29d5373a43bb6f3d9bba 100644 --- a/zh-cn/device-dev/kernel/kernel-small-bundles-ipc.md +++ b/zh-cn/device-dev/kernel/kernel-small-bundles-ipc.md @@ -5,12 +5,20 @@ LiteIPC是OpenHarmony LiteOS-A内核提供的一种新型IPC(Inter-Process Communication,即进程间通信)机制,不同于传统的System V IPC机制,LiteIPC主要是为RPC(Remote Procedure Call,即远程过程调用)而设计的,而且是通过设备文件的方式对上层提供接口的,而非传统的API函数方式。 -LiteIPC中有两个主要概念,一个是ServiceManager,另一个是Service。整个系统只能有一个ServiceManager,而Service可以有多个。ServiceManager有两个主要功能:一是负责Service的注册和注销,二是负责管理Service的访问权限(只有有权限的任务(Task)可以向对应的Service发送IPC消息)。 +LiteIPC中有两个主要概念,一个是ServiceManager,另一个是Service。整个系统只能有一个ServiceManager,而Service可以有多个。 + +**ServiceManager有两个主要功能:** + +- 一是负责Service的注册和注销, + +- 二是负责管理Service的访问权限(只有有权限的任务(Task)可以向对应的Service发送IPC消息)。 ## 运行机制 -首先将需要接收IPC消息的任务通过ServiceManager注册成为一个Service,然后通过ServiceManager为该Service任务配置访问权限,即指定哪些任务可以向该Service任务发送IPC消息。LiteIPC的核心思想就是在内核态为每个Service任务维护一个IPC消息队列,该消息队列通过LiteIPC设备文件向上层用户态程序分别提供代表收取IPC消息的读操作和代表发送IPC消息的写操作。 +首先将需要接收IPC消息的任务通过ServiceManager注册成为一个Service,然后通过ServiceManager为该Service任务配置访问权限,即指定哪些任务可以向该Service任务发送IPC消息。 + +LiteIPC的核心思想就是在内核态为每个Service任务维护一个IPC消息队列,该消息队列通过LiteIPC设备文件向上层用户态程序分别提供代表收取IPC消息的读操作和代表发送IPC消息的写操作。 ## 开发指导 @@ -20,11 +28,11 @@ LiteIPC中有两个主要概念,一个是ServiceManager,另一个是Service **表1** LiteIPC模块接口(仅LiteOS-A内部使用) -| 功能分类 | 接口描述 | -| -------- | -------- | -| 模块初始化 | OsLiteIpcInit:初始化LiteIPC模块 | -| IPC消息内存池 | - LiteIpcPoolInit:初始化进程的IPC消息内存池
- LiteIpcPoolReInit:重新初始化进程的IPC消息内存池
- LiteIpcPoolDelete:释放进程的IPC消息内存池 | -| Service管理 | LiteIpcRemoveServiceHandle:删除指定的Service | +| 功能分类 | 接口描述 | +| ------------- | ------------------------------------------------------------ | +| 模块初始化 | OsLiteIpcInit:初始化LiteIPC模块 | +| IPC消息内存池 | - LiteIpcPoolInit:初始化进程的IPC消息内存池
- LiteIpcPoolReInit:重新初始化进程的IPC消息内存池
- LiteIpcPoolDelete:释放进程的IPC消息内存池 | +| Service管理 | LiteIpcRemoveServiceHandle:删除指定的Service | > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> LiteIPC模块接口都只在LiteOS-A内部使用。 +> LiteIPC模块接口都只在LiteOS-A内部使用。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-bundles-linking.md b/zh-cn/device-dev/kernel/kernel-small-bundles-linking.md index b82577accf4e2a79da7eb0563d3f103a663b3cad..323cafe4712e0d10d5a9bd61f7c46416baec92c8 100644 --- a/zh-cn/device-dev/kernel/kernel-small-bundles-linking.md +++ b/zh-cn/device-dev/kernel/kernel-small-bundles-linking.md @@ -16,7 +16,7 @@ OpenHarmony系统的动态加载与链接机制主要是由内核加载器以及 ## 运行机制 - **图1** 动态加载流程 + **图1** **动态加载流程** ![zh-cn_image_0000001133104502](figures/zh-cn_image_0000001133104502.png) 1. 内核将应用程序ELF文件的PT_LOAD段信息映射至进程空间。对于ET_EXEC类型的文件,根据PT_LOAD段中p_vaddr进行固定地址映射;对于ET_DYN类型(位置无关的可执行程序,通过编译选项“-fPIE”得到)的文件,内核通过mmap接口选择base基址进行映射(load_addr = base + p_vaddr)。 @@ -25,18 +25,18 @@ OpenHarmony系统的动态加载与链接机制主要是由内核加载器以及 3. 动态链接器自举并查找应用程序依赖的所有共享库并对导入符号进行重定位,最后跳转至应用程序的e_entry(或base + e_entry),开始运行应用程序。 - **图2** 程序执行流程 + **图2** **程序执行流程** ![zh-cn_image_0000001133264664](figures/zh-cn_image_0000001133264664.png) -1. 加载器与链接器调用mmap映射PT_LOAD段; +1. 加载器与链接器调用mmap映射PT_LOAD段。 -2. 内核调用map_pages接口查找并映射pagecache已有的缓存; +2. 内核调用map_pages接口查找并映射pagecache已有的缓存。 -3. 程序执行时,虚拟内存区间若无具体的物理内存做映射,系统将触发缺页中断,将elf文件内容读入物理内存,并将该内存块加入pagecache; +3. 程序执行时,虚拟内存区间若无具体的物理内存做映射,系统将触发缺页中断,将elf文件内容读入物理内存,并将该内存块加入pagecache。 -4. 将已读入文件内容的物理内存与虚拟地址区间做映射; +4. 将已读入文件内容的物理内存与虚拟地址区间做映射。 -5. 程序继续执行; +5. 程序继续执行。 ## 开发指导 @@ -46,11 +46,11 @@ OpenHarmony系统的动态加载与链接机制主要是由内核加载器以及 **表1** 内核加载器模块接口 -| 功能分类 | 接口**名称** | 描述 | -| -------- | -------- | -------- | -| 模块初始化 | LOS_DoExecveFile | 根据输入的参数执行指定的用户程序 | +| 功能分类 | 接口**名称** | 描述 | +| ---------- | ---------------- | -------------------------------- | +| 模块初始化 | LOS_DoExecveFile | 根据输入的参数执行指定的用户程序 | ### 开发流程 -LOS_DoExecveFile接口一般由用户通过exec家族函数利用系统调用机制创建新的进程,内核不能直接调用该接口启动新进程。 +LOS_DoExecveFile接口一般由用户通过exec家族函数利用系统调用机制创建新的进程,内核不能直接调用该接口启动新进程。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-bundles-share.md b/zh-cn/device-dev/kernel/kernel-small-bundles-share.md index 5049f8883af54c553de6def88f3fedbb39f96798..f3090ce771a2fef676aa6b7bfc263df708c08af5 100644 --- a/zh-cn/device-dev/kernel/kernel-small-bundles-share.md +++ b/zh-cn/device-dev/kernel/kernel-small-bundles-share.md @@ -12,7 +12,7 @@ OpenHarmony系统通过VDSO机制实现上层用户态程序可以快速读取 VDSO其核心思想就是内核看护一段内存,并将这段内存映射(只读)进用户态应用程序的地址空间,应用程序通过链接vdso.so后,将某些系统调用替换为直接读取这段已映射的内存从而避免系统调用达到加速的效果。 -VDSO总体可分为数据页与代码页两部分: +**VDSO总体可分为数据页与代码页两部分:** - 数据页提供内核映射给用户进程的内核时数据; @@ -21,7 +21,7 @@ VDSO总体可分为数据页与代码页两部分: **图1** VDSO系统设计 ![zh-cn_image_0000001173586763](figures/zh-cn_image_0000001173586763.jpg) -如图1所示,当前VDSO机制有以下几个主要步骤: +**如图1所示,当前VDSO机制有以下几个主要步骤:** ① 内核初始化时进行VDSO数据页的创建; @@ -42,6 +42,9 @@ VDSO总体可分为数据页与代码页两部分: ⑨ 将从VDSO数据页获取到的数据作为结果返回给用户程序; > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> - 当前VDSO机制支持LibC库clock_gettime接口的CLOCK_REALTIME_COARSE与CLOCK_MONOTONIC_COARSE功能,clock_gettime接口的使用方法详见POSIX标准。用户调用C库接口clock_gettime(CLOCK_REALTIME_COARSE, &ts)或者clock_gettime(CLOCK_MONOTONIC_COARSE, &ts)即可使用VDSO机制。 -> -> - 使用VDSO机制得到的时间精度会与系统tick中断的精度保持一致,适用于对时间没有高精度要求且短时间内会高频触发clock_gettime或gettimeofday系统调用的场景,若有高精度要求,不建议采用VDSO机制。 +> +> - 当前VDSO机制支持LibC库clock_gettime接口的CLOCK_REALTIME_COARSE与CLOCK_MONOTONIC_COARSE功能,clock_gettime接口的使用方法详见POSIX标准。 +> +> - 用户调用C库接口clock_gettime(CLOCK_REALTIME_COARSE, &ts)或者clock_gettime(CLOCK_MONOTONIC_COARSE, &ts)即可使用VDSO机制。 +> +> - 使用VDSO机制得到的时间精度会与系统tick中断的精度保持一致,适用于对时间没有高精度要求且短时间内会高频触发clock_gettime或gettimeofday系统调用的场景,若有高精度要求,不建议采用VDSO机制。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-memory-corrupt.md b/zh-cn/device-dev/kernel/kernel-small-debug-memory-corrupt.md index 11da1497e3478b2207bada0f8ee52728eaa577eb..9485fdbc1ac4b258569b3999ef13cf77d94f4762 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-memory-corrupt.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-memory-corrupt.md @@ -42,11 +42,12 @@ LOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK:开关宏,默认关闭;若打开这 **示例代码** +该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试. 代码实现如下: - -``` + +```c #include #include #include "los_memory.h" @@ -70,12 +71,12 @@ void MemIntegrityTest(void) 编译运行输出log如下: - + ``` [ERR][OsMemMagicCheckPrint], 2028, memory check error! memory used but magic num wrong, magic num = 0x00000000 /* 提示信息,检测到哪个字段被破坏了,用例构造了将下个节点的头4个字节清零,即魔鬼数字字段 */ - broken node head: 0x20003af0 0x00000000 0x80000020, prev node head: 0x20002ad4 0xabcddcba 0x80000020 + broken node head: 0x20003af0 0x00000000 0x80000020, prev node head: 0x20002ad4 0xabcddcba 0x80000020 /* 被破坏节点和其前节点关键字段信息,分别为其前节点地址、节点的魔鬼数字、节点的sizeAndFlag;可以看出被破坏节点的魔鬼数字字段被清零,符合用例场景 */ broken node head LR info: /* 节点的LR信息需要开启内存检测功能才有有效输出 */ diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-memory-info.md b/zh-cn/device-dev/kernel/kernel-small-debug-memory-info.md index 29281d54b2486a737a7efccd1d66ebfd6ae14e4b..26a01840b82ee9836f48d19587fcc4292cf07b09 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-memory-info.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-memory-info.md @@ -7,7 +7,7 @@ - 内存水线:即内存池的最大使用量,每次申请和释放时,都会更新水线值,实际业务可根据该值,优化内存池大小; -- 碎片率:衡量内存池的碎片化程度,碎片率高表现为内存池剩余内存很多,但是最大空闲内存块很小,可以用公式(fragment=100-100\*最大空闲内存块大小/剩余内存大小)来度量 +- 碎片率:衡量内存池的碎片化程度,碎片率高表现为内存池剩余内存很多,但是最大空闲内存块很小,可以用公式(fragment=100-100\*最大空闲内存块大小/剩余内存大小)来度量; - 其他统计信息:调用接口LOS_MemInfoGet时,会扫描内存池的节点信息,统计出相关信息。 @@ -24,8 +24,8 @@ LOSCFG_MEM_WATERLINE:开关宏,默认关闭;若需要打开这个功能, 关键结构体介绍: - -``` + +```c typedef struct { UINT32 totalUsedSize; // 内存池的内存使用量 UINT32 totalFreeSize; // 内存池的剩余内存大小 @@ -38,7 +38,7 @@ typedef struct { } LOS_MEM_POOL_STATUS; ``` -- 内存水线获取:调用LOS_MemInfoGet接口,第1个参数是内存池首地址,第2个参数是LOS_MEM_POOL_STATUS类型的句柄,其中字段usageWaterLine即水线值。 +- 内存水线获取:调用 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)接口,第1个参数是内存池首地址,第2个参数是LOS_MEM_POOL_STATUS类型的句柄,其中字段usageWaterLine即水线值。 - 内存碎片率计算:同样调用LOS_MemInfoGet接口,可以获取内存池的剩余内存大小和最大空闲内存块大小,然后根据公式(fragment=100-100\*最大空闲内存块大小/剩余内存大小)得出此时的动态内存池碎片率。 @@ -53,13 +53,12 @@ typedef struct { 3. 利用公式算出使用率及碎片率。 - **示例代码** - + 该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试。 代码实现如下: - -``` + +```c #include #include #include "los_task.h" @@ -77,8 +76,7 @@ void MemInfoTaskFunc(void) unsigned char fragment = 100 - poolStatus.maxFreeNodeSize * 100 / poolStatus.totalFreeSize; /* 算出内存池当前的使用率百分比 */ unsigned char usage = LOS_MemTotalUsedGet(pool) * 100 / LOS_MemPoolSizeGet(pool); - printf("usage = %d, fragment = %d, maxFreeSize = %d, totalFreeSize = %d, waterLine = %d\n", usage, fragment, poolStatus.maxFreeNodeSize, - poolStatus.totalFreeSize, poolStatus.usageWaterLine); + printf("usage = %d, fragment = %d, maxFreeSize = %d, totalFreeSize = %d, waterLine = %d\n", usage, fragment, poolStatus.maxFreeNodeSize, poolStatus.totalFreeSize, poolStatus.usageWaterLine); } int MemTest(void) @@ -93,9 +91,9 @@ int MemTest(void) ret = LOS_TaskCreate(&taskID, &taskStatus); if (ret != LOS_OK) { printf("task create failed\n"); - return -1; + return LOS_NOK; } - return 0; + return LOS_OK; } ``` @@ -106,7 +104,7 @@ int MemTest(void) 编译运行输出的结果如下: - + ``` usage = 22, fragment = 3, maxFreeSize = 49056, totalFreeSize = 50132, waterLine = 1414 ``` diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-memory-leak.md b/zh-cn/device-dev/kernel/kernel-small-debug-memory-leak.md index e7c75955c37d6e9c643124d8d0b7c8a712fe3e49..2bf89f37c1344da25d77bab943f1775c14b1ef75 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-memory-leak.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-memory-leak.md @@ -12,7 +12,7 @@ 2. LOS_RECORD_LR_CNT:记录的LR层数,默认3层;每层LR消耗sizeof(void \*)字节数的内存。 -3. LOS_OMIT_LR_CNT:忽略的LR层数,默认2层,即从调用LOS_MemAlloc的函数开始记录,可根据实际情况调整。为啥需要这个配置?有3点原因如下: +3. LOS_OMIT_LR_CNT:忽略的LR层数,默认2层,即从调用LOS_MemAlloc的函数开始记录,可根据实际情况调整。需要此配置原因如下: - LOS_MemAlloc接口内部也有函数调用; - 外部可能对LOS_MemAlloc接口有封装; - LOS_RECORD_LR_CNT 配置的LR层数有限; @@ -27,17 +27,17 @@ 该调测功能可以分析关键的代码逻辑中是否存在内存泄漏。开启这个功能,每次申请内存时,会记录LR信息。在需要检测的代码段前后,调用LOS_MemUsedNodeShow接口,每次都会打印指定内存池已使用的全部节点信息,对比前后两次的节点信息,新增的节点信息就是疑似泄漏的内存节点。通过LR,可以找到具体申请的代码位置,进一步确认是否泄漏。 -调用LOS_MemUsedNodeShow接口输出的节点信息格式如下:每1行为一个节点信息;第1列为节点地址,可以根据这个地址,使用GDB等手段查看节点完整信息;第2列为节点的大小,等于节点头大小+数据域大小;第3~5列为函数调用关系LR地址,可以根据这个值,结合汇编文件,查看该节点具体申请的位置。 +调用LOS_MemUsedNodeShow接口输出的节点信息格式如下:每1行为一个节点信息;第1列为节点地址,可以根据这个地址,使用GDB等工具查看节点完整信息;第2列为节点的大小,等于节点头大小+数据域大小;第3~5列为函数调用关系LR地址,可以根据这个值,结合汇编文件,查看该节点具体申请的位置。 ``` -node size LR[0] LR[1] LR[2] -0x10017320: 0x528 0x9b004eba 0x9b004f60 0x9b005002 -0x10017848: 0xe0 0x9b02c24e 0x9b02c246 0x9b008ef0 -0x10017928: 0x50 0x9b008ed0 0x9b068902 0x9b0687c4 +node size LR[0] LR[1] LR[2] +0x10017320: 0x528 0x9b004eba 0x9b004f60 0x9b005002 +0x10017848: 0xe0 0x9b02c24e 0x9b02c246 0x9b008ef0 +0x10017928: 0x50 0x9b008ed0 0x9b068902 0x9b0687c4 0x10017978: 0x24 0x9b008ed0 0x9b068924 0x9b0687c4 -0x1001799c: 0x30 0x9b02c24e 0x9b02c246 0x9b008ef0 -0x100179cc: 0x5c 0x9b02c24e 0x9b02c246 0x9b008ef0 +0x1001799c: 0x30 0x9b02c24e 0x9b02c246 0x9b008ef0 +0x100179cc: 0x5c 0x9b02c24e 0x9b02c246 0x9b008ef0 ``` > ![icon-caution.gif](public_sys-resources/icon-caution.gif) **注意:** @@ -62,9 +62,10 @@ node size LR[0] LR[1] LR[2] **示例代码** +该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试. 代码实现如下: -``` +```c #include #include #include "los_memory.h" @@ -86,29 +87,29 @@ void MemLeakTest(void) 编译运行输出log如下: ``` -node size LR[0] LR[1] LR[2] -0x20001b04: 0x24 0x08001a10 0x080035ce 0x080028fc -0x20002058: 0x40 0x08002fe8 0x08003626 0x080028fc -0x200022ac: 0x40 0x08000e0c 0x08000e56 0x0800359e -0x20002594: 0x120 0x08000e0c 0x08000e56 0x08000c8a -0x20002aac: 0x56 0x08000e0c 0x08000e56 0x08004220 - -node size LR[0] LR[1] LR[2] -0x20001b04: 0x24 0x08001a10 0x080035ce 0x080028fc -0x20002058: 0x40 0x08002fe8 0x08003626 0x080028fc -0x200022ac: 0x40 0x08000e0c 0x08000e56 0x0800359e -0x20002594: 0x120 0x08000e0c 0x08000e56 0x08000c8a -0x20002aac: 0x56 0x08000e0c 0x08000e56 0x08004220 -0x20003ac4: 0x1d 0x08001458 0x080014e0 0x080041e6 -0x20003ae0: 0x1d 0x080041ee 0x08000cc2 0x00000000 +node size LR[0] LR[1] LR[2] +0x20001b04: 0x24 0x08001a10 0x080035ce 0x080028fc +0x20002058: 0x40 0x08002fe8 0x08003626 0x080028fc +0x200022ac: 0x40 0x08000e0c 0x08000e56 0x0800359e +0x20002594: 0x120 0x08000e0c 0x08000e56 0x08000c8a +0x20002aac: 0x56 0x08000e0c 0x08000e56 0x08004220 + +node size LR[0] LR[1] LR[2] +0x20001b04: 0x24 0x08001a10 0x080035ce 0x080028fc +0x20002058: 0x40 0x08002fe8 0x08003626 0x080028fc +0x200022ac: 0x40 0x08000e0c 0x08000e56 0x0800359e +0x20002594: 0x120 0x08000e0c 0x08000e56 0x08000c8a +0x20002aac: 0x56 0x08000e0c 0x08000e56 0x08004220 +0x20003ac4: 0x1d 0x08001458 0x080014e0 0x080041e6 +0x20003ae0: 0x1d 0x080041ee 0x08000cc2 0x00000000 ``` 对比两次log,差异如下,这些内存节点就是疑似泄漏的内存块: ``` -0x20003ac4: 0x1d 0x08001458 0x080014e0 0x080041e6 -0x20003ae0: 0x1d 0x080041ee 0x08000cc2 0x00000000 +0x20003ac4: 0x1d 0x08001458 0x080014e0 0x080041e6 +0x20003ae0: 0x1d 0x080041ee 0x08000cc2 0x00000000 ``` diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-process-cpu.md b/zh-cn/device-dev/kernel/kernel-small-debug-process-cpu.md index 7e84b5195532059544f948b4dd6661fcf318640f..dc21d9c19cbfbe24347826a853e96cddf8b19f0b 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-process-cpu.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-process-cpu.md @@ -6,16 +6,16 @@ CPU(中央处理器,Central Processing Unit)占用率分为系统CPU占用率、进程CPU占用率、任务CPU占用率和中断CPU占用率。用户通过系统级的CPU占用率,判断当前系统负载是否超出设计规格。通过系统中各个进程/任务/中断的CPU占用情况,判断各个进程/任务/中断的CPU占用率是否符合设计的预期。 - 系统CPU占用率(CPU Percent) - 指周期时间内系统的CPU占用率,用于表示系统一段时间内的闲忙程度,也表示CPU的负载情况。系统CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分比。100表示系统满负荷运转。 + 指周期时间内系统的CPU占用率,用于表示系统一段时间内的闲忙程度,也表示CPU的负载情况。系统CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分之一。100表示系统满负荷运转。 - 进程CPU占用率 - 指单个进程的CPU占用率,用于表示单个进程在一段时间内的闲忙程度。进程CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分比。100表示在一段时间内系统一直在运行该进程。 + 指单个进程的CPU占用率,用于表示单个进程在一段时间内的闲忙程度。进程CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分之一。100表示在一段时间内系统一直在运行该进程。 - 任务CPU占用率 - 指单个任务的CPU占用率,用于表示单个任务在一段时间内的闲忙程度。任务CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分比。100表示在一段时间内系统一直在运行该任务。 + 指单个任务的CPU占用率,用于表示单个任务在一段时间内的闲忙程度。任务CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分之一。100表示在一段时间内系统一直在运行该任务。 - 中断CPU占用率 - 指单个中断的CPU占用率,用于表示单个中断在一段时间内的闲忙程度。中断CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分比。100表示在一段时间内系统一直在运行该中断。 + 指单个中断的CPU占用率,用于表示单个中断在一段时间内的闲忙程度。中断CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分之一。100表示在一段时间内系统一直在运行该中断。 ## 运行机制 @@ -50,13 +50,14 @@ OpenHarmony 提供以下四种CPU占用率的信息查询: **表1** CPUP模块接口 -| 功能分类 | 接口**名称** | 描述 | +| 功能分类 | 接口**名称** | 描述 | | -------- | -------- | -------- | -| 系统CPU占用率 | LOS_HistorySysCpuUsage | 获取系统历史CPU占用率 | -| 进程CPU占用率 | LOS_HistoryProcessCpuUsage | 获取指定进程历史CPU占用率 | -| 进程CPU占用率 | LOS_GetAllProcessCpuUsage | 获取系统所有进程的历史CPU占用率 | -| 任务CPU占用率 | LOS_HistoryTaskCpuUsage | 获取指定任务历史CPU占用率 | -| 中断CPU占用率 | LOS_GetAllIrqCpuUsage | 获取系统所有中断的历史CPU占用率 | +| 系统CPU占用率 | LOS_HistorySysCpuUsage | 获取系统历史CPU占用率 | +| 进程CPU占用率 | LOS_HistoryProcessCpuUsage | 获取指定进程历史CPU占用率 | +| 进程CPU占用率 | LOS_GetAllProcessCpuUsage | 获取系统所有进程的历史CPU占用率 | +| 任务CPU占用率 | LOS_HistoryTaskCpuUsage | 获取指定任务历史CPU占用率 | +| 中断CPU占用率 | LOS_GetAllIrqCpuUsage | 获取系统所有中断的历史CPU占用率 | +| 重置 | LOS_CpupReset | 重置CPU 占用率相关数据 | ### 开发流程 @@ -102,48 +103,49 @@ CPU占用率的典型开发流程: **示例代码** +该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试。 代码实现如下: - -``` + +```c #include "los_task.h" -#include "los_cpup.h" +#include "los_cpup.h" #define MODE 4 -UINT32 g_cpuTestTaskID; -VOID ExampleCpup(VOID) -{ +UINT32 g_cpuTestTaskID; +VOID ExampleCpup(VOID) +{ printf("entry cpup test example\n"); - while(1) { - usleep(100); + while (1) { + usleep(100); // 100: delay for 100ms } } -UINT32 ItCpupTest(VOID) -{ +UINT32 ItCpupTest(VOID) +{ UINT32 ret; UINT32 cpupUse; - TSK_INIT_PARAM_S cpupTestTask = { 0 }; + TSK_INIT_PARAM_S cpupTestTask = {0}; memset(&cpupTestTask, 0, sizeof(TSK_INIT_PARAM_S)); cpupTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)ExampleCpup; - cpupTestTask.pcName = "TestCpupTsk"; - cpupTestTask.uwStackSize = 0x800; - cpupTestTask.usTaskPrio = 5; + cpupTestTask.pcName = "TestCpupTsk"; + cpupTestTask.uwStackSize = 0x800; // 0x800: cpup test task stack size + cpupTestTask.usTaskPrio = 5; // 5: cpup test task priority ret = LOS_TaskCreate(&g_cpuTestTaskID, &cpupTestTask); - if(ret != LOS_OK) { + if (ret != LOS_OK) { printf("cpupTestTask create failed .\n"); return LOS_NOK; } - usleep(100); + usleep(100); // 100: delay for 100ms /* 获取当前系统历史CPU占用率 */ - cpupUse = LOS_HistorySysCpuUsage(CPU_LESS_THAN_1S); + cpupUse = LOS_HistorySysCpuUsage(CPU_LESS_THAN_1S); printf("the history system cpu usage in all time:%u.%u\n", cpupUse / LOS_CPUP_PRECISION_MULT, cpupUse % LOS_CPUP_PRECISION_MULT); - /* 获取指定任务的CPU占用率,该测试例程中指定的任务为以上创建的cpup测试任务 */ - cpupUse = LOS_HistoryTaskCpuUsage(g_cpuTestTaskID, CPU_LESS_THAN_1S); + /* 获取指定任务的CPU占用率,该测试例程中指定的任务为以上创建的cpup测试任务 */ + cpupUse = LOS_HistoryTaskCpuUsage(g_cpuTestTaskID, CPU_LESS_THAN_1S); printf("cpu usage of the cpupTestTask in all time:\n TaskID: %d\n usage: %u.%u\n", - g_cpuTestTaskID, cpupUse / LOS_CPUP_PRECISION_MULT, cpupUse % LOS_CPUP_PRECISION_MULT); - return LOS_OK; + g_cpuTestTaskID, cpupUse / LOS_CPUP_PRECISION_MULT, cpupUse % LOS_CPUP_PRECISION_MULT); + return LOS_OK; } ``` @@ -151,7 +153,7 @@ UINT32 ItCpupTest(VOID) 编译运行得到的结果为: - + ``` entry cpup test example the history system cpu usage in all time: 3.0 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-cpup.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-cpup.md index f5f8df2f9c69e0c500b665bf5cadf7a5a2681895..2d37c9d61de5941f2c72e61ab858ea4e1846d7ce 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-cpup.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-cpup.md @@ -13,12 +13,12 @@ cpup [_mode_] [_taskID_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | -| mode | - 缺省:显示系统最近10s内的CPU占用率。
- 0:显示系统最近10s内的CPU占用率。
- 1:显示系统最近1s内的CPU占用率。
- 其他数字:显示系统启动至今总的CPU 占用率。 | [0,0xFFFFFFFF] | -| taskID | 任务ID号 | [0,0xFFFFFFFF] | +| mode | - 缺省:显示系统最近10s内的CPU占用率。
- 0:显示系统最近10s内的CPU占用率。
- 1:显示系统最近1s内的CPU占用率。
- 其他数字:显示系统启动至今总的CPU 占用率。 | [0, 0xFFFFFFFF] | +| taskID | 任务ID号 | [0, 0xFFFFFFFF] | ## 使用指南 @@ -37,8 +37,8 @@ cpup [_mode_] [_taskID_] ## 输出说明 - **示例**:指令输出结果 - +**示例** 指令输出结果 + ``` OHOS # cpup 1 5pid 5 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-date.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-date.md index 164bbb70804ba1fb045824fab116f9e3f6c763d0..fd0ebe27bd33d13b0d50a4d652806695b123567e 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-date.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-date.md @@ -19,13 +19,13 @@ date命令用于查询系统日期和时间。 ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 使用帮助。 | N/A | -| +Format | 根据Format格式打印日期和时间。 | --help中列出的占位符。 | -| -u | 显示UTC,而不是当前时区 | N/A | +| 参数 | 参数说明 | 取值范围 | +| ------- | ------------------------------ | ---------------------- | +| --help | 使用帮助。 | N/A | +| +Format | 根据Format格式打印日期和时间。 | --help中列出的占位符。 | +| -u | 显示UTC,而不是当前时区 | N/A | ## 使用指南 @@ -36,6 +36,9 @@ date命令用于查询系统日期和时间。 - 目前命令不支持设置时间和日期。 +## 特殊说明 + +date -u参数 shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -46,8 +49,8 @@ date命令用于查询系统日期和时间。 示例:按指定格式打印系统日期 - + ``` OHOS:/$ date +%Y--%m--%d 1970--01--01 -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-dmesg.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-dmesg.md index 5c1bc4e332ecd4df168a47b267df834236156738..b30fcfd00e5bb13ee9942a1b0c6e5834d3e3e09e 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-dmesg.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-dmesg.md @@ -3,7 +3,7 @@ ## 命令功能 -dmesg命令用于显示系统启动过程和运行过程中的信息。 +dmesg命令用于显示开机信息,以及系统启动过程和运行过程中的信息。 ## 命令格式 @@ -21,22 +21,22 @@ dmesg > [_fileA_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -c | 打印缓存区内容并清空缓存区。 | N/A | -| -C | 清空缓存区。 | N/A | -| -D/-E | 关闭/开启控制台打印。 | N/A | -| -L/-U | 关闭/开启串口打印。 | N/A | -| -s size | 设置缓存区大小 size是要设置的大小。 | N/A | -| -l level | 设置缓存等级。 | 0 - 5 | -| > fileA | 将缓存区内容重定向写入文件。 | N/A | +| 参数 | 参数说明 | 取值范围 | +| --------------- | ---------------------------------------- | --------------- | +| -c | 打印缓存区内容并清空缓存区。 | N/A | +| -C | 清空缓存区。 | N/A | +| -D/-E | 关闭/开启控制台打印。 | N/A | +| -L/-U | 关闭/开启串口打印。 | N/A | +| -s size | 设置缓存区大小 size是要设置的大小。 | N/A | +| -l level | 设置缓存等级。 | [0, 5] | +| > fileA | 将缓存区内容重定向写入文件。 | N/A | ## 使用指南 -- 该命令依赖于LOSCFG_SHELL_DMESG,使用时通过menuconfig在配置项中开启"Enable Shell dmesg": +- 该命令依赖于LOSCFG_SHELL_DMESG,在kernel/liteos_a中输入make menuconfig命令。此时会弹出配置项,找到Debug选项并进入,然后在配置项中开启"Enable Shell dmesg": Debug ---> Enable a Debug Version ---> Enable Shell ---> Enable Shell dmesg - dmesg参数缺省时,默认打印缓存区内容。 @@ -53,9 +53,9 @@ dmesg > [_fileA_] ## 输出说明 - **示例**:dmesg重定向到文件 - +**示例** dmesg重定向到文件 + ``` OHOS # dmesg > dmesg.log Dmesg write log to dmesg.log success -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-exec.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-exec.md index 0777cb4fd2de7c68e72594b70d8fa0f8d0af03eb..abd8f19eb5095b564f7b8a4c372fc736a4819bba 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-exec.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-exec.md @@ -3,7 +3,7 @@ ## 命令功能 -exec命令属于shell内置命令,目前实现最基础的执行用户态程序的功能。 +exec命令属于shell内置命令,在exec执行命令时,不启用新的shell进程。目前实现最基础的执行用户态程序的功能 ## 命令格式 @@ -13,11 +13,11 @@ exec <_executable-file_> ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| executable-file | 有效的可执行文件。 | N/A | +| 参数 | 参数说明 | +| --------------- | ------------------ | +| executable-file | 有效的可执行文件。 | ## 使用指南 @@ -34,11 +34,11 @@ exec <_executable-file_> ## 输出说明 - + ``` OHOS # exec helloworld OHOS # hello world! ``` > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 可执行文件执行后,先打印“OHOS \#”提示符原因:目前Shell “exec”命令执行均为后台执行,结果可能导致提示符提前打印。 +> 可执行文件执行后,先打印“OHOS \#”提示符原因:目前Shell “exec”命令执行均为后台执行,结果可能导致提示符提前打印。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-free.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-free.md index d66ac6c1d2ebfbd69210d17278f0e74c5e5054bc..585a924fe969a83c28c6c0d50d58fc849e6feab6 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-free.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-free.md @@ -13,17 +13,17 @@ free [_-b | -k | -m | -g | -t_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| 无参数 | 以Byte为单位显示。 | N/A | -| --help/-h | 查看free命令支持的参数列表。 | N/A | -| -b | 以Byte为单位显示。 | N/A | -| -k | 以KiB为单位显示。 | N/A | -| -m | 以MiB为单位显示。 | N/A | -| -g | 以GiB为单位显示。 | N/A | -| -t | 以TiB为单位显示。 | N/A | +| 参数 | 参数说明 | +| -------- | -------- | +| 无参数 | 以Byte为单位显示。 | +| --help/-h | 查看free命令支持的参数列表。 | +| -b | 以Byte为单位显示。 | +| -k | 以KiB为单位显示。 | +| -m | 以MiB为单位显示。 | +| -g | 以GiB为单位显示。 | +| -t | 以TiB为单位显示。 | ## 使用指南 @@ -57,7 +57,7 @@ Mem: 2 2 0 0 0 Swap: 0 0 0 ``` - **表2** 输出说明 +**表2** 输出说明 | 输出 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-help.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-help.md index 47847e242506a858499ebd7cef7c8f285740f3f9..cbe033416b025ee0b0fd880d9802cbe79a658996 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-help.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-help.md @@ -13,7 +13,7 @@ help ## 参数说明 -无。 +无 ## 使用指南 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-hwi.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-hwi.md index f184a21da0189920c0ae1aaff5639d548334cd9c..52ea5c5e7c2e0760bc1480cb5032310e5f5dce20 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-hwi.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-hwi.md @@ -13,7 +13,7 @@ hwi ## 参数说明 -无。 +无 ## 使用指南 @@ -106,7 +106,7 @@ hwi 102: 0 0 0.0 0.0 0.0 normal SPI_HI35XX ``` - **表1** 输出说明 +**表1** 输出说明 | 输出 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-kill.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-kill.md index c29953e112a2961fb15490b7033d689afb00f159..b35ec5e5361f628593d07f33243fbb6b917ec538 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-kill.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-kill.md @@ -3,7 +3,7 @@ ## 命令功能 -命令用于发送特定信号给指定进程。 +kill命令用于发送特定信号给指定进程,让它去终结不正常的应用。 ## 命令格式 @@ -13,31 +13,34 @@ kill [-l [_signo_] | _-s signo_ | _-signo_] _pid..._ ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 查看kill命令支持的参数列表 | N/A | -| -l | 列出信号名称和编号。 | N/A | -| -s | 发送信号 | N/A | -| signo | 信号ID。 | [1,30] | -| pid | 进程ID。 | [1,MAX_INT] | +| 参数 | 参数说明 | 取值范围 | +| ------ | -------------------------- | ----------- | +| --help | 查看kill命令支持的参数列表 | N/A | +| -l | 列出信号名称和编号。 | N/A | +| -s | 发送信号 | N/A | +| signo | 信号ID。 | [1, 30] | +| pid | 进程ID。 | [1, MAX_INT] | > ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:** -> signo有效范围为[0,64],建议取值范围为[1,30],其余为保留内容。 +> signo有效范围为[0, 64],建议取值范围为[1, 30],其余为保留内容。 ## 使用指南 - 必须指定发送的信号编号及进程号。 -- 进程编号取值范围根据系统配置变化,例如系统最大支持pid为256,则取值范围缩小为[1-256]。 +- 进程编号取值范围根据系统配置变化,例如系统最大支持pid为256,则取值范围缩小为[1, 256]。 +## 特殊说明 + +kill命令以及参数 shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 - 查看当前进程列表,查看需要杀死的进程PID(42)。 - + ``` OHOS:/$ ps allCpu(%): 4.67 sys, 195.33 idle @@ -60,7 +63,7 @@ kill [-l [_signo_] | _-s signo_ | _-signo_] _pid..._ ``` - 发送信号9(SIGKILL默认行为为立即终止进程)给42号进程test_demo(用户态进程):kill -s 9 42(kill -9 42效果相同),并查看当前进程列表,42号进程已终止。 - + ``` OHOS:/$ kill -s 9 42 OHOS:/$ @@ -91,9 +94,9 @@ kill [-l [_signo_] | _-s signo_ | _-signo_] _pid..._ 发送成功或失败输出结果如下。 -**示例 1** 发送信号给指定进程 +**示例1** 发送信号给指定进程 + - ``` OHOS:/$ kill -s 9 42 OHOS:/$ @@ -102,12 +105,12 @@ OHOS:/$ 信号发送成功会显示的提示进程已被杀死。 -**示例 2** 信号发送失败 +**示例2** 信号发送失败 + - ``` OHOS:/$ kill -100 31 kill: Unknown signal '(null)' ``` -信号发送失败,示例2所示原因为信号发送命令参数无效,请排查信号编号及进程编号是否有效。 +信号发送失败,示例2所示原因为信号发送命令参数无效,请排查信号编号及进程编号是否有效。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-log.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-log.md index 35b30bd90fece1cfa45b25efce7fbdb524a56778..5747814bb8ded3f2fad4e61017b0c481633d76bb 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-log.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-log.md @@ -13,11 +13,11 @@ log level [_levelNum_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | -| levelNum | 配置日志打印等级。 | [0,5] | +| levelNum | 配置日志打印等级。 | [0, 5] | ## 使用指南 @@ -52,9 +52,9 @@ log level [_levelNum_] ## 输出说明 -**示例**:设置当前日志打印级别为3 +**示例** 设置当前日志打印级别为3 + - ``` OHOS # log level 3 Set current log level WARN diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-memcheck.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-memcheck.md index 6edb6f2c18540ac1c42e2b15c44bdedd4ea72ef4..a8f9681b442e3c60c411d6a1b73a20b0f718afff 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-memcheck.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-memcheck.md @@ -13,7 +13,7 @@ memcheck ## 参数说明 -无。 +无 ## 使用指南 @@ -34,15 +34,15 @@ memcheck ## 输出说明 - **示例1**:当前没有内存越界 - +**示例1** 当前没有内存越界 + ``` OHOS # memcheck system memcheck over, all passed! ``` - **示例2**:出现内存越界 - +**示例2** 出现内存越界 + ``` [L0S DLnkCheckMenl 349, memory check stFreeNodeInfo.pstPrev:0x7e0d31f3 is out of legal mem range[0x80ba5f40, 0х83d00000] diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-oom.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-oom.md index c7c4a19f652e2f66a40844cd78271d8763c71618..c54a17367a3736cfb008d549a418ac9803279ea4 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-oom.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-oom.md @@ -21,19 +21,20 @@ oom -h | --help ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -i [interval] | 设置oom线程任务检查的时间间隔。 | 100ms ~ 10000ms | -| -m [mem byte] | 设置低内存阈值。 | 0MB ~ 1MB,0MB表示不做低内存阈值检查。 | -| -r [mem byte] | 设置pagecache内存回收阈值。 | 低内存阈值 ~ 系统可用最大内存。 | -| -h \| --help | 使用帮助。 | N/A | +| 参数 | 参数说明 | 取值范围 | +| ----------------------- | ------------------------------- | ------------------------------------------------------------ | +| -i [interval] | 设置oom线程任务检查的时间间隔。 | [100, 10000] 单位: ms | +| -m [mem byte] | 设置低内存阈值。 | 0MB ~ 1MB,0MB表示不做低内存阈值检查。 | +| -r [mem byte] | 设置pagecache内存回收阈值。 | 低内存阈值 ~ 系统可用最大内存,一个pagecache页一般为4KB,也有16 ~ 64KB的情况。 | +| -h \| --help | 使用帮助。 | N/A | ## 使用指南 参数缺省时,显示oom功能当前配置信息。 + > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > 当系统内存不足时,会打印出内存不足的提示信息。 @@ -49,9 +50,9 @@ oom -h | --help ## 输出说明 -**示例1:**oom缺省打印配置信息 +**示例1** oom缺省打印配置信息 + - ``` OHOS:/$ oom [oom] oom loop task status: enabled @@ -62,7 +63,7 @@ OHOS:/$ oom 系统内存不足时打印提示信息 - + ``` T:20 Enter:IT MEM 00M 001 [oom] OS is in low memory state @@ -109,22 +110,22 @@ traceback 5 -- 1r = 0x20c4df50 fp = 0хb0b0b0b 1r in /1ib/libc.so - -> 0x62f50 ``` -**示例2**:设置 oom 线程任务检查的时间间隔 +**示例2** 设置 oom 线程任务检查的时间间隔 + - ``` OHOS:/$ oom -i 100 [oom] set oom check interval (100)ms successful ``` - **表2** 输出说明 +**表2** 输出说明 -| 输出 | 说明 | -| -------- | -------- | -| [oom] OS is in low memory state
total physical memory: 0x1bcf000(byte), used: 0x1b50000(byte), free: 0x7f000(byte), low memory threshold: 0x80000(byte) | 操作系统处于低内存状态。
整个系统可用物理内存为0x1bcf000 byte,已经使用了 0x1b50000 byte, 还剩0x7f000 byte,当前设置的低内存阈值为0x80000 byte。 | -| [oom] candidate victim process init pid: 1, actual phy mem byte: 82602 | 打印当前各个进程的内存使用情况,init进程实际占用物理内存82602byte。 | -| [oom] candidate victim process UserProcess12 pid: 12, actual phy mem byte: 25951558 | UserProcess12进程实际使用25951558byte内存。 | -| [oom] max phy mem used process UserProcess12 pid: 12, actual phy mem: 25951558 | 当前使用内存最多的进程是UserProcess12。 | -| excFrom: User! | 当系统处于低内存的情况下,UserProcess12进程再去申请内存时失败退出。 | +| 输出 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| [oom] OS is in low memory state
total physical memory: 0x1bcf000(byte), used: 0x1b50000(byte), free: 0x7f000(byte), low memory threshold: 0x80000(byte) | 操作系统处于低内存状态。
整个系统可用物理内存为0x1bcf000 byte,已经使用了 0x1b50000 byte, 还剩0x7f000 byte,当前设置的低内存阈值为0x80000 byte。 | +| [oom] candidate victim process init pid: 1, actual phy mem byte: 82602 | 打印当前各个进程的内存使用情况,init进程实际占用物理内存82602byte。 | +| [oom] candidate victim process UserProcess12 pid: 12, actual phy mem byte: 25951558 | UserProcess12进程实际使用25951558byte内存。 | +| [oom] max phy mem used process UserProcess12 pid: 12, actual phy mem: 25951558 | 当前使用内存最多的进程是UserProcess12。 | +| excFrom: User! | 当系统处于低内存的情况下,UserProcess12进程再去申请内存时失败退出。 | \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-pmm.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-pmm.md index 639152773cef118341b0199db113eba959b46967..0e6203b3b75cf98ef0edce1eec473b362039509e 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-pmm.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-pmm.md @@ -28,8 +28,8 @@ Debug版本才具备的命令。 ## 输出说明 - **示例:**查看物理页使用情况 - +**示例** 查看物理页使用情况 + ``` OHOS # pmm phys_seg base size free_pages @@ -55,7 +55,7 @@ Vnode number = 67 Vnode memory size = 10720(B) ``` - **表1** 输出说明 +**表1** 输出说明 | 输出 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reboot.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reboot.md index b81be050fa28a9ff6745707050fe3dda78cd268c..6ef9d0487a07a7d279d6aaa57228853d43a43948 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reboot.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reboot.md @@ -13,7 +13,7 @@ reboot ## 参数说明 -无。 +无 ## 使用指南 @@ -28,4 +28,4 @@ reboot ## 输出说明 -无。 +无 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reset.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reset.md index bac39a77df20e2169506d9b62b87977b6e5f9675..3db9ef7170c686f99104c30aa1a745a6053234c7 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reset.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-reset.md @@ -13,7 +13,7 @@ reset ## 参数说明 -无。 +无 ## 使用指南 @@ -28,4 +28,4 @@ reset ## 输出说明 -无。 +无 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sem.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sem.md index bdcf23dbcf131ab20306089829c72c997cea2d45..c5a88de39cf7b09764b4594805d79444fc5c2ffe 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sem.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sem.md @@ -13,7 +13,7 @@ sem [_ID__ / fulldata_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -40,8 +40,8 @@ sem [_ID__ / fulldata_] ## 输出说明 - **示例1**:查询所有在用的信号量信息 - +**示例1** 查询所有在用的信号量信息 + ``` OHOS # sem SemID Count @@ -67,7 +67,7 @@ OHOS # sem 0x00000006 0 ``` - **表2** 输出说明 +**表2** 输出说明 | 输出 | 说明 | | -------- | -------- | @@ -79,8 +79,8 @@ OHOS # sem > > ● sem命令的ID参数在[0, 1023]范围内时,返回对应ID的信号量的状态(如果对应ID的信号量未被使用则进行提示);其他取值时返回参数错误的提示。 - **示例2:**查询所有在用的信号量信息 - +**示例2** 查询所有在用的信号量信息 + ``` OHOS # sem fulldata Used Semaphore List: @@ -113,7 +113,7 @@ Used Semaphore List: 0x38 0x1 0x1 0x404978fc 0x395 ``` - **表3** 输出说明 +**表3** 输出说明 | 输出 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-stack.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-stack.md index c8a872c90c992abb05771fcc702425c4e92c1a78..57500e7436546a7cf2f6e776781eab433c0039b2 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-stack.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-stack.md @@ -13,12 +13,12 @@ stack ## 参数说明 -无。 +无 ## 使用指南 -无。 +无 ## 使用实例 @@ -28,8 +28,8 @@ stack ## 输出说明 - **示例:**系统堆栈使用情况 - +**示例** 系统堆栈使用情况 + ``` OHOS # stack stack name cpu id stack addr total size used size @@ -40,7 +40,7 @@ OHOS # stack exc_stack 0 0x405c9000 0x1000 0x0 ``` - **表1** 输出说明 +**表1** 输出说明 | 输出 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-su.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-su.md index 6465bb4c8826ddb0e55de2b2740e5f5e6fefe795..af014d300dce083df3603cd7098be2e3d9e31713 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-su.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-su.md @@ -13,12 +13,12 @@ su [_uid_] [_gid_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | -| uid | 目标用户的用户id值。 | - 为空。
- [0,60000] | -| gid | 目标用户的群组id值。 | - 为空。
- [0,60000] | +| uid | 目标用户的用户id值。 | - 为空。
- [0, 60000] | +| gid | 目标用户的群组id值。 | - 为空。
- [0, 60000] | ## 使用指南 @@ -37,8 +37,8 @@ su [_uid_] [_gid_] ## 输出说明 - **示例:**切换到为uid为1000,gid为1000的用户 - +**示例** 切换到为uid为1000,gid为1000的用户 + ``` OHOS # ls Directory /data/system/param: diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-swtmr.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-swtmr.md index 73d7c12d49fc311131f6792497b63fdea4167752..63b7ea7fdb334d11563272a5f774c948c6003dcb 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-swtmr.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-swtmr.md @@ -13,11 +13,11 @@ swtmr [_ID_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | -| ID | 软件定时器ID号。 | [0,0xFFFFFFFF] | +| ID | 软件定时器ID号。 | [0, 0xFFFFFFFF] | ## 使用指南 @@ -38,8 +38,8 @@ swtmr [_ID_] ## 输出说明 - **示例1:**查询所有软件定时器相关信息 - +**示例1** 查询所有软件定时器相关信息 + ``` OHOS # swtmr SwTmrID State Mode Interval Count Arg handlerAddr @@ -59,8 +59,8 @@ SwTmrID State Mode Interval Count Arg handlerAddr 0x00000079 Ticking NSD 30000 1749 0x406189d8 0x40160e1c ``` - **示例2:**查询对应 ID 的软件定时器信息 - +**示例2** 查询对应 ID 的软件定时器信息 + ``` OHOS # swtmr 1 SwTmrID State Mode Interval Count Arg handlerAddr diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sysinfo.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sysinfo.md index b272a957851ccdabe3e17305c2c7fabe18a626d9..a9dcc0e5df8780865f5b5877e1ac889f64815340 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sysinfo.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-sysinfo.md @@ -13,12 +13,12 @@ systeminfo ## 参数说明 -无。 +无 ## 使用指南 -无。 +无 ## 使用实例 @@ -28,8 +28,8 @@ systeminfo ## 输出说明 - **示例:**查看系统资源使用情况 - +**示例** 查看系统资源使用情况 + ``` OHOS:/$ systeminfo Module Used Total Enabled @@ -40,16 +40,15 @@ OHOS:/$ systeminfo SwTmr 20 1024 YES ``` - **表1** 输出说明 - -| 输出 | 说明 | -| -------- | -------- | -| Module | 模块名称。 | -| Used | 当前使用量。 | -| Total | 最大可用量。 | -| Enabled | 模块是否开启。 | -| Task | 任务。 | -| Sem | 信号量。 | -| Mutex | 互斥量。 | -| Queue | 队列。 | -| SwTmr | 定时器。 | +**表1** 输出说明 + +| 输出 | 说明 | +| ------- | -------------- | +| Module | 模块名称。 | +| Used | 当前使用量。 | +| Total | 最大可用量。 | +| Enabled | 模块是否开启。 | +| Task | 任务。 | +| Sem | 信号量。 | +| Queue | 队列。 | +| SwTmr | 定时器。 | \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-task.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-task.md index 2babe2adc87c2249f0e935ec83f5b01394e2e7c3..42f6a75f81c5594394c98b0eabc22bee215489a6 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-task.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-task.md @@ -13,7 +13,7 @@ task/task -a ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -32,9 +32,8 @@ task/task -a ## 输出说明 -**示例:**查询任务部分信息 +**示例** 查询任务部分信息 - ``` OHOS # task allCpu(%): 3.54 sys, 196.46 idle @@ -61,7 +60,7 @@ OHOS # task 7 2 0x3 -1 Pending 0x4e20 0xa5c 0.0 0 PlatformWorkerThread ``` - **表2** 输出说明 +**表2** 输出说明 | 输出 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-top.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-top.md index 41d77ab903df37265daf6e82421d6fd390ee589f..5decca4e6385de69ca3c669b3018f44bbb7f4d90 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-top.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-top.md @@ -13,18 +13,21 @@ top [_-a_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 缺省值 | 取值范围 | -| -------- | -------- | -------- | -------- | -| --help | 查看top命令支持的参数列表。 | N/A | | -| -a | 显示更详细的信息。 | N/A | | +| 参数 | 参数说明 | +| ------ | --------------------------- | +| --help | 查看top命令支持的参数列表。 | +| -a | 显示更详细的信息。 | ## 使用指南 参数缺省时默认打印部分任务信息。 +## 特殊说明 + +shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -33,8 +36,8 @@ top [_-a_] ## 输出说明 - **示例1** top 命令显示详情 - +**示例1** top 命令显示详情 + ``` OHOS:/$ top allCpu(%): 4.68 sys, 195.32 idle @@ -78,19 +81,19 @@ OHOS:/$ top 64 2 0x3 -1 Pending 0x4000 0x244 0.0 0 USB_NGIAN_BULK_TasK ``` - **表2** 输出元素说明 - -| 输出 | 说明 | -| -------- | -------- | -| PID | 进程ID。 | -| PPID | 父进程ID。 | -| PGID | 进程组ID。 | -| UID | 用户ID。 | -| Status | 任务当前的状态。 | -| CPUUSE10s | 10秒内CPU使用率。 | -| PName | 进程名。 | -| TID | 任务ID。 | -| StackSize | 任务堆栈的大小。 | -| WaterLine | 栈使用的峰值。 | -| MEMUSE | 内存使用量。 | -| TaskName | 任务名。 | +**表2** 输出元素说明 + +| 输出 | 说明 | +| --------- | ----------------- | +| PID | 进程ID。 | +| PPID | 父进程ID。 | +| PGID | 进程组ID。 | +| UID | 用户ID。 | +| Status | 任务当前的状态。 | +| CPUUSE10s | 10秒内CPU使用率。 | +| PName | 进程名。 | +| TID | 任务ID。 | +| StackSize | 任务堆栈的大小。 | +| WaterLine | 栈使用的峰值。 | +| MEMUSE | 内存使用量。 | +| TaskName | 任务名。 | \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-uname.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-uname.md index 751e98cd71e0dc448080120cd85aeacba4c595fb..c5f9fb60c550df1de6d060e53aca09c1a640d7bc 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-uname.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-uname.md @@ -11,18 +11,18 @@ uname命令用于显示当前操作系统的名称,版本创建时间,系统 uname [_-a | -s | -r | -m | -n | -v | --help_] - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | -| -------- | -------- | -| --help | 显示uname指令格式提示。 | -| 无参数 | 默认显示操作系统名称。 | -| -a | 显示全部信息。 | -| -s | 显示操作系统名称。 | -| -r | 显示内核发行版本。 | -| -m | 显示系统架构名称。 | -| -n | 显示主机的网络域名称。 | -| -v | 显示版本信息。 | +| 参数 | 参数说明 | +| ------ | ----------------------- | +| --help | 显示uname指令格式提示。 | +| 无参数 | 默认显示操作系统名称。 | +| -a | 显示全部信息。 | +| -s | 显示操作系统名称。 | +| -r | 显示内核发行版本。 | +| -m | 显示系统架构名称。 | +| -n | 显示主机的网络域名称。 | +| -v | 显示版本信息。 | ## 使用指南 @@ -31,6 +31,9 @@ uname [_-a | -s | -r | -m | -n | -v | --help_] - 除参数--help和-a以外,其他参数可以相互搭配使用;uname -a 等价于 uname -srmnv。 +## 特殊说明 + +-r -m -n参数暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -43,20 +46,18 @@ uname [_-a | -s | -r | -m | -n | -v | --help_] ## 输出说明 -**示例1:** 查看系统信息 +**示例1** 查看系统信息 - ``` OHOS:/$ uname -a LiteOS hisilicon 2.0.0.37 LiteOS 2.0.0.37 Oct 21 2021 17:39:32 Cortex-A7 OHOS:/$ ``` -**示例2:** 只查看操作系统名称和系统架构名称 +**示例2** 只查看操作系统名称和系统架构名称 - ``` OHOS:/$ uname -ms LiteOS Cortex-A7 OHOS:/$ -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-vmm.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-vmm.md index ec2d40a5dac31cd51dcbad680eb1f1d10e934de8..efdd94ffb058251a000ab1e7256da5cf494484a5 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-vmm.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-vmm.md @@ -15,13 +15,13 @@ ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | | -a | 输出所有进程的虚拟内存使用情况。 | N/A | | -h \| --help | 命令格式说明。 | N/A | -| pid | 进程ID,说明指定进程的虚拟内存使用情况。 | [0,63] | +| pid | 进程ID,说明指定进程的虚拟内存使用情况。 | [0, 63] | ## 使用指南 @@ -36,8 +36,8 @@ ## 输出说明 - **示例:**PID为3的进程虚拟内存使用信息 - +**示例** PID为3的进程虚拟内存使用信息 + ``` OHOS # vmm 3 PID aspace name base size pages @@ -62,7 +62,7 @@ OHOS # vmm 3 0x408c3ce0 /lib/libc++.so 0x23cb0000 0x00001000 CH US RD WR 1 1 ``` - **表2** 进程基本信息 +**表2** 进程基本信息 | 输出 | 说明 | | -------- | -------- | @@ -73,7 +73,7 @@ OHOS # vmm 3 | size | 虚拟内存大小 | | pages | 已使用的物理页数量 | - **表3** 虚拟内存区间信息 +**表3** 虚拟内存区间信息 | 输出 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-watch.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-watch.md index c80ea6b3bda3332915997a8426762fc3c0c7d313..9bb03350521552877a0f2742cd605dea4448e12c 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-watch.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-cmd-watch.md @@ -38,8 +38,8 @@ watch -n 2 -c 6 task ## 输出说明 - **示例**:每隔2秒运行一次task命令,一共运行6次 - +**示例** 每隔2秒运行一次task命令,一共运行6次 + ``` OHOS # watch -n 2 -c 6 task Thu Jan 1 23:57:13 1970 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cat.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cat.md index 1d3dbee27da897e5cce4e27c69cf0a1d177a8563..e756d0cf96809066f6915b9d6bc39638e6a3fa02 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cat.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cat.md @@ -13,7 +13,7 @@ cat [_pathname_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -32,8 +32,8 @@ cat用于显示文本文件的内容。 ## 输出说明 - **示例**:查看 hello-openharmony.txt 文件的信息 - +**示例** 查看 hello-openharmony.txt 文件的信息 + ``` OHOS # cat hello-openharmony.txt OHOS # Hello openharmony ;) diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cd.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cd.md index 6e46ea2069167e6d56ebc60ef5d083772b4c81a0..ad47d7bedb4e9afd20ef7c8ac4a355111ab5a40d 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cd.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cd.md @@ -13,7 +13,7 @@ cd [_path_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -42,9 +42,8 @@ cd [_path_] ## 输出说明 -**示例**:显示结果如下 +**示例**显示结果如下 - ``` OHOS:/nfs$ cd ../ OHOS:/$ ls diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chgrp.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chgrp.md index ba5c5f55f149d8fd85a600a3179b9bd9c177c118..18b805ac99dbdc085852b1278358d2a543b2a682 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chgrp.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chgrp.md @@ -13,20 +13,22 @@ chgrp [_group_] [_pathname_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| group | 文件群组。 | [0,0xFFFFFFFF] | -| pathname | 文件路径。 | 已存在的文件。 | +| 参数 | 参数说明 | 取值范围 | +| -------- | ---------- | -------------- | +| group | 文件群组。 | [0, 0xFFFFFFFF] | +| pathname | 文件路径。 | 已存在的文件。 | ## 使用指南 - 在需要修改的文件名前加上文件群组值就可以修改该文件的所属组。 - - fatfs文件系统不支持修改用户组id。 +## 特殊说明 + +shell端暂不支持。 ## 使用实例 @@ -35,8 +37,8 @@ chgrp [_group_] [_pathname_] ## 输出说明 - **示例:**修改 dev/目录下testfile 文件的群组为100 - +**示例** 修改 dev/目录下testfile 文件的群组为100 + ``` OHOS:/dev$ ll testfile -rw-r--r-- 0 0 0 0 1970-01-01 00:00 testfile @@ -44,4 +46,4 @@ OHOS:/dev$ chgrp 100 testfile OHOS:/dev$ ll testfile -rw-r--r-- 0 0 100 0 1970-01-01 00:00 testfile OHOS:/dev$ -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chmod.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chmod.md index f20dadc5251d4ce611a07af7fce7553d6f45c1fc..3c72ac2854e0bc8e3a5493ea9f0726383f55a5a6 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chmod.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chmod.md @@ -13,12 +13,12 @@ chmod [_mode_] [_filename_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| mode | 文件或文件夹权限,用8进制表示对应User、Group、及Others(拥有者、群组、其他组)的权限。 | [0,777] | -| filename | 文件路径。 | 已存在的文件。 | +| 参数 | 参数说明 | 取值范围 | +| -------- | ------------------------------------------------------------ | -------------- | +| mode | 文件或文件夹权限,用8进制表示对应User、Group、及Others(拥有者、群组、其他组)的权限。 | [0, 777] | +| filename | 文件路径。 | 已存在的文件。 | ## 使用指南 @@ -27,6 +27,9 @@ chmod [_mode_] [_filename_] - fatfs文件系统所有创建的文件和挂载节点的权限属性保持一致,目前节点的权限只有用户读写权限,group和others权限不生效;且只允许修改用户读写权限,读写权限只有rw和ro两种。其他文件系统无限制。 +## 特殊说明 + +shell端暂不支持。 ## 使用实例 @@ -35,9 +38,8 @@ chmod [_mode_] [_filename_] ## 输出说明 -**示例:**修改/dev目录下 hello-openharmony.txt 文件的权限 +**示例** 修改/dev目录下 hello-openharmony.txt 文件的权限 - ``` OHOS:/dev$ chmod 644 hello-openharmony.txt OHOS:/dev$ ll hello-openharmony.txt @@ -45,4 +47,4 @@ OHOS:/dev$ ll hello-openharmony.txt OHOS:/dev$ chmod 777 hello-openharmony.txt OHOS:/dev$ ll hello-openharmony.txt -rwxrwxrwx 0 0 0 0 1970-01-01 00:00 hello-openharmony.txt -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chown.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chown.md index 78c19d79a09dda19c07945a8d19a4ae25b3db2c3..fd3fbe56936e9e991c00289575474bf16784a147 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chown.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-chown.md @@ -13,18 +13,21 @@ chown [_owner_] [_pathname_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| owner | 文件拥有者。 | [0,0xFFFFFFFF] | -| pathname | 文件路径。 | 已存在的文件。 | +| 参数 | 参数说明 | 取值范围 | +| -------- | ------------ | -------------- | +| owner | 文件拥有者。 | [0, 0xFFFFFFFF] | +| pathname | 文件路径。 | 已存在的文件。 | ## 使用指南 修改文件的所有者,目前fatfs不支持修改。 +## 特殊说明 + +shell端暂不支持。 ## 使用实例 @@ -33,9 +36,8 @@ chown [_owner_] [_pathname_] ## 输出说明 -示例 1 修改 /dev下的testfile 文件的uid为100 +**示例1** 修改 /dev下的testfile 文件的uid为100 - ``` OHOS:/dev$ touch testfile OHOS:/dev$ ll testfile @@ -43,4 +45,4 @@ OHOS:/dev$ ll testfile OHOS:/dev$ chown 100 testfile OHOS:/dev$ ll testfile -rw-r--r-- 0 100 100 0 1970-01-01 00:00 testfile -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cp.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cp.md index e61e8c673a1d77ed2c35d14e557520f673f4b0ff..9f6cad18bc20abae12fe8b36ecdbc58bdf103c26 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cp.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-cp.md @@ -47,9 +47,8 @@ cp [_SOURCEFILE_] [_DESTFILE_] ## 输出说明 -**示例:**同时拷贝两个文件至指定目录 +**示例** 同时拷贝两个文件至指定目录 - ``` OHOS:/$ ls bin hello-OHOS.txt proc system vendor diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-du.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-du.md index b891546e73f8657e8998c7a1f3927cf48677167a..ad372fb8a79812770cb68beb074f2541b92c70d3 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-du.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-du.md @@ -13,16 +13,16 @@ du [_-kKmh_] [_file..._] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 查看du命令支持的参数列表。 | N/A | -| -k | 显示占用的块,每块1024bytes(默认)。 | N/A | -| -K | 显示占用的块,每块512bytes(posix标准)。 | N/A | -| -m | 兆字节为单位。 | N/A | -| -h | 以K,M,G为单位,提高信息的可读性(例如,1K 243M 2G)。 | N/A | -| file | 指定的需要统计的文件。 | N/A | +| 参数 | 参数说明 | +| ------ | ------------------------------------------------------------ | +| --help | 查看du命令支持的参数列表。 | +| -k | 显示占用的块,每块1024bytes(默认)。 | +| -K | 显示占用的块,每块512bytes(posix标准)。 | +| -m | 兆字节为单位。 | +| -h | 以K,M,G为单位,提高信息的可读性(例如,1K 243M 2G)。 | +| file | 指定的需要统计的文件。 | ## 使用指南 @@ -31,6 +31,9 @@ du [_-kKmh_] [_file..._] - file的内容既为文件名,不能包含其所在的目录。 +## 特殊说明 + +shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -39,10 +42,9 @@ du [_-kKmh_] [_file..._] ## 输出说明 -**示例:**显示结果如下 +**示例** 显示结果如下 - ``` OHOS:/$ du -h testfile 1.8K testfile -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-format.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-format.md index 36b0a095b14c99dc859845b3beb754782bb4a7e8..4e22551ab277c1d3e2f26529ecf6efa0e517774e 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-format.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-format.md @@ -13,7 +13,7 @@ format <_dev_inodename_> <_sectors_> <_option_> [_label_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | | -------- | -------- | @@ -39,9 +39,8 @@ format <_dev_inodename_> <_sectors_> <_option_> [_label_] ## 输出说明 -**示例**:格式化mmc卡 +**示例** 格式化mmc卡 - ``` OHOS # format /dev/mmcblk1 128 2 Format to FAT32, 128 sectors per cluster. diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-ls.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-ls.md index e3dbbbf23be397f5f4cd7e3685516feca1805a19..00740d520e4752f86b4edee6b8cbfc3c25147b78 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-ls.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-ls.md @@ -11,63 +11,71 @@ ls命令用来显示当前目录的内容。 ls [_-ACHLSZacdfhiklmnopqrstux1_] [_--color_[_=auto_]] [_directory..._] > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 系统启动过程中已经通过 alias 为 ls=toybox ls --color=auto 、ll = ls -alF 、 la=ls -A 和 l=ls -CF 赋能,使这几个命令的初始行为就和linux相同(详细效果见输出说明)。所以若要查看help列表,请输入'toybox ls --help'。 +> 系统启动过程中已经通过 alias 为 ls=toybox ls --color=auto 、ll = ls -alF 、 la=ls -A 和 l=ls -CF 赋能,使这几个命令的初始行为就和linux相同(详细效果见输出说明)。所以若要查看help列表,请输入'toybox ls --help'。 ## 参数说明 - **表1** 展示功能参数说明 - -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 查看ls命令支持的参数列表,使用方式。 | N/A | -| -a | 显示所有文件包括.hidden隐藏类型的文件。 | N/A | -| -b | 转义非图形字符。 | N/A | -| -c | 使用ctime作为文件的时间戳,必须和-l参数一块使用。 | N/A | -| -d | 只显示path名称不显示path所包含的内容。 | N/A | -| -i | 显示文件的节点号。 | N/A | -| -p | 在path名称后放一个"/"。 | N/A | -| -q | 显示不可打印字符比如'?'。 | N/A | -| -s | 统计目录和其成员所占用的内存大小,单位为1024字节。 | N/A | -| -u | 以文件的最后访问时间为时间戳,配合 -l 一起使用。 | N/A | -| -A | 列出所有文件除了.和.. | N/A | -| -H | 跟随命令行符号链接。 | N/A | -| -L | 跟随符号链接。 | N/A | -| -Z | 安全上下文。 | N/A | -| path | path为空时,显示当前目录的内容。
path为无效文件名时,显示失败,提示:
ls error: No such directory。
path为有效目录路径时,会显示对应目录下的内容。 | 1.为空。
2.有效的目录路径 | - - **表2** 输出格式参数说明 - -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -1 | 每行列出一个文件。 | N/A | -| -c | 列,垂直排序。 | N/A | -| -g | 类似于 -l 但没有所有者。 | N/A | -| -h | 统计path目录下文件的总大小,单位为KiB。 | N/A | -| -l | 详细的显示path目录下文件的信息。 | N/A | -| -m | 文件之间添加逗号。 | N/A | -| -n | 类似 -l 数字格式显示uid/gid。 | N/A | -| -o | 类似 -l 但显示列表不包括组。 | N/A | -| -x | 列,水平排序。 | N/A | -| -ll | 文件的时间属性显示纳秒。 | N/A | -| --color | 彩色打印。 | 默认配置为:device=yellow symlink=turquoise/red dir=blue socket=purple files: exe=green suid=red suidfile=redback stickydir=greenback=auto means detect if output is a tty. | - - **表3** 排序参数说明(默认为按首字母排序) - -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -f | 不排序。 | N/A | -| -r | 按首字母反向排序。 | N/A | -| -t | 按文件的最后修改时间排序,最近时间为排头。 | N/A | -| -S | 按文件大小来排序,大文件为排头。 | N/A | - +**表1** 展示功能参数说明 + +| 参数 | 参数说明 | 取值范围 | +| ------ | ------------------------------------------------------------ | ----------------------------- | +| --help | 查看ls命令支持的参数列表,使用方式。 | N/A | +| -a | 显示所有文件包括.hidden隐藏类型的文件。 | N/A | +| -b | 转义非图形字符。 | N/A | +| -c | 使用ctime作为文件的时间戳,必须和-l参数一块使用。 | N/A | +| -d | 只显示path名称不显示path所包含的内容。 | N/A | +| -i | 显示文件的节点号。 | N/A | +| -p | 在path名称后放一个"/"。 | N/A | +| -q | 显示不可打印字符比如'?'。 | N/A | +| -s | 统计目录和其成员所占用的内存大小,单位为1024字节。 | N/A | +| -u | 以文件的最后访问时间为时间戳,配合 -l 一起使用。 | N/A | +| -A | 列出所有文件除了.和.. | N/A | +| -H | 跟随命令行符号链接。 | N/A | +| -L | 跟随符号链接。 | N/A | +| -Z | 安全上下文。 | N/A | +| path | path为空时,显示当前目录的内容。
path为无效文件名时,显示失败,提示:
ls error: No such directory。
path为有效目录路径时,会显示对应目录下的内容。 | 1.为空。
2.有效的目录路径 | + +**表2** 输出格式参数说明 + +| 参数 | 参数说明 | +| ------- | --------------------------------------- | +| -1 | 每行列出一个文件。 | +| -c | 列,垂直排序。 | +| -g | 类似于 -l 但没有所有者。 | +| -h | 统计path目录下文件的总大小,单位为KiB。 | +| -l | 详细的显示path目录下文件的信息。 | +| -m | 文件之间添加逗号。 | +| -n | 类似 -l 数字格式显示uid/gid。 | +| -o | 类似 -l 但显示列表不包括组。 | +| -x | 列,水平排序。 | +| -ll | 文件的时间属性显示纳秒。 | + +**表3** 排序参数说明(默认为按首字母排序) + +| 参数 | 参数说明 | +| ---- | ------------------------------------------ | +| -f | 不排序。 | +| -r | 按首字母反向排序。 | +| -t | 按文件的最后修改时间排序,最近时间为排头。 | +| -S | 按文件大小来排序,大文件为排头。 | + +**表4** 彩色打印 + +| 参数 | 默认配置 | +| ---- | ------------------------------------------ | +| --color | device=yellow symlink=turquoise/red dir=blue socket=purple files: exe=green suid=red suidfile=redback stickydir=greenback=auto means detect if output is a tty. | ## 使用指南 无 -> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:** + +> **须知:** > fatfs的文件节点信息继承其父节点,父节点号为0。故在hi3516dv300开发板上ls -i显示的文件节点号全为0。 +## 特殊说明 + +ls中参数shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -80,18 +88,16 @@ ls [_-ACHLSZacdfhiklmnopqrstux1_] [_--color_[_=auto_]] [_directory..._] ## 输出说明 -**示例1:**ls命令查看当前路径下的内容 +**示例1** ls命令查看当前路径下的内容 - ``` OHOS:/$ ls bin etc nfs sdcard system usr dev lib proc storage userdata vendor ``` -**示例2:**ll命令查看当前路径下的内容 +**示例2** ll命令查看当前路径下的内容 - ``` OHOS:/$ ll total 20 @@ -107,4 +113,4 @@ drwxrwxrwx 1 0 0 2048 2021-11-21 17:52 system/ drwxrwxrwx 1 0 0 2048 2021-11-21 17:52 userdata/ drwxrwxrwx 1 0 0 2048 2021-11-21 17:52 usr/ drwxrwxrwx 1 0 0 2048 2021-11-21 17:52 vendor/ -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-lsfd.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-lsfd.md index c3d5fb687598b1fa670e95cd6e7fa690a3b16e37..7332604c0d912d7f60b9dfc578f423a326261e11 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-lsfd.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-lsfd.md @@ -23,9 +23,8 @@ lsfd命令显示当前已经打开文件的fd号以及文件的名字。 ## 输出说明 -**示例:**lsfd输出说明 +**示例** lsfd输出说明 - ``` OHOS # lsfd fd filename diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mkdir.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mkdir.md index 0686dd2e46f17493d3f465919b1b79663f127c54..42a62a58ed01ce2a2752a9502c1f1a9f96116447 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mkdir.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mkdir.md @@ -13,24 +13,27 @@ mkdir [_-vp_] [_-m mode_] [_dirname..._] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 查看mkdir命令支持的参数列表 | N/A | -| -m | 设置即将创建目录的权限。 | N/A | -| -p | 递归逐级创建父子目录。 | N/A | -| -v | 打印创建目录过程中的详细信息。 | N/A | -| directory | 需要创建的目录。 | N/A | +| 参数 | 参数说明 | +| --------- | ------------------------------ | +| --help | 查看mkdir命令支持的参数列表 | +| -m | 设置即将创建目录的权限。 | +| -p | 递归逐级创建父子目录。 | +| -v | 打印创建目录过程中的详细信息。 | +| directory | 需要创建的目录。 | ## 使用指南 -> ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:** +> **须知:** > fatfs文件系统所有创建的文件和其挂载节点的权限属性保持一致,目前节点的权限只有用户读写权限,group和others权限不生效, -> +> > 且只有读写位可设置,有rw和ro两种,因此mkdir在附加-m参数时,创建的目录权限仅有777和555两种,可执行权限也不生效。 +## 特殊说明 + +shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -45,7 +48,7 @@ mkdir [_-vp_] [_-m mode_] [_dirname..._] ## 输出说明 - + ``` OHOS:/tmp$ mkdir testpath OHOS:/tmp$ ll @@ -53,9 +56,9 @@ total 2 drwxrwxrwx 1 0 0 2048 1979-12-31 00:00 testpath/ ``` -示例 2 创建指定mode的目录 +**示例2** 创建指定mode的目录 + - ``` OHOS:/tmp$ mkdir -m 777 testpath OHOS:/tmp$ ll @@ -63,9 +66,9 @@ total 2 drwxrwxrwx 1 0 0 2048 1979-12-31 00:00 testpath/ ``` -示例 3 逐级创建目录 +**示例3** 逐级创建目录 + - ``` OHOS:/tmp$ mkdir -pv testpath01/testpath02/testpath03 mkdir: created directory 'testpath01' @@ -80,4 +83,4 @@ drwxrwxrwx 1 0 0 2048 1979-12-31 00:00 testpath02/ OHOS:/tmp$ ll testpath01/testpath02/ total 2 drwxrwxrwx 1 0 0 2048 1979-12-31 00:00 testpath03/ -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mount.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mount.md index d2ddc4f1aad519df0ef512c263727c8b1bfd9b29..2c148f024169377a923e15c98ee85dc6762a9da7 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mount.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mount.md @@ -13,22 +13,25 @@ mount [_-f_] [_-t TYPE_] [_-o OPTION,_] [[_DEVICE_] _DIR_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 查看mount命令支持的参数列表。 | N/A | -| -f | 佯装挂载动作(实际不做挂载)。 | N/A | -| -t | 文件系统的种类。 | TYPE:vfat, yaffs, jffs, ramfs, nfs,procfs, romfs. | -| -o | 挂载选项。 | N/A | -| DEVICE | 要挂载的设备(格式为设备所在路径)。 | 系统拥有的设备。 | -| DIR | 指定目录。
用户必须具有指定目录中的执行(搜索)许可权。 | N/A | +| 参数 | 参数说明 | 取值范围 | +| ------ | ----------------------------------------------------------- | ------------------------------------------------------------ | +| --help | 查看mount命令支持的参数列表。 | N/A | +| -f | 佯装挂载动作(实际不做挂载)。 | N/A | +| -t | 文件系统的种类。 | TYPE:vfat, yaffs, jffs, ramfs, nfs,procfs, romfs. | +| -o | 挂载选项。 | N/A | +| DEVICE | 要挂载的设备(格式为设备所在路径)。 | 系统拥有的设备。 | +| DIR | 指定目录。
用户必须具有指定目录中的执行(搜索)许可权。 | N/A | ## 使用指南 mount后加需要挂载的设备信息、指定目录以及设备文件格式,就能成功挂载文件系统到指定目录。 +## 特殊说明 + +shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -37,9 +40,9 @@ mount后加需要挂载的设备信息、指定目录以及设备文件格式, ## 输出说明 -**示例:**将服务器端nfs目录192.168.1.3:/nfs挂载到当前系统下新建的/nfs目录: +**示例** 将服务器端nfs目录192.168.1.3:/nfs挂载到当前系统下新建的/nfs目录: + - ``` OHOS:/$ mkdir nfs OHOS:/$ mount -t nfs 192.168.1.3:/nfs nfs @@ -49,4 +52,4 @@ OHOS:/$ ls nfs/ 16d.xml gpio_test ohos_test.txt userfs_vfat.img OHOS_Image.bin hello rootfs_vfat.img dev_tools mksh_rootfs_vfat.img test_demo -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mv.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mv.md index f3d42a9f3526ca00aef505034e10d8e6d86881c3..49126c582f469d5c53cd2839fc9d3aff89b2307e 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mv.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-mv.md @@ -13,22 +13,22 @@ mv [_-fivn_] _SOURCE... DEST_ ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -help | 使用帮助。 | N/A | -| -f | 通过删除目标文件强制复制。 | N/A | -| -i | 若指定移动的源目录或文件与目标中目录或文件同名,则会先询问是否覆盖旧文件,输入 y 直接覆盖,输入 n 取消该操作。 | N/A | -| -n | 不要覆盖任何已存在的文件或目录。 | N/A | -| -v | 目前本参数toybox官方最新代码虽然支持,但同样也不生效。 | N/A | -| SOURCE | 源文件路径。 | 目前只支持文件,不支持目录;支持多文件同时移动。 | -| DEST | 目的文件路径。 | 支持目录以及文件。 | +| 参数 | 参数说明 | 取值范围 | +| ------ | ------------------------------------------------------------ | ----------------------------------------------- | +| -help | 使用帮助。 | N/A | +| -f | 通过删除目标文件强制复制。 | N/A | +| -i | 若指定移动的源目录或文件与目标中目录或文件同名,则会先询问是否覆盖旧文件,输入 y 直接覆盖,输入 n 取消该操作。 | N/A | +| -n | 不要覆盖任何已存在的文件或目录。 | N/A | +| -v | 目前本参数toybox官方最新代码虽然支持,但同样也不生效。 | N/A | +| SOURCE | 源文件路径。 | 目前只支持文件,不支持目录;支持多文件同时移动。 | +| DEST | 目的文件路径。 | 支持目录以及文件。 | ## 使用指南 -- 源文件路径支持“\*”和“?”通配符,“\*”代表任意多个字符,“?”代表任意单个字符。目的路径不支持通配符。当源路径可匹配多个文件时,目的路径必须为目录。 +- 源文件路径支持“\*”和“?”通配符,“\*”代表任意多个字符,“?”代表任意单个字符。目的路径不支持通配符。当源路径可匹配多个文件时,目的路径必须为目录。 - 目的路径为目录时,该目录必须存在。此时目的文件以源文件命名。 @@ -36,6 +36,9 @@ mv [_-fivn_] _SOURCE... DEST_ - 目的文件已存在则会覆盖。 +## 特殊说明 + +shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -48,9 +51,9 @@ mv [_-fivn_] _SOURCE... DEST_ ## 输出说明 -**示例 1** 显示结果如下 +**示例1** 显示结果如下 + - ``` OHOS:/$ touch test.txt OHOS:/$ mkdir testpath @@ -71,9 +74,9 @@ bin etc proc storage test.txt userdata vendor dev lib sdcard system testpath usr ``` -**示例 2** 通配符使用 +**示例2** 通配符使用 + - ``` OHOS:/$ ls bin etc proc storage test.txt testA.txt testpath usr @@ -84,4 +87,4 @@ bin etc proc storage test.txt userdata vendor dev lib sdcard system testpath usr OHOS:/$ ls testpath/ test.txt test3.txt testA.txt test_.txt -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-partinfo.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-partinfo.md index 30013e2e9bb817d1e224f7320131dbc749f82d9a..b26e4142c11e827a6ba6c36e9baf6116225f2c34 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-partinfo.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-partinfo.md @@ -32,9 +32,9 @@ partinfo <_dev_inodename_> ## 输出说明 -**示例**:查看系统分区信息 +**示例** 查看系统分区信息 + - ``` OHOS # partinfo /dev/mmcblk0p0 part info : diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-pwd.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-pwd.md index 7e57659bf2be360b01ccefd018e18be50083b860..8223fc6918c131da6c3cd05af8819879d76cc747 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-pwd.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-pwd.md @@ -13,7 +13,7 @@ pwd ## 参数说明 -无。 +无 ## 使用指南 @@ -28,9 +28,9 @@ pwd 命令将当前目录的全路径名称(从根目录)写入标准输出 ## 输出说明 -**示例**:查看当前路径 +**示例** 查看当前路径 + - ``` OHOS:/sdcard/nfs$ pwd /sdcard/nfs diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rm.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rm.md index 19d5bac19ba2aa389c410c0bf71181d1bc54c0ef..ce6c6dd7b55a047db5f566e80ae13ec47fbb4be7 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rm.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rm.md @@ -13,14 +13,14 @@ rm [_-fv_] _FILE or rm_ [_-rv_] [_PATH_ | _filename_]... ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -r | 删除空目录或非空目录。 | N/A | -| -f | 强制删除:不需要确认,删除不存的文件在也不报错。 | N/A | -| -v | 显示删除的过程。 | N/A | -| PATH/filename | 要删除文件或文件夹的名称,支持输入路径。 | N/A | +| 参数 | 参数说明 | +| ------------- | ------------------------------------------------ | +| -r | 删除空目录或非空目录。 | +| -f | 强制删除:不需要确认,删除不存的文件在也不报错。 | +| -v | 显示删除的过程。 | +| PATH/filename | 要删除文件或文件夹的名称,支持输入路径。 | ## 使用指南 @@ -31,6 +31,9 @@ rm [_-fv_] _FILE or rm_ [_-rv_] [_PATH_ | _filename_]... - 删除不存在的文件会报错。 +## 特殊说明 + +-f -v 参数shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -43,9 +46,9 @@ rm [_-fv_] _FILE or rm_ [_-rv_] [_PATH_ | _filename_]... ## 输出说明 -**示例 1** 用 rm 命令删除文件 testfile +**示例1** 用 rm 命令删除文件 testfile + - ``` OHOS:/$ ls bin etc proc storage testfile usr @@ -56,9 +59,9 @@ bin etc proc storage userdata vendor dev lib sdcard system usr ``` -**示例 2** 用 rm -r 删除非空目录 testpath +**示例2** 用 rm -r 删除非空目录 testpath + - ``` OHOS:/$ ls bin etc proc storage testpath usr @@ -67,4 +70,4 @@ OHOS:/$ rm -r testpath/ OHOS:/$ ls bin etc proc storage userdata vendor dev lib sdcard system usr -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rmdir.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rmdir.md index 0318f2a9221697832a928751be4725299ffd7c88..14a13f684b12cd0bcf649d16d451664df5f1ffee 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rmdir.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-rmdir.md @@ -13,7 +13,7 @@ rmdir [_-p_] [_dirname..._] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -39,9 +39,9 @@ rmdir [_-p_] [_dirname..._] ## 输出说明 -**示例:**删除一个名为 dir 的目录 +**示例** 删除一个名为 dir 的目录 + - ``` OHOS:/test$ mkdir dir OHOS:/test$ ls diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-statfs.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-statfs.md index cd875e681672ec126a356327c38dab4cf5f47c4b..191ec684d433578c10017b4e19985b942611cbaf 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-statfs.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-statfs.md @@ -13,7 +13,7 @@ statfs [_directory_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -31,8 +31,8 @@ statfs [_directory_] statfs /nfs - **示例**:statfs输出说明 - +**示例** statfs输出说明 + ``` OHOS # statfs ./nfs statfs got: diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-sync.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-sync.md index 942e3e5b88ede73f6a869a191c5f6ac8866da7f3..5d678a5a617387957101027f1ea55fcf10ad6340 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-sync.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-sync.md @@ -13,7 +13,7 @@ sync ## 参数说明 -无。 +无 ## 使用指南 @@ -30,4 +30,4 @@ sync ## 输出说明 -无。 +无 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-touch.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-touch.md index 5f818737286794ea690a381f2ea7e4d8c62e93cf..97eab28cc5442242192d1623a99800303eccf32f 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-touch.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-touch.md @@ -17,10 +17,10 @@ touch [_filename_] **表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 查看touch命令支持的参数列表 | N/A | -| filename | 需要创建文件的名称。 | N/A | +| 参数 | 参数说明 | 取值范围 | +| -------- | --------------------------- | -------- | +| --help | 查看touch命令支持的参数列表 | N/A | +| filename | 需要创建文件的名称。 | N/A | ## 使用指南 @@ -28,9 +28,13 @@ touch [_filename_] - touch命令用来创建一个空文件,该文件可读写。 - 使用touch命令允许一次创建多个文件。 + > ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:** > 在系统重要资源路径下使用touch命令创建文件,会对系统造成死机等未知影响,如在/dev路径下执行touch uartdev-0,会产生系统卡死现象。 +## 特殊说明 + +--help参数以及同时创建多个文件,shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -45,7 +49,7 @@ touch [_filename_] **示例 1** 创建一个名为 file.c 的文件 - + ``` OHOS:/tmp$ ls OHOS:/tmp$ touch file.c @@ -58,7 +62,7 @@ total 0 **示例 2** 同时创建三个文件 - + ``` *OHOS:/tmp$ OHOS:/tmp$ touch testfile1 testfile2 testfile3 @@ -68,4 +72,4 @@ total 0 -rwxrwxrwx 1 0 0 0 1979-12-31 00:00 testfile2* -rwxrwxrwx 1 0 0 0 1979-12-31 00:00 testfile3* OHOS:/tmp$ -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-umount.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-umount.md index de3e13e5605974b836fbe1ac172bcc69031bbb34..ea24abc705e980aed349ed4024cadd2e609edde7 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-umount.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-umount.md @@ -13,20 +13,23 @@ umount [_-a [-t TYPE]_] [_dir_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| --help | 查看umount命令支持的参数列表。 | N/A | -| -a | 卸载所有已挂载的目录。 | N/A | -| -t | 同-a选项一起使用,限制-a的卸载范围,只卸载-t所指定的文件系统类型的挂载目录。 | N/A | -| dir | 需要卸载的文件系统对应的目录。 | 系统已挂载的文件系统的目录 | +| 参数 | 参数说明 | 取值范围 | +| ------ | ------------------------------------------------------------ | -------------------------- | +| --help | 查看umount命令支持的参数列表。 | N/A | +| -a | 卸载所有已挂载的目录。 | N/A | +| -t | 同-a选项一起使用,限制-a的卸载范围,只卸载-t所指定的文件系统类型的挂载目录。 | N/A | +| dir | 需要卸载的文件系统对应的目录。 | 系统已挂载的文件系统的目录 | ## 使用指南 umount后加上需要卸载的指定文件系统的目录,即将指定文件系统卸载。 +## 特殊说明 + +参数shell端暂不支持。切换mksh版本可全支持,方法:cd bin; ./mksh。 ## 使用实例 @@ -41,18 +44,18 @@ umount后加上需要卸载的指定文件系统的目录,即将指定文件 将已在./nfs挂载的文件系统卸载掉 -**示例 1** umount输出示例 +**示例1** umount输出示例 + - ``` OHOS:/$ umount ./nfs/ umount ok ``` -**示例 2** 卸载所有已挂载的nfs类型的目录 +**示例2** 卸载所有已挂载的nfs类型的目录 + - ``` OHOS:/$ umount -a -t nfs umount ok -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-write.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-write.md index 6987c4571e6332e1c495d0cd07408e810f146df0..eae31d2a90879fc9afdc6dd8b21ea5f9b3d2b550 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-write.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-file-write.md @@ -13,12 +13,12 @@ writeproc <_data_> >> /proc/<_filename_> ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| data | 要输入的字符串,以空格为结束符,如需输入空格,请用""包裹。 | N/A | -| filename | data要传入的proc文件。 | N/A | +| 参数 | 参数说明 | +| -------- | ---------------------------------------------------------- | +| data | 要输入的字符串,以空格为结束符,如需输入空格,请用""包裹。 | +| filename | data要传入的proc文件。 | ## 使用指南 @@ -28,6 +28,9 @@ proc文件实现自身的write函数,调用writeproc命令后会将入参传 > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > procfs不支持多线程访问。 +## 特殊说明 + +shell端暂不支持。 ## 使用实例 @@ -36,11 +39,13 @@ proc文件实现自身的write函数,调用writeproc命令后会将入参传 ## 输出说明 +``` OHOS \# writeproc test >> /proc/uptime [INFO]write buf is: test test >> /proc/uptime +``` > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> uptime proc文件临时实现write函数,INFO日志为实现的测试函数打印的日志。 +> uptime proc文件临时实现write函数,INFO日志为实现的测试函数打印的日志。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-magickey.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-magickey.md index 0b4d2d481d4d800a0516910f2553f368495c7728..730e37083d4632c347c70f542d2a069496094ee0 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-magickey.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-magickey.md @@ -8,17 +8,18 @@ 在中断有响应的情况下,可以通过魔法键查看task信息中 cpup(CPU占用率)看是哪个任务长时间占用CPU导致系统其他任务无响应(一般为比较高优先级任务一直抢占CPU,导致低优先级任务无响应)。 -## 使用方法 +## 使用配置 + +魔法键依赖于宏LOSCFG_ENABLE_MAGICKEY,在kernel/liteos_a中输入make menuconfig命令。此时会弹出配置项,找到Debug选项并进入,在配置项中开启“Enable MAGIC KEY”: -1. 配置宏LOSCFG_ENABLE_MAGICKEY。 +Debug ---> Enable MAGIC KEY;若关闭该选项,则魔法键失效(默认为选中的)。 - 魔法键依赖于宏LOSCFG_ENABLE_MAGICKEY,使用时通过menuconfig在配置项中开启“Enable MAGIC KEY”: +> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** +> 可以在menuconfig中,将光标移动到LOSCFG_ENABLE_MAGICKEY上,输入“?”,可以查看帮助信息。 - Debug ---> Enable MAGIC KEY;若关闭该选项,则魔法键失效。 - > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** - > 可以在menuconfig中,将光标移动到LOSCFG_ENABLE_MAGICKEY上,输入“?”,查看帮助信息。 +## 使用方法 -2. 输入“ctrl + r”键,打开魔法键检测功能。 +1. 输入“ctrl + r”键,打开魔法键检测功能。 在连接UART或者USB转虚拟串口的情况下,输入“ctrl + r” 键,打开魔法键检测功能,输出 “Magic key on”;再输入一次后,则关闭魔法键检测功能,输出“Magic key off”。魔法键功能如下: @@ -30,5 +31,5 @@ - ctrl + e:系统进行简单完整性内存池检查,检查出错会输出相关错误信息,检查正常会输出“system memcheck over, all passed!”。 - > ![icon-notice.gif](public_sys-resources/icon-notice.gif) **须知:** - > 魔法键检测功能打开情况下,如果需要通过UART或者USB转虚拟串口输入特殊字符需避免与魔法键值重复,否则魔法键会被误触发,而原有设计功能可能出现错误。 + > **须知:** + > 魔法键检测功能打开情况下,如果需要通过UART或者USB转虚拟串口输入特殊字符需避免与魔法键值重复,否则魔法键会被误触发,而原有设计功能可能出现错误。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-arp.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-arp.md index d8609af2b50f366eb20f65406a02c5660df3fdd0..a4fe65c15c8c30bb415f3591920f65e5845f2d08 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-arp.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-arp.md @@ -17,7 +17,7 @@ arp [_-i IF_] -d _IPADDR_ ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -40,15 +40,15 @@ arp [_-i IF_] -d _IPADDR_ 输入arp - **示例:**打印整个 ARP 缓存表 - +**示例** 打印整个 ARP 缓存表 + ``` OHOS # arp Address HWaddress Iface Type 192.168.1.10 E6:2B:99:2C:4B:20 eth0 static ``` - **表2** 参数说明 +**表2** 参数说明 | 参数 | 说明 | | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-dhclient.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-dhclient.md index 869fc72a0b4a3ba3c14d3488f477529e906f830e..a58aed0ea7c3d8f3022664ce3b2102ab26e47811 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-dhclient.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-dhclient.md @@ -15,13 +15,13 @@ ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -h \| --help | 查看dhclient命令支持的参数列表,及使用方式。 | N/A | -| <netif name> | 启动对应网卡的dhcp请求。 | 网卡名字,eth0。 | -| -x <netif name> | 关闭对应网卡的dhcp功能。 | 网卡名字,eth0。 | +| 参数 | 参数说明 | 取值范围 | +| ------------------------------- | -------------------------------------------- | ---------------- | +| -h \| --help | 查看dhclient命令支持的参数列表,及使用方式。 | N/A | +| <netif name> | 启动对应网卡的dhcp请求。 | 网卡名字,eth0。 | +| -x <netif name> | 关闭对应网卡的dhcp功能。 | 网卡名字,eth0。 | ## 使用指南 @@ -32,12 +32,15 @@ - dhclient -x eth0 +## 特殊说明 + +shell端暂不支持。 ## 使用实例 -**示例1:**启动网卡eth0的dhcp请求 +**示例1** 启动网卡eth0的dhcp请求 + - ``` OHOS:/$ dhclient eth0 OHOS:/$ ifconfig @@ -50,10 +53,9 @@ OHOS:/$ ``` -**示例2:**关闭网卡eth0的dhcp请求 +**示例2** 关闭网卡eth0的dhcp请求 - ``` OHOS:/$ dhclient -x eth0 NetifStatusCallback(eth0): nsc event: 0xf0 @@ -63,4 +65,4 @@ lo ip:127.0.0.1 netmask:255.0.0.0 gateway:127.0.0.1 HWaddr 00 MTU:0 Running Link UP eth0 ip:0.0.0.0 netmask:0.0.0.0 gateway:0.0.0.0 HWaddr 42:da:81:bc:58:94 MTU:1500 Running Default Link UP -``` +``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ifconfig.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ifconfig.md index 62b3650b5163641da96cc4e79cdc006fd0eedf4c..ef891e579f558726b7e239d653bab2a63d8341f1 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ifconfig.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ifconfig.md @@ -27,7 +27,7 @@ option: ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -65,8 +65,8 @@ option: ## 输出说明 -- **示例1:**设置网络参数 - +- **示例1** 设置网络参数 + ``` OHOS:/$ ifconfig eth0 192.168.100.31 netmask 255.255.255.0 gateway 192.168.100.1 hw ether 00:49:cb:6c:a1:31 OHOS:/$ ifconfig @@ -79,7 +79,7 @@ option: 输出的各参数说明如下表所示: - **表2** 参数说明 + **表2** 参数说明 | 参数 | 说明 | | -------- | -------- | @@ -92,8 +92,8 @@ option: | Default | 有这项说明此网卡连接到默认网关。 | | Link UP/Down | 网卡连接状态。 | -- **示例2:**获取协议栈统计信息 - +- **示例2** 获取协议栈统计信息 + ``` OHOS # ifconfig -a RX packets:6922 errors:0 ip dropped:4312 link dropped:67 overrun:0 bytes:0 (0.0 B) @@ -104,7 +104,7 @@ option: 输出的各参数说明如下表所示: - **表3** ifconfig -a 参数说明 +**表3** ifconfig -a 参数说明 | 参数 | 说明 | | -------- | -------- | @@ -119,8 +119,8 @@ option: | TX overrun | 暂未使用。 | | TX bytes | IP层已正常发送或者转发的数据包的总长度。 | -- **示例3**:设置IPv6的地址信息 - +- **示例3** 设置IPv6的地址信息 + ``` OHOS:/$ ifconfig eth0 inet6 add 2001:a:b:c:d:e:f:d NetifStatusCallback(eth0): nsc event: 0x8 @@ -139,8 +139,8 @@ option: HWaddr 66:2f:e5:bd:24:e6 MTU:1500 Running Default Link UP ``` -- **示例4**:删除IPv6的地址信息 - +- **示例4** 删除IPv6的地址信息 + ``` OHOS:/$ ifconfig eth0 inet6 del 2001:a:b:c:d:e:f:d NetifStatusCallback(eth0): nsc event: 0x200 diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ipdebug.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ipdebug.md index 20346dea9982f997bb3a421a2079f59204643c8d..e7a612aa23413eceee87b9078a1da132f8f4fae3 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ipdebug.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ipdebug.md @@ -18,8 +18,8 @@ ipdebug ## 输出说明 - **示例:**ipdebug打印信息如下: - +**示例** ipdebug打印信息如下: + ``` OHOS # ipdebug ================= diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-netstat.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-netstat.md index bf466ca6c04f6836245e2fe42432152d4087c2ac..c82043f233624db773288eacfa2d5e0df7711ee0 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-netstat.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-netstat.md @@ -20,6 +20,9 @@ netstat netstat +## 特殊说明 + +shell端暂不支持。 ## 使用实例 @@ -28,8 +31,8 @@ netstat ## 输出说明 - **示例:**netstat 打印信息 - +**示例** netstat 打印信息 + ``` OHOS # netstat ========== total sockets 128 ====== unused sockets 119 ========== @@ -46,16 +49,16 @@ udp 0 0 127.0.0.1:62180 127.0.0.1:62179 udp 0 0 127.0.0.1:62178 127.0.0.1:62177 ``` - **表1** 输出说明 +**表1** 输出说明 -| 输出 | 说明 | -| -------- | -------- | -| Proto | 协议类型。 | -| Recv-Q | 未被用户读取的数据量。
对于Listen TCP,此值为已完成三次握手,但是未被用户accept的TCP连接的数量。 | -| Send-Q | 对TCP连接,已发送但未确认的数据量。
对UDP连接,由于IP地址解析未完成而缓存的数据量。 | -| Local Address | 本地地址和端口。 | -| Foreign Address | 远程地址和端口。 | -| State | TCP连接状态,UDP此项无意义。 | +| 输出 | 说明 | +| -------------------- | ------------------------------------------------------------ | +| Proto | 协议类型。 | +| Recv-Q | 未被用户读取的数据量。
对于Listen TCP,此值为已完成三次握手,但是未被用户accept的TCP连接的数量。 | +| Send-Q | 对TCP连接,已发送但未确认的数据量。
对UDP连接,由于IP地址解析未完成而缓存的数据量。 | +| Local Address | 本地地址和端口。 | +| Foreign Address | 远程地址和端口。 | +| State | TCP连接状态,UDP此项无意义。 | > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** -> 形如“========== total sockets 32 ====== unused sockets 22 BootTime 27 s ========== ”,表示一共32个套接字,未使用套接字22个,距系统启动已经过27秒。 +> 形如“========== total sockets 32 ====== unused sockets 22 BootTime 27 s ========== ”,表示一共32个套接字,未使用套接字22个,距系统启动已经过27秒。 \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ntpdate.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ntpdate.md index 635a4e46aa7a219141f89cc9d7c079715c917ca7..1dc59ea543cdb4561149126d41a2c40d3ce1761c 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ntpdate.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ntpdate.md @@ -13,7 +13,7 @@ ntpdate [_SERVER_IP1_] [_SERVER_IP2_]... ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping.md index 111cadec60a336585ffdd2a4f700035f7948f6e6..6cb4a25a81fdc35693c14476484deedb72c9e4b3 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping.md @@ -13,7 +13,7 @@ ping _[-4] [-c cnt] [-f] [-i interval] [-q] [-s size] <IP>_ ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -45,8 +45,8 @@ ping _[-4] [-c cnt] [-f] [-i interval] [-q] [-s size] <IP>_ ## 输出说明 - **示例:**ping tftp 服务器地址 - +**示例** ping tftp 服务器地址 + ``` OHOS:/$ ping 192.168.1.3 Ping 192.168.1.3 (192.168.1.3): 56(84) bytes. diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping6.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping6.md index 16a6843b1e363085372cdb7d072e85c18d98003c..65b18a4439fc73337a2b6863ad4eba76342a7d15 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping6.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-ping6.md @@ -13,14 +13,14 @@ ping6 _[-c count] [-I interface / sourceAddress] destination_ ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 -| 参数 | 参数说明 | 取值范围 | -| -------- | -------- | -------- | -| -c count | 执行的次数,不带本参数则默认为4次。 | 1~65535 | -| -I interface | 指定网卡执行IPv6 ping操作。 | N/A | -| -I sourceAddress | 指定源IPv6地址执行ping操作。 | N/A | -| destination | 目标主机地址。 | N/A | +| 参数 | 参数说明 | 取值范围 | +| --------------------- | ----------------------------------- | -------- | +| -c count | 执行的次数,不带本参数则默认为4次。 | [1, 65535] | +| -I interface | 指定网卡执行IPv6 ping操作。 | N/A | +| -I sourceAddress | 指定源IPv6地址执行ping操作。 | N/A | +| destination | 目标主机地址。 | N/A | ## 使用指南 @@ -31,6 +31,9 @@ ping6 _[-c count] [-I interface / sourceAddress] destination_ - 命令需要启动TCP/IP协议栈后才能使用。 +## 特殊说明 + +shell端暂不支持。 ## 使用实例 @@ -45,8 +48,8 @@ ping6 _[-c count] [-I interface / sourceAddress] destination_ ## 输出说明 -1. 输入ping6 2001:a:b:c:d:e:f:b - +1. 输入`ping6 2001:a:b:c:d:e:f:b` + ``` OHOS # ping6 2001:a:b:c:d:e:f:b PING 2001:A:B:C:D:E:F:B with 56 bytes of data. 56 bytes from 2001:A:B:C:D:E:F:B : icmp_seq=1 time<1 ms @@ -58,8 +61,8 @@ ping6 _[-c count] [-I interface / sourceAddress] destination_ rtt min/avg/max = 0/0.00/0 ms ``` -2. 输入 ping6 -c 3 2001:a:b:c:d:e:f:b 指定3次进行网络测试 - +2. 输入 `ping6 -c 3 2001:a:b:c:d:e:f:b` 指定3次进行网络测试 + ``` OHOS # ping6 -c 3 2001:a:b:c:d:e:f:b PING 2001:A:B:C:D:E:F:B with 56 bytes of data. 56 bytes from 2001:A:B:C:D:E:F:B : icmp_seq=1 time<1 ms @@ -70,8 +73,8 @@ ping6 _[-c count] [-I interface / sourceAddress] destination_ rtt min/avg/max = 0/0.00/0 ms ``` -3. 输入 ping6 -I eth0 2001:a:b:c:d:e:f:b 使用指定网卡接口eth0测试IPv6。 - +3. 输入 `ping6 -I eth0 2001:a:b:c:d:e:f:b` 使用指定网卡接口eth0测试IPv6。 + ``` OHOS # ping6 -I eth0 2001:a:b:c:d:e:f:b PING 2001:A:B:C:D:E:F:B with 56 bytes of data. 56 bytes from 2001:A:B:C:D:E:F:B : icmp_seq=1 time=10 ms @@ -82,8 +85,8 @@ ping6 _[-c count] [-I interface / sourceAddress] destination_ 4 packets transmitted, 4 received, 0.00% packet loss, time 30msrtt min/avg/max = 0/2.50/10 ms ``` -4. 输入 ping6 -I 2001:a:b:c:d:e:f:d 2001:a:b:c:d:e:f:b 使用指定的源IPv6地址2001:a:b:c:d:e:f:d进行测试。 - +4. 输入 `ping6 -I 2001:a:b:c:d:e:f:d 2001:a:b:c:d:e:f:b` 使用指定的源IPv6地址2001:a:b:c:d:e:f:d进行测试。 + ``` OHOS # ping6 -I 2001:a:b:c:d:e:f:d 2001:a:b:c:d:e:f:b PING 2001:A:B:C:D:E:F:B with 56 bytes of data. 56 bytes from 2001:A:B:C:D:E:F:B : icmp_seq=1 time<1 ms @@ -92,4 +95,4 @@ ping6 _[-c count] [-I interface / sourceAddress] destination_ 56 bytes from 2001:A:B:C:D:E:F:B : icmp_seq=4 time<1 ms --- 2001:a:b:c:d:e:f:b/64 ping statistics --- 4 packets transmitted, 4 received, 0.00% packet loss, time 20msrtt min/avg/max = 0/0.00/0 ms - ``` + ``` \ No newline at end of file diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-telnet.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-telnet.md index 7a72745d7044b98cf4b63d63b89ac78dafcce29c..c55b1d69befb6cdbec749a4c2ac30d4ae0513ef1 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-telnet.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-telnet.md @@ -13,7 +13,7 @@ telnet [_on | off_] ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | @@ -37,9 +37,9 @@ telnet [_on | off_] ## 输出说明 -**示例:**输入 telnet on +**示例** 输入 telnet on + - ``` OHOS # telnet on OHOS # start telnet server successfully, waiting for connection. diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-tftp.md b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-tftp.md index 5772a7a8053d05d21885ed5aff065a463e0d9bfb..8777468a5fdd0873b06cf292d6be04c1c4e7c2a7 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-tftp.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-shell-net-tftp.md @@ -15,7 +15,7 @@ tftp命令可以从TFTP服务器上下载文件。 ## 参数说明 - **表1** 参数说明 +**表1** 参数说明 | 参数 | 参数说明 | 取值范围 | | -------- | -------- | -------- | diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-trace.md b/zh-cn/device-dev/kernel/kernel-small-debug-trace.md index 74e963ab7e637de910d6141a8ad45d0f8a40f8d0..26328bad562d2938c03731a4dd9c0f51d013913c 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-trace.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-trace.md @@ -45,7 +45,7 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 - IDENTITY类型UINTPTR,表示事件操作的主体对象。 - Params类型UINTPTR,表示事件的参数。 示例: - + ``` 假设需要新增对文件(fd1、fd2)读写操作的简易插桩, 自定义读操作为type:1, 写操作为type:2,则 @@ -63,7 +63,7 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 - TYPE用于设置具体的事件类型,可以在头文件los_trace.h中的enum LOS_TRACE_TYPE中自定义事件类型。定义方法和规则可以参考其他事件类型。 - IDENTITY和Params的类型及含义同简易插桩。 示例: - + ``` 1.在enum LOS_TRACE_MASK中定义事件掩码,即模块级别的事件类型。 定义规范为TRACE_#MOD#_FLAG,#MOD#表示模块名。 @@ -86,9 +86,9 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 LOS_TRACE(FS_READ, fp, fd, flag, size); // 读文件的代码桩, #TYPE#之后的入参就是上面3中的FS_READ_PARAMS函数的入参 ``` - + > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** - > 预置的Trace事件及参数均可以通过上述方式进行裁剪,参数详见kernel\include\los_trace.h。 + > 预置的Trace事件及参数均可以通过上述方式进行裁剪,参数详见 [kernel\include\los_trace.h](https://gitee.com/openharmony/kernel_liteos_a/blob/master/kernel/include/los_trace.h)。 - Trace Mask事件过滤接口LOS_TraceEventMaskSet(UINT32 mask),其入参mask仅高28位生效(对应LOS_TRACE_MASK中某模块的使能位),仅用于模块的过滤,暂不支持针对某个特定事件的细粒度过滤。例如:LOS_TraceEventMaskSet(0x202),则实际设置生效的mask为0x200(TRACE_QUE_FLAG),QUE模块的所有事件均会被采集。一般建议使用的方法为: LOS_TraceEventMaskSet(TRACE_EVENT_FLAG | TRACE_MUX_FLAG | TRACE_SEM_FLAG | TRACE_QUE_FLAG); @@ -100,8 +100,8 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 - 针对中断事件的Trace, 提供中断号过滤,用于解决某些场景下特定中断号频繁触发导致其他事件被覆盖的情况,用户可自定义中断过滤的规则, 示例如下: - - ``` + + ```c BOOL Example_HwiNumFilter(UINT32 hwiNum) { if ((hwiNum == TIMER_INT) || (hwiNum == DMA_INT)) { @@ -117,7 +117,7 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 ### 用户态 -新增trace字符设备,位于"/dev/trace",通过对设备节点的read、write、ioctl,实现用户态trace的读写和控制: +新增trace字符设备,位于"/dev/trace",通过对设备节点的read、write、ioctl,实现用户态trace的读写和控制: - read: 用户态读取Trace记录数据 @@ -125,8 +125,8 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 - ioctl: 用户态Trace控制操作,包括 - -``` + +```c #define TRACE_IOC_MAGIC 'T' #define TRACE_START _IO(TRACE_IOC_MAGIC, 1) #define TRACE_STOP _IO(TRACE_IOC_MAGIC, 2) @@ -148,7 +148,7 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 开启Trace调测的典型流程如下: 1. 配置Trace模块相关宏。 - 配置Trace控制宏LOSCFG_KERNEL_TRACE,默认关,在kernel/liteos_a目录下执行 make update_config命令配置"Kernel->Enable Hook Feature->Enable Trace Feature"中打开: + 配置Trace控制宏LOSCFG_KERNEL_TRACE,默认关,在 kernel/liteos_a 目录下执行 make update_config 命令配置 "Kernel->Enable Hook Feature->Enable Trace Feature" 中打开: | 配置项 | menuconfig选项 | 含义 | 设置值 | | -------- | -------- | -------- | -------- | @@ -156,7 +156,7 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 | LOSCFG_RECORDER_MODE_OFFLINE | Trace work mode ->Offline mode | Trace工作模式为离线模式 | YES/NO | | LOSCFG_RECORDER_MODE_ONLINE | Trace work mode ->Online mode | Trace工作模式为在线模式 | YES/NO | | LOSCFG_TRACE_CLIENT_INTERACT | Enable Trace Client Visualization and Control | 使能与Trace IDE (dev tools)的交互,包括数据可视化和流程控制 | YES/NO | - | LOSCFG_TRACE_FRAME_CORE_MSG | Enable Record more extended content -
>Record cpuid, hardware interrupt
 status, task lock status | 记录CPUID、中断状态、锁任务状态 | YES/NO | + | LOSCFG_TRACE_FRAME_CORE_MSG | Enable Record more extended content
->Record cpuid, hardware interrupt status, task lock status | 记录CPUID、中断状态、锁任务状态 | YES/NO | | LOSCFG_TRACE_FRAME_EVENT_COUNT | Enable Record more extended content
 ->Record event count,
 which indicate the sequence of happend events | 记录事件的次序编号 | YES/NO | | LOSCFG_TRACE_FRAME_MAX_PARAMS | Record max params | 配置记录事件的最大参数个数 | INT | | LOSCFG_TRACE_BUFFER_SIZE | Trace record buffer size | 配置Trace的缓冲区大小 | INT | @@ -165,7 +165,7 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 3. (可选)调用LOS_TraceStop停止Trace后,清除缓冲区LOS_TraceReset(系统默认已启动trace)。 -4. (可选)调用LOS_TraceEventMaskSet设置需要追踪的事件掩码(系统默认的事件掩码仅使能中断与任务事件),事件掩码参见los_trace.h 中的LOS_TRACE_MASK定义。 +4. (可选)调用LOS_TraceEventMaskSet设置需要追踪的事件掩码(系统默认的事件掩码仅使能中断与任务事件),事件掩码参见 [los_trace.h](https://gitee.com/openharmony/kernel_liteos_a/blob/master/kernel/include/los_trace.h) 中的LOS_TRACE_MASK定义。 5. 在需要记录事件的代码起始点调用LOS_TraceStart。 @@ -203,50 +203,52 @@ LiteOS-A内核的Trace模块提供下面几种功能,接口详细信息可以 ### 内核态示例代码 +该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试。 实例代码如下: -``` +```c #include "los_trace.h" UINT32 g_traceTestTaskId; VOID Example_Trace(VOID) -{ - UINT32 ret; +{ + UINT32 ret; LOS_TaskDelay(10); /* 开启trace */ - ret = LOS_TraceStart(); - if (ret != LOS_OK) { - dprintf("trace start error\n"); - return; - } - /* 触发任务切换的事件 */ - LOS_TaskDelay(1); - LOS_TaskDelay(1); - LOS_TaskDelay(1); - /* 停止trace */ - LOS_TraceStop(); + ret = LOS_TraceStart(); + if (ret != LOS_OK) { + dprintf("trace start error\n"); + return; + } + /* 触发任务切换的事件 */ + LOS_TaskDelay(1); + LOS_TaskDelay(1); + LOS_TaskDelay(1); + /* 停止trace */ + LOS_TraceStop(); LOS_TraceRecordDump(FALSE); } -UINT32 Example_Trace_test(VOID){ - UINT32 ret; - TSK_INIT_PARAM_S traceTestTask; - /* 创建用于trace测试的任务 */ - memset(&traceTestTask, 0, sizeof(TSK_INIT_PARAM_S)); - traceTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_Trace; - traceTestTask.pcName = "TestTraceTsk"; /* 测试任务名称 */ - traceTestTask.uwStackSize = 0x800; - traceTestTask.usTaskPrio = 5; - traceTestTask.uwResved = LOS_TASK_STATUS_DETACHED; - ret = LOS_TaskCreate(&g_traceTestTaskId, &traceTestTask); - if(ret != LOS_OK){ - dprintf("TraceTestTask create failed .\n"); - return LOS_NOK; - } - /* 系统默认情况下已启动trace, 因此可先关闭trace后清除缓存区后,再重启trace */ - LOS_TraceStop(); - LOS_TraceReset(); - /* 开启任务模块事件记录 */ - LOS_TraceEventMaskSet(TRACE_TASK_FLAG); +UINT32 Example_Trace_test(VOID) +{ + UINT32 ret; + TSK_INIT_PARAM_S traceTestTask; + /* 创建用于trace测试的任务 */ + memset(&traceTestTask, 0, sizeof(TSK_INIT_PARAM_S)); + traceTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_Trace; + traceTestTask.pcName = "TestTraceTsk"; /* 测试任务名称 */ + traceTestTask.uwStackSize = 0x800; // 0x800: trace test task stacksize + traceTestTask.usTaskPrio = 5; // 5: trace test task priority + traceTestTask.uwResved = LOS_TASK_STATUS_DETACHED; + ret = LOS_TaskCreate(&g_traceTestTaskId, &traceTestTask); + if (ret != LOS_OK) { + dprintf("TraceTestTask create failed .\n"); + return LOS_NOK; + } + /* 系统默认情况下已启动trace, 因此可先关闭trace后清除缓存区后,再重启trace */ + LOS_TraceStop(); + LOS_TraceReset(); + /* 开启任务模块事件记录 */ + LOS_TraceEventMaskSet(TRACE_TASK_FLAG); return LOS_OK; } LOS_MODULE_INIT(Example_Trace_test, LOS_INIT_LEVEL_KMOD_EXTENDED); @@ -262,7 +264,7 @@ LOS_MODULE_INIT(Example_Trace_test, LOS_INIT_LEVEL_KMOD_EXTENDED); ***TraceInfo begin*** clockFreq = 50000000 CurEvtIndex = 7 -Index Time(cycles) EventType CurTask Identity params +Index Time(cycles) EventType CurTask Identity params 0 0x366d5e88 0x45 0x1 0x0 0x1f 0x4 0x0 1 0x366d74ae 0x45 0x0 0x1 0x0 0x8 0x1f 2 0x36940da6 0x45 0x1 0xc 0x1f 0x4 0x9 @@ -276,13 +278,13 @@ Index Time(cycles) EventType CurTask Identity params 输出的事件信息包括:发生时间、事件类型、事件发生在哪个任务中、事件操作的主体对象、事件的其他参数。 -- EventType:表示的具体事件可查阅头文件los_trace.h中的enum LOS_TRACE_TYPE。 +- EventType:表示的具体事件可查阅头文件 [los_trace.h](https://gitee.com/openharmony/kernel_liteos_a/blob/master/kernel/include/los_trace.h) 中的enum LOS_TRACE_TYPE。 - CurrentTask:表示当前运行在哪个任务中,值为taskid。 -- Identity:表示事件操作的主体对象,可查阅头文件los_trace.h中的\#TYPE\#_PARAMS。 +- Identity:表示事件操作的主体对象,可查阅头文件 [los_trace.h](https://gitee.com/openharmony/kernel_liteos_a/blob/master/kernel/include/los_trace.h) 中的\#TYPE\#_PARAMS。 -- params:表示的事件参数可查阅头文件los_trace.h中的\#TYPE\#_PARAMS。 +- params:表示的事件参数可查阅头文件 [los_trace.h](https://gitee.com/openharmony/kernel_liteos_a/blob/master/kernel/include/los_trace.h) 中的\#TYPE\#_PARAMS。 下面以序号为0的输出项为例,进行说明。 @@ -298,7 +300,7 @@ Index Time(cycles) EventType CurTask Identity params - Identity和params的含义需要查看TASK_SWITCH_PARAMS宏定义: -``` +```c #define TASK_SWITCH_PARAMS(taskId, oldPriority, oldTaskStatus, newPriority, newTaskStatus) \ taskId, oldPriority, oldTaskStatus, newPriority, newTaskStatus ``` diff --git a/zh-cn/device-dev/kernel/kernel-small-debug-user.md b/zh-cn/device-dev/kernel/kernel-small-debug-user.md index ea0adcfde4a3b1260845be2ad4cf57ee6c2f4799..7f3ef388df3b35582d3bd6f33c59c7756ae93ff2 100644 --- a/zh-cn/device-dev/kernel/kernel-small-debug-user.md +++ b/zh-cn/device-dev/kernel/kernel-small-debug-user.md @@ -5,7 +5,7 @@ Debug版本的musl-libc库为用户提供内存泄漏检测、堆内存统计、踩内存分析以及backtrace功能等维测手段,可以提高用户态内存相关问题的定位效率。 -采用了对malloc/free接口进行插桩,保存关键节点信息,然后程序在申请和释放内存时进行内存节点完整性校验,最后在程序结束时通过统计节点信息得到内存统计信息并根据统计信息判断内存是否泄漏的设计思想 +采用了对malloc/free接口进行插桩,保存关键节点信息,然后程序在申请和释放内存时进行内存节点完整性校验,最后在程序结束时通过统计节点信息得到内存统计信息并根据统计信息判断内存是否泄漏的设计思想。 ## 运行机制 @@ -28,7 +28,7 @@ Debug版本的musl-libc库为用户提供内存泄漏检测、堆内存统计、 ![zh-cn_image_0000001165890518](figures/zh-cn_image_0000001165890518.png) -其中,TID表示线程ID;PID表示进程ID;ptr表示申请的内存地址;size表示申请的内存大小;lr[n]表示函数调用栈地址,变量n可以根据具体场景的需要进行配置。 +其中,TID表示线程ID;PID表示进程ID;ptr表示申请的内存地址;size表示申请的内存大小;lr[n]表示函数调用栈地址,变量n的大小可以根据具体场景的需要进行配置。 释放内存时,将free等接口的入参指针与node的ptr字段进行匹配,如果相同则删除该内存节点控制块信息。 @@ -46,7 +46,7 @@ Debug版本的musl-libc库为用户提供内存泄漏检测、堆内存统计、 ### 内存完整性检查 -- 使用malloc申请内存(小于等于0x1c000bytes时通过堆分配算法分配) +- 使用malloc申请内存(小于等于0x1c000 bytes时通过堆分配算法分配) 用户程序申请堆内存时,在堆内存节点处添加校验值等信息,如果校验值异常,则很有可能是前一块堆内存使用越界导致的(目前无法识别校验值被野指针破坏的场景)。在内存申请、释放时校验内存节点校验值的正确性,若内存节点被破坏,校验失败时则输出tid、pid及当前被踩节点前一块堆内存申请时保存的调用栈信息,通过addr2line工具可获得具体的代码行信息,辅助用户解决问题。 **图4** node节点头信息添加校验值 @@ -59,7 +59,7 @@ Debug版本的musl-libc库为用户提供内存泄漏检测、堆内存统计、 ![zh-cn_image_0000001165890904](figures/zh-cn_image_0000001165890904.png) -- 使用malloc申请内存(大于0x1c000bytes时通过mmap申请) +- 使用malloc申请内存(大于0x1c000 bytes时通过mmap申请) 当malloc通过mmap申请大块内存时,在返回给用户使用的内存区间头和尾分别多申请一个页,一个页PAGE_SIZE当前为0x1000,这两个页分别通过mprotect接口设置权限为PROT_NONE(无可读可写权限),可以有效防止内存越界读写问题:越界读写数据时由于无读写权限而导致用户程序异常,根据异常调用栈信息可找到相应的代码逻辑。 **图6** malloc通过mmap机制申请内存的内存布局 @@ -119,7 +119,7 @@ Debug版本的musl-libc库为用户提供内存泄漏检测、堆内存统计、 代码功能:显式调用调测模块的相关接口对用户代码进行内存校验。 -``` +```c #include #include #include @@ -127,7 +127,8 @@ Debug版本的musl-libc库为用户提供内存泄漏检测、堆内存统计、 #define MALLOC_LEAK_SIZE 0x300 -void func(void) { +void func(void) +{ char *ptr = malloc(MALLOC_LEAK_SIZE); memset(ptr, '3', MALLOC_LEAK_SIZE); } @@ -158,15 +159,15 @@ $ clang -o mem_check mem_check.c -funwind-tables -rdynamic -g -mfloat-abi=softfp > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > - 本编译示例基于将编译器的路径写入环境变量中,即.bashrc文件中。 -> +> > - 编译用户程序及所需的lib库时,需要添加编译选项-funwind-tables,-rdynamic,-g,用于栈回溯。 -> +> > - -mfloat-abi=softfp,-mcpu=cortex-a7,-mfpu=neon-vfpv4编译选项用于指定具体的芯片架构、浮点数计算优化、fpu,与具体的libc库使用的编译选项保持一致,否则链接时可能出现找不到libc库文件。 -> +> > - -target arm-liteos用于指定编译器相关库文件路径。 -> +> > - --sysroot=/home/<user-name>/directory/out/hispark_taurus/ipcamera_hispark_taurus/sysroot用于指定编译器库文件搜索根目录,假设OpenHarmony工程代码存放路径为/home/<user-name>/directory。其中out/hispark_taurus/ipcamera_hispark_taurus路径为在编译时,hb set命令指定的具体产品,本示例选择的是ipcamera_hispark_taurus产品。 -> +> > - $(clang -mfloat-abi=softfp -mcpu=cortex-a7 -mfpu=neon-vfpv4 -target arm-liteos -print-file-name=libunwind.a)用于指定相应的unwind库的路径。 @@ -175,7 +176,7 @@ $ clang -o mem_check mem_check.c -funwind-tables -rdynamic -g -mfloat-abi=softfp ``` OHOS # ./mem_check -OHOS # +OHOS # ==PID:4== Heap memory statistics(bytes): // 堆内存统计信息 [Check point]: // check点调用栈 #00: [0x86c] -> mem_check @@ -293,14 +294,15 @@ kill -37 # 检查堆内存头节点是否完整 代码功能:构造内存问题利用命令行方式进行内存调测。 -``` +```c #include #include #include #define MALLOC_LEAK_SIZE 0x300 -void func(void) { +void func(void) +{ char *ptr = malloc(MALLOC_LEAK_SIZE); memset(ptr, '3', MALLOC_LEAK_SIZE); } @@ -325,9 +327,9 @@ int main() ``` OHOS # ./mem_check --mwatch // 利用task命令可以查到mem_check进程的pid为4 -OHOS # +OHOS # OHOS # kill -35 4 // 查看堆内存统计信息 -OHOS # +OHOS # ==PID:4== Heap memory statistics(bytes): [Check point]: #00: [0x58dfc] -> /lib/libc.so @@ -337,7 +339,7 @@ OHOS # ==PID:4== Total heap: 0x640 byte(s), Peak: 0x640 byte(s) OHOS # kill -36 4 // 检查是否存在堆内存泄漏 -OHOS # +OHOS # ==PID:4== Detected memory leak(s): [Check point]: #00: [0x2da4c] -> /lib/libc.so @@ -355,7 +357,7 @@ OHOS # ==PID:4== SUMMARY: 0x640 byte(s) leaked in 2 allocation(s). OHOS # kill -37 4 // 检查堆内存头节点的完整性 -OHOS # +OHOS # Check heap integrity ok! ``` @@ -391,109 +393,109 @@ Now using addr2line ... ##### 使用mrecord参数命令 1. 执行用户程序并指定记录内存调测信息的文件路径 - + ``` OHOS # ./mem_check --mrecord /storage/check.txt ``` 2. 利用kill -35 <pid>统计内存信息,该信息将会输出到文件中,使用cat命令查看 - + ``` OHOS # kill -35 4 OHOS # Memory statistics information saved in /storage/pid(4)_check.txt - + OHOS # cat /storage/pid(4)_check.txt - + ==PID:4== Heap memory statistics(bytes): [Check point]: #00: [0x5973c] -> /lib/libc.so - + [TID: 18, Used: 0x640] - + ==PID:4== Total heap: 0x640 byte(s), Peak: 0x640 byte(s) ``` 3. 利用kill -36 <pid>校验内存完整性,该信息将会输出到文件中,使用cat命令查看 - + ``` OHOS # kill -36 4 OHOS # Leak check information saved in /storage/pid(4)_check.txt - + OHOS # cat /storage/pid(4)_check.txt - + ==PID:4== Heap memory statistics(bytes): [Check point]: #00: [0x5973c] -> /lib/libc.so - + [TID: 18, Used: 0x640] - + ==PID:4== Total heap: 0x640 byte(s), Peak: 0x640 byte(s) - + ==PID:4== Detected memory leak(s): [Check point]: #00: [0x2e38c] -> /lib/libc.so #01: [0x5973c] -> /lib/libc.so - + [TID:18 Leak:0x320 byte(s)] Allocated from: #00: [0x724] -> mem_check #01: <(null)+0x1fdd231c>[0x2231c] -> /lib/libc.so - + [TID:18 Leak:0x320 byte(s)] Allocated from: #00: [0x6ec] -> mem_check #01: [0x740] -> mem_check #02: <(null)+0x1fdd231c>[0x2231c] -> /lib/libc.so - + ==PID:4== SUMMARY: 0x640 byte(s) leaked in 2 allocation(s). ``` 4. 利用kill -9 <pid>杀掉当前进程,进程退出后会默认校验内存完整性,该信息将会输出到文件中,使用cat命令查看 - + ``` OHOS # kill -9 4 OHOS # Leak check information saved in /storage/pid(4)_check.txt - + Check heap integrity ok! - + OHOS # cat /storage/pid(4)_check.txt - OHOS # + OHOS # ==PID:4== Heap memory statistics(bytes): [Check point]: #00: [0x5973c] -> /lib/libc.so - + [TID: 18, Used: 0x640] - + ==PID:4== Total heap: 0x640 byte(s), Peak: 0x640 byte(s) - + ==PID:4== Detected memory leak(s): [Check point]: #00: [0x2e38c] -> /lib/libc.so #01: [0x5973c] -> /lib/libc.so - + [TID:18 Leak:0x320 byte(s)] Allocated from: #00: [0x724] -> mem_check #01: <(null)+0x1fdd231c>[0x2231c] -> /lib/libc.so - + [TID:18 Leak:0x320 byte(s)] Allocated from: #00: [0x6ec] -> mem_check #01: [0x740] -> mem_check #02: <(null)+0x1fdd231c>[0x2231c] -> /lib/libc.so - + ==PID:4== SUMMARY: 0x640 byte(s) leaked in 2 allocation(s). - + ==PID:4== Detected memory leak(s): [Check point]: #00: [0x2e38c] -> /lib/libc.so #01: [0x11b2c] -> /lib/libc.so - + [TID:18 Leak:0x320 byte(s)] Allocated from: #00: [0x724] -> mem_check #01: <(null)+0x1fdd231c>[0x2231c] -> /lib/libc.so - + [TID:18 Leak:0x320 byte(s)] Allocated from: #00: [0x6ec] -> mem_check #01: [0x740] -> mem_check #02: <(null)+0x1fdd231c>[0x2231c] -> /lib/libc.so - + ==PID:4== SUMMARY: 0x640 byte(s) leaked in 2 allocation(s). ``` @@ -504,7 +506,7 @@ Now using addr2line ... ### UAF(Use after free) -- 申请小块内存(不大于0x1c000字节) +- 申请小块内存(不大于0x1c000 bytes) free之后: 读操作:读取free之后的内存大概率是魔术数字(0xFEFEFEFE) @@ -515,7 +517,7 @@ Now using addr2line ... 写操作:无法校验。 -- 申请大块内存(大于0x1c000) +- 申请大块内存(大于0x1c000 bytes) 堆内存由malloc通过调用mmap接口申请,free之后若仍访问该内存,则用户程序异常(该内存区间已被unmap)。 @@ -526,22 +528,23 @@ Double free时,用户程序将会异常退出。 ### 堆内存节点被踩 -- 申请小块内存(不大于0x1c000) +- 申请小块内存(不大于0x1c000 bytes) + 堆内存节点被踩时,用户程序将会异常退出,并输出破坏被踩节点的可能的堆内存申请调用栈,对于野指针踩内存情况无法校验出来。例如用户程序mem_check中存在堆内存越界踩的情况,利用命令行方式可以获得踩内存的可能的具体位置。 - + ``` - OHOS # ./mem_check --mwatch - OHOS # + OHOS # ./mem_check --mwatch + OHOS # ==PID:6== Memory integrity information: [TID:28 allocated addr: 0x272e1ea0, size: 0x120] The possible attacker was allocated from: #00: [0x640e8] -> /lib/libc.so - #01: [0x21d0] -> mem_check + #01: [0x21d0] -> mem_check ``` 可以通过调用栈解析脚本对调用栈信息进行解析。 -- 申请大块内存(大于0x1c000) +- 申请大块内存(大于0x1c000 bytes) 堆内存由malloc通过mmap接口申请,申请得到的堆内存块前后各置一个size为PAGE_SIZE大小的区间,设置无读写权限,读写操作会触发用户程序异常。 diff --git a/zh-cn/device-dev/kernel/kernel-small-memory-lms.md b/zh-cn/device-dev/kernel/kernel-small-memory-lms.md index f818c3bdf349ca14ddf83ba3bf6fdae3ce314436..50f0741d040d86f314f6c58bfb02f3fa74d271a0 100644 --- a/zh-cn/device-dev/kernel/kernel-small-memory-lms.md +++ b/zh-cn/device-dev/kernel/kernel-small-memory-lms.md @@ -3,7 +3,7 @@ ## 基本概念 -LMS全称为Lite Memory Sanitizer,是一种实时检测内存操作合法性的调测工具。LMS能够实时检测缓冲区溢出(buffer overflow),释放后使用(use after free) 和重复释放(double Free), 在异常发生的第一时间通知操作系统,结合backtrace等定位手段,能准确定位到产生内存问题的代码行,极大提升内存问题定位效率。 +LMS全称为Lite Memory Sanitizer,是一种实时检测内存操作合法性的调测工具。LMS能够实时检测缓冲区溢出(buffer overflow),释放后使用(use after free) 和重复释放(double free), 在异常发生的第一时间通知操作系统,结合backtrace等定位手段,能准确定位到产生内存问题的代码行,极大提升内存问题定位效率。 OpenHarmony LiteOS-A内核的LMS模块提供下面几种功能: @@ -20,7 +20,7 @@ OpenHarmony LiteOS-A内核的LMS模块提供下面几种功能: LMS使用影子内存映射标记系统内存的状态,一共可标记为三个状态:可读写,不可读写,已释放。影子内存存放在内存池的尾部。 -- 内存从堆上申请后,会将数据区的影子内存设置为“可读写”状态,并将头结点区的影子内存设置为“不可读写”状态。 +- 内存从堆上申请后,会将数据区的影子内存设置为“可读写”状态,并将头节点区的影子内存设置为“不可读写”状态。 - 内存在堆上被释放时,会将被释放内存的影子内存设置为“已释放”状态。 @@ -38,12 +38,12 @@ OpenHarmony LiteOS-A内核的LMS模块提供下面几种功能,接口详细信 **表1** LMS模块接口说明 -| 功能分类 | 接口名 | 描述 | +| 功能分类 | 接口名 | 描述 | | -------- | -------- | -------- | -| 添加指定内存池被检测 | LOS_LmsCheckPoolAdd | 将指定内存池的地址范围添加到LMS的内存检测链表上,当访问的地址在链表范围内时,LMS才进行合法性校验;且LOS_MemInit接口会调用该接口,默认将初始化的内存池挂入到检测链表中。 | -| 删除指定内存池不被检测 | LOS_LmsCheckPoolDel | 不检测指定内存池地址范围内的合法性校验。 | -| 使能指定内存段锁保护 | LOS_LmsAddrProtect | 为某段内存地址上锁,设置为不可读写,一旦访问则报错。 | -| 去能指定内存段锁保护 | LOS_LmsAddrDisableProtect | 为某段内存地址解锁,设置为可读写。 | +| 添加指定内存池被检测 | LOS_LmsCheckPoolAdd | 将指定内存池的地址范围添加到LMS的内存检测链表上,当访问的地址在链表范围内时,LMS才进行合法性校验;且LOS_MemInit接口会调用该接口,默认将初始化的内存池挂入到检测链表中。 | +| 删除指定内存池不被检测 | LOS_LmsCheckPoolDel | 不检测指定内存池地址范围内的合法性校验。 | +| 使能指定内存段锁保护 | LOS_LmsAddrProtect | 为某段内存地址上锁,设置为不可读写,一旦访问则报错。 | +| 去能指定内存段锁保护 | LOS_LmsAddrDisableProtect | 为某段内存地址解锁,设置为可读写。 | ### 用户态 @@ -61,19 +61,19 @@ OpenHarmony LiteOS-A内核的LMS模块提供下面几种功能,接口详细信 1. 配置LMS模块相关宏。 配置LMS控制宏LOSCFG_KERNEL_LMS,默认关,在kernel/liteos_a目录下执行 make update_config命令配置"Kernel->Enable Lite Memory Sanitizer"中打开YES: - | 宏 | menuconfig选项 | 含义 | 取值 | + | 宏 | menuconfig选项 | 含义 | 取值 | | -------- | -------- | -------- | -------- | - | LOSCFG_KERNEL_LMS | Enable Lms Feature | Lms模块的裁剪开关 | YES/NO | - | LOSCFG_LMS_MAX_RECORD_POOL_NUM | Lms check pool max num | LMS支持的检测内存池最大个数 | INT | - | LOSCFG_LMS_LOAD_CHECK | Enable lms read check | LMS内存读检测的裁剪开关 | YES/NO | - | LOSCFG_LMS_STORE_CHECK | Enable lms write check | LMS内存写检测的裁剪开关 | YES/NO | - | LOSCFG_LMS_CHECK_STRICT | Enable lms strict check, byte-by-byte | LMS内存逐字节严格检测的裁剪开关 | YES/NO | + | LOSCFG_KERNEL_LMS | Enable Lms Feature | Lms模块的裁剪开关 | YES/NO | + | LOSCFG_LMS_MAX_RECORD_POOL_NUM | Lms check pool max num | LMS支持的检测内存池最大个数 | INT | + | LOSCFG_LMS_LOAD_CHECK | Enable lms read check | LMS内存读检测的裁剪开关 | YES/NO | + | LOSCFG_LMS_STORE_CHECK | Enable lms write check | LMS内存写检测的裁剪开关 | YES/NO | + | LOSCFG_LMS_CHECK_STRICT | Enable lms strict check, byte-by-byte | LMS内存逐字节严格检测的裁剪开关 | YES/NO | 2. 在被检测模块的编译脚本中,修改编译选项。 增加LMS检测编译选项-fsanitize=kernel-address。为避免编译器优化,增加-O0编译选项。 gcc与clang编译选项存在差异,参照如下示例: - + ``` if ("$ohos_build_compiler_specified" == "gcc") { cflags_c = [ @@ -105,14 +105,15 @@ OpenHarmony LiteOS-A内核的LMS模块提供下面几种功能,接口详细信 2. 构造内存溢出错误和释放后使用错误。 -3. 添加-fsanitize=kernel-address后编译执行,观察输出结果 +3. 添加-fsanitize=kernel-address后编译执行,观察输出结果。 #### 内核态示例代码 + 该示例代码的测试函数可以加在 kernel /liteos_a/testsuites /kernel /src /osTest.c 中的 TestTaskEntry 中进行测试。 实例代码如下: - -``` + +```c #define PAGE_SIZE (0x1000U) #define INDEX_MAX 20 UINT32 g_lmsTestTaskId; @@ -138,31 +139,32 @@ static VOID LmsTestUseAfterFree(VOID) PRINTK("\n######%s start ######\n", __FUNCTION__); UINT32 i; CHAR *str = (CHAR *)LOS_MemAlloc(g_testLmsPool, INDEX_MAX); - LOS_MemFree(g_testLmsPool, str); + (VOID)LOS_MemFree(g_testLmsPool, str); PRINTK("str[%2d]=0x%2x ", 0, str[0]); /* trigger use after free at str[0] */ PRINTK("\n######%s stop ######\n", __FUNCTION__); } VOID LmsTestCaseTask(VOID) -{ +{ testPoolInit(); LmsTestOsmallocOverflow(); LmsTestUseAfterFree(); } -UINT32 Example_Lms_test(VOID){ - UINT32 ret; - TSK_INIT_PARAM_S lmsTestTask; - /* 创建用于lms测试的任务 */ - memset(&lmsTestTask, 0, sizeof(TSK_INIT_PARAM_S)); +UINT32 Example_Lms_test(VOID) +{ + UINT32 ret; + TSK_INIT_PARAM_S lmsTestTask; + /* 创建用于lms测试的任务 */ + memset(&lmsTestTask, 0, sizeof(TSK_INIT_PARAM_S)); lmsTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)LmsTestCaseTask; - lmsTestTask.pcName = "TestLmsTsk"; /* 测试任务名称 */ - lmsTestTask.uwStackSize = 0x800; - lmsTestTask.usTaskPrio = 5; - lmsTestTask.uwResved = LOS_TASK_STATUS_DETACHED; - ret = LOS_TaskCreate(&g_lmsTestTaskId, &lmsTestTask); - if(ret != LOS_OK){ - PRINT_ERR("LmsTestTask create failed .\n"); - return LOS_NOK; - } + lmsTestTask.pcName = "TestLmsTsk"; /* 测试任务名称 */ + lmsTestTask.uwStackSize = 0x800; // 0x800: lms test task stack size + lmsTestTask.usTaskPrio = 5; // 5: lms test task priority + lmsTestTask.uwResved = LOS_TASK_STATUS_DETACHED; + ret = LOS_TaskCreate(&g_lmsTestTaskId, &lmsTestTask); + if (ret != LOS_OK) { + PRINT_ERR("LmsTestTask create failed .\n"); + return LOS_NOK; + } return LOS_OK; } LOS_MODULE_INIT(Example_Lms_test, LOS_INIT_LEVEL_KMOD_EXTENDED); @@ -172,7 +174,7 @@ LOS_MODULE_INIT(Example_Lms_test, LOS_INIT_LEVEL_KMOD_EXTENDED); #### 内核态结果验证 输出结果如下: - + ``` ######LmsTestOsmallocOverflow start ###### [ERR][KProcess:LmsTestCaseTask]* Kernel Address Sanitizer Error Detected Start * @@ -257,9 +259,9 @@ str[ 0]=0x 0 ### 用户态开发流程 -在待检测的app编译脚本中,添加如下参数即可, 完整示例可参见/kernel/liteos_a/apps/lms/BUILD.gn。 +在待检测的app编译脚本中,添加如下参数即可, 完整示例可参见 [/kernel/liteos_a/apps/lms/BUILD.gn](https://gitee.com/openharmony/kernel_liteos_a/blob/master/apps/lms/BUILD.gn)。 + - ``` if ("$ohos_build_compiler_specified" == "gcc") { cflags_c = [ @@ -308,14 +310,14 @@ if ("$ohos_build_compiler_specified" == "gcc") { 1. 构造内存溢出错误和释放后使用错误。 -2. 添加对应编译选项后,重新编译执行 +2. 添加对应编译选项后,重新编译执行。 #### 用户态示例代码 实例代码如下: - -``` + +```c static void BufWriteTest(void *buf, int start, int end) { for (int i = start; i <= end; i++) { @@ -332,7 +334,7 @@ static void BufReadTest(void *buf, int start, int end) static void LmsMallocTest(void) { printf("\n-------- LmsMallocTest Start --------\n"); - char *buf = (char *)malloc(16); + char *buf = (char *)malloc(16); // 16: buffer size for test BufReadTest(buf, -1, 16); free(buf); printf("\n-------- LmsMallocTest End --------\n"); @@ -340,7 +342,7 @@ static void LmsMallocTest(void) static void LmsFreeTest(void) { printf("\n-------- LmsFreeTest Start --------\n"); - char *buf = (char *)malloc(16); + char *buf = (char *)malloc(16); // 16: buffer size for test free(buf); BufReadTest(buf, 1, 1); free(buf); @@ -349,7 +351,7 @@ static void LmsFreeTest(void) int main(int argc, char * const * argv) { printf("\n############### Lms Test start ###############\n"); - char *tmp = (char *)malloc(5000); + char *tmp = (char *)malloc(5000); // 5000: temp buffer size LmsMallocTest(); LmsFreeTest(); printf("\n############### Lms Test End ###############\n"); @@ -360,7 +362,7 @@ int main(int argc, char * const * argv) #### 用户态结果验证 输出结果如下: - + ``` * Lite Memory Sanitizer Error Detected * Heap buffer overflow error detected! diff --git a/zh-cn/device-dev/kernel/kernel-small-start-kernel.md b/zh-cn/device-dev/kernel/kernel-small-start-kernel.md index 0606d6136ad377b1f2d1523e0195d5d515419440..b3c404db571376ac13c774c4c711313f4822485d 100644 --- a/zh-cn/device-dev/kernel/kernel-small-start-kernel.md +++ b/zh-cn/device-dev/kernel/kernel-small-start-kernel.md @@ -3,7 +3,7 @@ ## 内核启动流程 -内核启动流程包含汇编启动阶段和C语言启动阶段2部分,如图1所示。汇编启动阶段完成CPU初始设置,关闭dcache/icache,使能FPU及neon,设置MMU建立虚实地址映射,设置系统栈,清理bss段,调用C语言main函数等。C语言启动阶段包含OsMain函数及开始调度等,其中如上图所示,OsMain函数用于内核基础初始化和架构、板级初始化等,其整体由内核启动框架主导初始化流程,图中右边区域为启动框架中可接受外部模块注册启动的阶段,各个阶段的说明如下表1所示。 +内核启动流程包含汇编启动阶段和C语言启动阶段2部分,如图1所示。汇编启动阶段完成CPU初始设置,关闭dcache/icache,使能FPU及neon,设置MMU建立虚实地址映射,设置系统栈,清理bss段,调用C语言main函数等。C语言启动阶段包含OsMain函数及开始调度等,其中如图1所示,OsMain函数用于内核基础初始化和架构、板级初始化等,其整体由内核启动框架主导初始化流程,图中右边区域为启动框架中可接受外部模块注册启动的阶段,各个阶段的说明如下表1所示。 **图1** 内核启动流程图 @@ -12,24 +12,25 @@ **表1** 启动框架层级 -| 层级 | 说明 | +| 层级 | 说明 | | -------- | -------- | -| LOS_INIT_LEVEL_EARLIEST | 最早期初始化
说明:不依赖架构,单板以及后续模块会对其有依赖的纯软件模块初始化
例如:Trace模块 | -| LOS_INIT_LEVEL_ARCH_EARLY | 架构早期初始化
说明:架构相关,后续模块会对其有依赖的模块初始化,如启动过程中非必需的功能,建议放到LOS_INIT_LEVEL_ARCH层 | -| LOS_INIT_LEVEL_PLATFORM_EARLY | 平台早期初始化
说明:单板平台、驱动相关,后续模块会对其有依赖的模块初始化,如启动过程中必需的功能,建议放到LOS_INIT_LEVEL_PLATFORM层
例如:uart模块 | -| LOS_INIT_LEVEL_KMOD_PREVM | 内存初始化前的内核模块初始化
说明:在内存初始化之前需要使能的模块初始化 | -| LOS_INIT_LEVEL_VM_COMPLETE | 基础内存就绪后的初始化
说明:此时内存初始化完毕,需要进行使能且不依赖进程间通讯机制与系统进程的模块初始化
例如:共享内存功能 | -| LOS_INIT_LEVEL_ARCH | 架构后期初始化
说明:架构拓展功能相关,后续模块会对其有依赖的模块初始化 | -| LOS_INIT_LEVEL_PLATFORM | 平台后期初始化
说明:单板平台、驱动相关,后续模块会对其有依赖的模块初始化
例如:驱动内核抽象层初始化(mmc、mtd) | -| LOS_INIT_LEVEL_KMOD_BASIC | 内核基础模块初始化
说明:内核可拆卸的基础模块初始化
例如:VFS初始化 | -| LOS_INIT_LEVEL_KMOD_EXTENDED | 内核扩展模块初始化
说明:内核可拆卸的扩展模块初始化
例如:系统调用初始化、ProcFS初始化、Futex初始化、HiLog初始化、HiEvent初始化、LiteIPC初始化 | -| LOS_INIT_LEVEL_KMOD_TASK | 内核任务创建
说明:进行内核任务的创建(内核任务,软件定时器任务)
例如:资源回收系统常驻任务的创建、SystemInit任务创建、CPU占用率统计任务创建 | +| LOS_INIT_LEVEL_EARLIEST | 最早期初始化
说明:不依赖架构,单板以及后续模块会对其有依赖的纯软件模块初始化
例如:Trace模块 | +| LOS_INIT_LEVEL_ARCH_EARLY | 架构早期初始化
说明:架构相关,后续模块会对其有依赖的模块初始化,如启动过程中非必需的功能,建议放到LOS_INIT_LEVEL_ARCH层 | +| LOS_INIT_LEVEL_PLATFORM_EARLY | 平台早期初始化
说明:单板平台、驱动相关,后续模块会对其有依赖的模块初始化,如启动过程中必需的功能,建议放到LOS_INIT_LEVEL_PLATFORM层
例如:uart模块 | +| LOS_INIT_LEVEL_KMOD_PREVM | 内存初始化前的内核模块初始化
说明:在内存初始化之前需要使能的模块初始化 | +| LOS_INIT_LEVEL_VM_COMPLETE | 基础内存就绪后的初始化
说明:此时内存初始化完毕,需要进行使能且不依赖进程间通讯机制与系统进程的模块初始化
例如:共享内存功能 | +| LOS_INIT_LEVEL_ARCH | 架构后期初始化
说明:架构拓展功能相关,后续模块会对其有依赖的模块初始化 | +| LOS_INIT_LEVEL_PLATFORM | 平台后期初始化
说明:单板平台、驱动相关,后续模块会对其有依赖的模块初始化
例如:驱动内核抽象层初始化(mmc、mtd) | +| LOS_INIT_LEVEL_KMOD_BASIC | 内核基础模块初始化
说明:内核可拆卸的基础模块初始化
例如:VFS初始化 | +| LOS_INIT_LEVEL_KMOD_EXTENDED | 内核扩展模块初始化
说明:内核可拆卸的扩展模块初始化
例如:系统调用初始化、ProcFS初始化、Futex初始化、HiLog初始化、HiEvent初始化、LiteIPC初始化 | +| LOS_INIT_LEVEL_KMOD_TASK | 内核任务创建
说明:进行内核任务的创建(内核任务,软件定时器任务)
例如:资源回收系统常驻任务的创建、SystemInit任务创建、CPU占用率统计任务创建 | +| LOS_INIT_LEVEL_FINISH | 内核初始化完成 | ## 编程样例 - **实例描述** + **实例描述** 新增一个内核模块,需要在内核初始化时进行该模块的初始化,则通过内核启动框架将该模块的初始化函数注册进内核启动流程中。 @@ -37,8 +38,8 @@ **示例代码** - -``` + +```c /* 内核启动框架头文件 */ #include "los_init.h" ...... @@ -58,7 +59,7 @@ LOS_MODULE_INIT(OsSampleModInit, LOS_INIT_LEVEL_KMOD_EXTENDED); **结果验证** - + ``` main core booting up... OsSampleModInit SUCCESS! @@ -73,5 +74,5 @@ cpu 0 entering scheduler > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > 启动框架中同一层级内的注册模块不能有依赖关系,建议新增模块按照上述启动阶段进行模块初始化的拆分,按需注册启动。 -> +> > 可通过查看系统编译生成文件OHOS_Image.map中.rodata.init.kernel.\*段内的符号表来了解当前已注册进内核启动框架中的各个模块初始化入口,以及检查新注册的模块初始化入口是否生效。 diff --git a/zh-cn/device-dev/kernel/kernel-small-start-user.md b/zh-cn/device-dev/kernel/kernel-small-start-user.md index dcbd07fbcc501b04214691a8dd92e477da505188..ffef4f2e6e98ca0ab771278e8d324dd21639237b 100644 --- a/zh-cn/device-dev/kernel/kernel-small-start-user.md +++ b/zh-cn/device-dev/kernel/kernel-small-start-user.md @@ -15,7 +15,7 @@ 使用链接脚本将如下init启动代码放置到系统镜像指定位置。 -``` +```c #define LITE_USER_SEC_ENTRY __attribute__((section(".user.entry"))) LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args) { @@ -27,6 +27,8 @@ LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args) } ``` +> 上述启动代码在 kernel/liteos_a/kernel/user/src/los_user_init.c 中,g_initPath 根据启动设置的不同,其值为 /dev/shm/init 或 /bin/init。 + 系统启动阶段,OsUserInitProcess启动init进程。具体过程如下: 1. 由内核OsLoadUserInit加载上述代码。 @@ -48,7 +50,7 @@ LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args) 用户态程序启动有如下常见方式: - shell命令启动进程。 - + ``` OHOS $ exec helloworld OHOS $ ./helloworld