| options | [HuksOptions](#huksoptions) | Yes | Tags required for generating the key. |
| options | [HuksOptions](#huksoptions) | Yes | Tags required for generating the key. |
| callback | AsyncCallback\<[HuksResult](#huksresult)> | Yes | Callback used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If any other result is returned, see **HuksResult**.|
| callback | AsyncCallback\<[HuksResult](#huksresult)> | Yes | Callback used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If the operation fails, an error code defined in **HuksResult** will be returned.|
**Example**
**Example**
...
@@ -402,7 +402,7 @@ huks.generateKey(keyAlias, options, function (err, data){});
...
@@ -402,7 +402,7 @@ huks.generateKey(keyAlias, options, function (err, data){});
| callback | AsyncCallback\<[HuksResult](#huksresult)> | Yes | Callback used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If the operation fails, an error code will be returned. For details about the error codes, see **HuksResult**.|
| callback | AsyncCallback\<[HuksResult](#huksresult)> | Yes | Callback used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If the operation fails, an error code will be returned.|
**Example**
**Example**
...
@@ -480,7 +480,7 @@ huks.deleteKey(keyAlias, emptyOptions, function (err, data) {});
...
@@ -480,7 +480,7 @@ huks.deleteKey(keyAlias, emptyOptions, function (err, data) {});
| keyAlias | string | Yes | Key alias, which is used to hold the key pair.|
| keyAlias | string | Yes | Key alias, which is used to hold the key pair.|
| options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and key pair to import.|
| options | [HuksOptions](#huksoptions) | Yes | Tags required for the import and key pair to import.|
| callback | AsyncCallback\<[HuksResult](#huksresult)> | Yes | Callback used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If the operation fails, an error code will be returned. For details about the error codes, see **HuksResult**.|
| callback | AsyncCallback\<[HuksResult](#huksresult)> | Yes | Callback used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If the operation fails, an error code will be returned.|
**Example**
**Example**
...
@@ -600,7 +600,7 @@ huks.importKey(keyAlias, options, function (err, data){});
...
@@ -600,7 +600,7 @@ huks.importKey(keyAlias, options, function (err, data){});
| Promise\<[HuksResult](#huksresult)> | Promise used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If the operation fails, an error code will be returned. For details about the error codes, see **HuksResult**.<br/>**outData** contains the public key exported.|
| Promise\<[HuksResult](#huksresult)> | Promise used to return the result. If the operation is successful, **HUKS_SUCCESS** will be returned. If the operation fails, an error code will be returned. **outData** contains the public key exported.|
**Example**
**Example**
...
@@ -724,7 +724,7 @@ var result = huks.exportKey(keyAlias, emptyOptions);
...
@@ -724,7 +724,7 @@ var result = huks.exportKey(keyAlias, emptyOptions);
1. Add the touchscreen driver-related descriptions.
1. Add the touchscreen driver-related descriptions.
Currently, the input driver is developed based on the HDF and is loaded and started by the HDF. Register the driver information, such as whether to load the driver and the loading priority in the configuration file. Then, the HDF starts the registered driver modules one by one. For details about the driver configuration, see [Driver Development](driver-hdf-development.md#how-to-develop).
Currently, the input driver is developed based on the HDF and is loaded and started by the HDF. Register the driver information, such as whether to load the driver and the loading priority in the configuration file. Then, the HDF starts the registered driver modules one by one. For details about the driver configuration, see [How to Develop](driver-hdf-development.md#how-to-develop).
2. Complete the board-level configuration and private data configuration of the touchscreen.
2. Complete the board-level configuration and private data configuration of the touchscreen.
It is considered best practice to learn the following basic concepts before you start building:
- Platform
A combination of development boards and kernels. Supported subsystems and components vary with the platform.
- Subsystem
OpenHarmony is designed with a layered architecture, which consists of the kernel layer, system service layer, framework layer, and application layer from the bottom up. System functions are developed by the level of system, subsystem, and component. In a multi-device deployment scenario, you can customize subsystems and components as required. A subsystem is a logical concept and is a flexible combination of components.
- Component
A component is a reusable software unit that contains source code, configuration files, resource files, and build scripts. A component can be built independently, integrated in binary mode, and then tested independently.
- GN
GN is a system used to generate build files for Ninja.
- Ninja
Ninja is a small high-speed build system.
## Working Principles<a name="section193961322175011"></a>
The compilation and build process of OpenHarmony is as follows:
- Parsing commands: Parse the name of the product to build and load related configurations.
- Running GN: Configure the toolchain and global options based on the parsed product name and compilation type.
- Running Ninja: Start building and generate a product distribution.
## Building a Mini or Small System<a name="section119041639115811"></a>
See [build\_lite](https://gitee.com/openharmony/build_lite/blob/master/README.md).
## Building a Standard System<a name="section8750514195912"></a>