开发示例
本章节指导开发者修改默认外部设备配置。
操作步骤
- 将om-sdk.tar.gz中的配置模板“software/ibma/lib/Linux/config/device_config.json”拷贝到“{project_dir}/src/app/add_extend_device”目录下。
- 按照实际需求,修改device_config.json配置文件。
{ "primary_partitions": [ 1, 2, 3, 4, 5 ], "usb_hub_id": "0bda:5411", "extend_info": { "u-disk": [ { "platform": "a5080000.hiusbc1", "location": "usb2", "name": "u-disk2" }, { "platform": "a5100000.hiusbc2", "location": "usb1", "name": "u-disk1" }, { "platform": "a5180000.hiusbc3", "location": "usb0", "name": "u-disk0" } ], "eMMC": [ { "platform": "82000000.sdhci0", "location": "eMMC1", "name": "eMMC" }, { "platform": "82010000.sdhci1", "location": "SDIO1", "name": "SD-card" } ], "DISK": [ { "platform": "a6000000.sata", "device": "0:0:0:0", "location": "PCIE-0", "name": "disk m.2" }, { "platform": "a6000000.sata", "device": "1:0:0:0", "location": "PCIE-1", "name": "disk0" }, { "platform": "a6000000.sata", "device": "2:0:0:0", "location": "PCIE-2", "name": "disk1" } ], "ethnet": [ { "platform": "a7100000.xge0", "location": "PORT1", "name": "eth0" }, { "platform": "a7200000.xge1", "location": "PORT2", "name": "eth1" } ] } }
- 使用配置文件检查脚本validate_device_config.py对修改后的配置文件进行检查,验证配置文件的是否正确。
cd src/app/add_extend_device python3 vaidate_device_config.py
validate_device_config.py脚本内容参考如下:
import json import re from pathlib import Path CFG_FILE = Path(__file__).parent.joinpath("device_config.json") MAX_SIZE_BYTES = 1 * 1024 * 1024 MAX_PARTITION_NUM = 16 DEV_CLS = "eMMC", "u-disk", "ethnet", "DISK" NAME_PATTERN = r"^[a-zA-Z0-9\-\_\s\.]{2,64}$" def validate(): assert CFG_FILE.stat().st_size < MAX_SIZE_BYTES, f"size of config should less than {MAX_SIZE_BYTES} bytes." cfg = json.loads(CFG_FILE.read_text()) assert isinstance(cfg, dict), "config must be json format." validate_primary_partitions(cfg) validate_extend_info(cfg) def validate_primary_partitions(cfg: dict): parts = cfg.get("primary_partitions") assert isinstance(parts, list), "primary_partitions must be a list." assert 1 <= len(parts) <= MAX_PARTITION_NUM, f"number of partitions should be in range [1, {MAX_PARTITION_NUM}]." for part in parts: assert isinstance(part, int), f"partition number {part} is not of int type." def validate_extend_info(cfg: dict): extend_info = cfg.get("extend_info") assert isinstance(extend_info, dict), "extend_info must be a dict." locations = set() for cls, devices in extend_info.items(): assert cls in DEV_CLS, f"class of {cls} not supported." assert isinstance(devices, list), f"the value of {cls} must be a list." for index, device in enumerate(devices): assert isinstance(device, dict), f"{cls}.{index} is not a dict." platform = device.get("platform") assert isinstance(platform, str) and platform, f"{cls}.{index}.{platform} is not a valid string." location = device.get("location") assert isinstance(location, str) and location, f"{cls}.{index}.{location} is not a valid string." assert location not in locations, f"location of {location} is duplicated." locations.add(location) name = device.get("name") find_iter = re.fullmatch(NAME_PATTERN, name) assert all(( isinstance(name, str), 2 <= len(name) <= 64, find_iter and find_iter.group(0) == name )), rf"{cls}.{index}.{name} is invalid, just support 'A-Za-z0-9\-\_\.' and length in range [2, 64]" if __name__ == '__main__': validate() print("validate device config success.")
- 在“{project_dir}/build/build.sh”中,实现拷贝配置文件的代码。
cp -rf "${TOP_DIR}"/src/app/add_extend_device/device_config.json "${OMSDK_TAR_PATH}"/software/ibma/lib/Linux/config/device_config.json
父主题: 配置外部设备