syspara Module

Introduction

This module provides an easy-to-use key-value pair access interface for system services to configure service functions based on their own system parameters. The following figure shows the basic primitives used to access and operate system parameters.

Figure 1 Operation primitives for system parameters

Table 1 Description of operation primitives

Primitive

Description

get

Obtains the value of a system parameter.

set

Sets the value of a system parameter.

wait

Waits for value change of a system parameter synchronously.

watch

Observes value change of a system parameter asynchronously.

A system parameter name consists of multiple segments in dotted notation. Each segment consists of letters, digits, and underscores (_). The total length cannot exceed 96 bytes. System parameter names are categorized into the following two types.

Table 2 Naming of system parameters

Type

Name

Example

Description

Parameter name

Parameter Name

const.product.name

Complete system parameter name. It does not end with a period (.).

Parameter directory

Parameter Directory

const.product.

Name of the directory storing system parameters with the same prefix. It ends with a period (.).

System parameters are categorized into three types.

Table 3 System parameter types

Type

Prefix

Description

Constant

const.

Constant parameter, which will not be changed once a value is assigned. The value can contain a maximum of 4,096 bytes (including the terminator).

Writable

Others

Writable parameter, which will be lost after system restart. The value can contain a maximum of 96 bytes (including the terminator).

Persistent

persist.

Writable and persistent parameter, which will not be lost after system restart. The value can contain a maximum of 96 bytes (including the terminator).

The naming format of system parameters is as follows: [const|persist].$sub_system.$desc.

$sub_system is the name of the subsystem or module.

$desc indicates the description of a system parameter. The description can contain multiple segments in dotted notation.

System Parameter Definition Rules

Each subsystem defines the system parameters of its own modules, including the system parameter name, default value, and access permission information.

System Parameter Value Definition File

The system parameter value definition file ends with the .para extension. An example of the file format is as follows:

# This is comment
const.product.name=OHOS-PRODUCT
const.os.version.api=26
const.telephony.enable=false|true

const.test.withblank=My Value

Note: System parameter values do not support comments and line breaks.

# Not supported
const.test.withcomment=MyValue # This should be ommitted
# Not supported
const.test.multiline="This is a multiline parameter.
Line2 value.
Last line."

You must use a complete system parameter command when assigning a value for a system parameter. The following table describes the value assignment modes.

Table 4 Value assignment modes

Type

Example

Description

String

const.product.name=OHOS-PRODUCT

Multi-line character strings and comments are not supported.

Number

const.os.version.api=26

Numbers do not need to be enclosed in quotation marks.

Boolean

const.telephony.enable=false

A Boolean value can be 0, 1, false, or true.

System Parameter DAC Definition File

Currently, access permissions of system parameters are managed in Discretionary Access Control (DAC) mode. The access permission definition file ends with the .para.dac extension. The following is an example:

const.product.="root:root:660"

As shown above, we can use parameter directory to define the same access permission for system parameters with the same prefix. The DAC information is divided into three segments, user, group, and UGO rule information, which are separated using a semicolon (:).

The following figure shows the structure of the UGO rule information.

Figure 2 Rule information

Installation of the System Parameter Definition File

The .para and .para.dac files are installed in the /etc/param/ directory. An example of the GN script is as follows:

ohos_prebuilt_etc("ohos.para") {
    source = "//base/startup/init_lite/services/etc/ohos.para"
    part_name = "init"
    module_install_dir = "etc/param"
}

ohos_prebuilt_etc("ohos.para.dac") {
    source = "//base/startup/init_lite/services/etc/ohos.para.dac"
    part_name = "init"
    module_install_dir = "etc/param"
}

Loading Sequence of the System Parameter Value Definition File

The following table provides the sequence of loading system parameter value definition files.

Table 5 Sequence of loading system parameter value definition files

Type

Directory

Description

Kernel parameters

/proc/cmdline

In kernel parameters, ohospara.xxx=valXXX is converted to ohos.boot.xxx=valXXX.

OS constants

/system/etc/param/ohos_const/*.para

The definition file containing OS constants is preferentially loaded.

System parameters in the vendor directory

/vendor/etc/param/*.para

The definition file containing system parameters in the vendor directory is loaded with the secondary priority. It can overwrite the definition file containing system parameters in the system directory.

System parameters in the system directory

/system/etc/param/*.para

The definition file containing system parameters in the system directory is last loaded. If a system parameter value already exists in the file, it will be ignored.

Usage of Shell Commands

The following table describes the shell commands used to set system parameters.

Table 6 Description of shell commands

Command

Description

param get [key]

Obtains the system parameter value of the specified key. If no key name is specified, all system parameter values will be returned.

param set key value

Sets the specified value for the specified key.

param wait key value

Waits for the system parameter value of the specified key to match the specified value. Fuzzy match is supported. For example, * indicates any value, and val* indicates matching of only the first three val characters.

param dump

Displays the statistics of system parameters.

Available APIs

Table 7 APIs for the syspara module

API

Description

int GetParameter(const char* key, const char* def, char* value, unsigned int len)

Obtains a system parameter.

int SetParameter(const char* key, const char* value)

Sets or updates a system parameter.

const char* GetDeviceType(void)

Obtains the device type.

const char* GetManufacture(void)

Obtains the device manufacturer.

const char* GetBrand(void)

Obtains the device brand.

const char* GetMarketName(void)

Obtains the device marketing name.

const char* GetProductSeries(void)

Obtains the device series name.

const char* GetProductModel(void)

Obtains the device authentication model.

const char* GetSoftwareModel(void)

Obtains the device software model.

const char* GetHardwareModel(void)

Obtains the device hardware model.

const char* GetHardwareProfile(void)

Obtains the device hardware profile.

const char* GetSerial(void)

Obtains the device serial number (SN).

const char* GetOSFullName(void)

Obtains the operating system name.

const char* GetDisplayVersion(void)

Obtains the software version visible to users.

const char* GetBootloaderVersion(void)

Obtains the bootloader version of this device.

const char* GetSecurityPatchTag(void)

Obtains the security patch tag.

const char* GetAbiList(void)

Obtains the list of application binary interfaces (ABIs) supported on this device.

int GetSdkApiVersion(void)

Obtains the SDK API version that matches the current system software.

int GetFirstApiVersion(void)

Obtains the first SDK API version of the system software.

const char* GetIncrementalVersion(void)

Obtains the incremental version.

const char* GetVersionId(void)

Obtains the version ID.

const char* GetBuildType(void)

Obtains the build type.

const char* GetBuildUser(void)

Obtains the build account user name.

const char* GetBuildHost(void)

Obtains the build host name.

const char* GetBuildTime(void)

Obtains the build time.

const char* GetBuildRootHash(void)

Obtains the buildroot hash value of this version.

const char* GetOsReleaseType(void)

Obtains the system release type.

int GetDevUdid(char *udid, int size)

Obtains the device identifier (UDID).

How to Use

The following is an example of using syspara.

// set && get
char key1[] = "rw.sys.version";
char value1[] = "10.1.0";
int ret = SetParameter(key1, value1);
char valueGet1[128] = {0};
ret = GetParameter(key1, "version=10.1.0", valueGet1, 128);

// get sysparm
char* value1 = GetDeviceType();
printf("Product type =%s\n", value1);
free(value1);
char* value2 = GetManufacture();
printf("Manufacture =%s\n", value2);
free(value2);
char* value3 = GetBrand();
printf("GetBrand =%s\n", value3);
free(value3);
char* value4 = GetMarketName();
printf("MarketName =%s\n", value4);
free(value4);
char* value5 = GetProductSeries();
printf("ProductSeries =%s\n", value5);
free(value5);
char* value6 = GetProductModel();
printf("ProductModel =%s\n", value6);
free(value6);
char* value7 = GetSoftwareModel();
printf("SoftwareModel =%s\n", value7);
free(value7);
char* value8 = GetHardwareModel();
printf("HardwareModel =%s\n", value8);
free(value8);
char* value9 = GetHardwareProfile();
printf("Software profile =%s\n", value9);
free(value9);
char* value10 = GetSerial();
printf("Serial =%s\n", value10);
free(value10);
char* value11 = GetOSFullName();
printf("OS name =%s\n", value11);
free(value11);
char* value12 = GetDisplayVersion();
printf("Display version =%s\n", value12);
free(value12);
char* value13 = GetBootloaderVersion();
printf("bootloader version =%s\n", value13);
free(value13);
char* value14 = GetSecurityPatchTag();
printf("secure patch level =%s\n", value14);
free(value14);
char* value15 = GetAbiList();
printf("abi list =%s\n", value15);
free(value15);
int value16 = GetFirstApiVersion();
printf("first api level =%d\n", value16);
free(value16);
char* value17 = GetIncrementalVersion();
printf("Incremental version = %s\n", value17);
free(value17);
char* value18 = GetVersionId();
printf("formal id =%s\n", value18);
free(value18);
char* value19 = GetBuildType();
printf("build type =%s\n", value19);
free(value19);
char* value20 = GetBuildUser();
printf("build user =%s\n", value20);
free(value20);
char* value21 = GetBuildHost();
printf("Build host = %s\n", value21);
free(value21);
char* value22 = GetBuildTime();
printf("build time =%s\n", value22);
free(value22);
char* value23 = GetBuildRootHash();
printf("build root later..., %s\n", value23);
free(value23);
char* value24 = GetOsReleaseType();
printf("OS release type =%s\n", value24);
free(value24);
char* value25 = GetOsReleaseType();
printf("OS release type =%s\n", value25);
free(value25);
char value26[65] = {0};
GetDevUdid(value26, 65);
printf("device udid =%s\n", value26);
free(value26);