提交 9c5e2df1 编写于 作者: D duangavin123

3.1Beta-update

Signed-off-by: Nduangavin123 <duanxichao@huawei.com>
上级 b54b18df
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
/**
* @addtogroup ADC
* @{
*
* @brief 定义用于模/数转换器驱动程序开发的标准ADC API。
* 此ADC模块抽象了不同系统平台的ADC功能,以提供稳定的API,用于模/数转换器驱动程序开发。您可以使用此模块获取/释放ADC设备句柄。
*
* @since 1.0
*/
/**
* @file adc_if.h
*
* @brief 声明标准ADC接口函数。
*
* @since 1.0
*/
#ifndef ADC_IF_H
#define ADC_IF_H
#include "hdf_platform.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
struct AdcIoMsg {
/** ADC设备号 */
uint32_t number;
/** ADC设备通道号 */
uint32_t channel;
};
/**
* @brief 获取ADC设备的句柄。
* 在访问ADC设备之前,必须调用此函数。
*
* @param number ADC设备ID。
*
* @return 如果操作成功,则返回指向ADC设备的DevHandle的指针;否则返回NULL。
*
* @since 1.0
*/
DevHandle AdcOpen(uint32_t number);
/**
* @brief 释放ADC设备的句柄。
* 如果不再需要访问ADC设备,则应调用此函数关闭其句柄,以便释放未使用的内存资源。
*
* @param handle 指向通过{@link AdcOpen}获得的ADC设备的设备句柄的指针。
*
* @since 1.0
*/
void AdcClose(DevHandle handle);
/**
* @brief 从ADC设备读取指定大小的数据。
*
* @param handle 指向通过{@link AdcOpen}获得的ADC设备的设备句柄的指针。
* @param channel ADC设备通道。
* @param val 指向存储读出数据指针。
*
* @return 如果操作成功,则返回0;否则返回负值。
* @since 1.0
*/
int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* ADC_IF_H */
此差异已折叠。
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
/**
* @addtogroup I3C
* @{
*
* @brief 提供改进的Improved Inter-Integrated Circuit (I3C)接口。
* 该模块允许驱动程序在I3C控制器上执行操作,以访问I3C总线上的设备。
* 包括创建和销毁I3C控制器句柄以及读取和写入数据。
*
* @since 1.0
*/
/**
* @file i3c_if.h
*
* @brief 声明标准I3C接口函数。
*
* @since 1.0
*/
#ifndef I3C_IF_H
#define I3C_IF_H
#include "hdf_platform.h"
#include "i3c_ccc.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
enum TransMode {
/** I2C传输模式 */
I2C_MODE = 0,
/** I3C传输模式 */
I3C_MODE,
/** CCC(通用命令代码)模式 */
CCC_CMD_MODE,
};
enum I3cBusMode {
/** 单数据速率模式 */
I3C_BUS_SDR_MODE = 0,
/** 高数据速率模式 */
I3C_BUS_HDR_MODE,
};
/**
* @brief 定义I3C控制器的配置。
*
* @since 1.0
*/
struct I3cConfig {
/** I3C总线模式 */
enum I3cBusMode busMode;
/** 当前主设备,当控制器是主设备时,其为NULL */
struct I3cDevice *curMaster;
};
/**
* @brief 定义I3C传输、I2C传输或发送CCC(通用命令代码)期间使用的I3C传输消息。
*
* @attention 此结构不限制len指定的数据传输长度,允许的最大长度由特定控制器确定。
* 设备地址addr表示原始设备地址,不需要包含读/写标志位。
* @since 1.0
*/
struct I3cMsg {
/** 目标设备的地址 */
uint16_t addr;
/** 用于存储传输数据的缓冲区地址 */
uint8_t *buf;
/** 传输数据的长度 */
uint16_t len;
/**
* 传输模式标志 | 说明
* ------------| -----------------------
* I2C_FLAG_READ | 读标志
* I2C_FLAG_READ_NO_ACK | 无确认读取标志
* I2C_FLAG_IGNORE_NO_ACK | 忽略无确认标志
* I2C_FLAG_NO_START | 无启动条件标志
* I2C_FLAG_STOP | 停止条件标志
*/
uint16_t flags;
/** 传输模式选择,默认为I2C_MODE */
enum TransMode mode;
/** CCC(通用命令代码)结构,用于CCC_CMD_MODE传输模式 */
struct I3cCccCmd *ccc;
/** I3C错误代码,由驱动程序更新 */
uint16_t err;
};
/**
* @brief 定义I3C IBI(带内中断)的数据。
*
* @attention 生成IBI时,IBI函数中的有效载荷和buf可获得IBI数据。
*
* @since 1.0
*/
struct I3cIbiData {
/** 有效载荷数据长度。IBI有效负载数据的长度。当IBI已生成,读取时请勿修改。 */
uint32_t payload;
/** 数据缓冲区。有效负载数据的指针。 */
uint8_t *buf;
};
enum I3cFlag {
/** 读标志。值1表示读取操作,0表示写入操作。 */
I3C_FLAG_READ = (0x1 << 0),
/** 无ACK读标志。值1表示在读取过程中没有发送ACK信号。 */
I3C_FLAG_READ_NO_ACK = (0x1 << 11),
/** 忽略ACK标志。值1表示忽略非ACK信号。 */
I3C_FLAG_IGNORE_NO_ACK = (0x1 << 12),
/** 无启动条件标志。值1表示消息没有启动条件转移。 */
I3C_FLAG_NO_START = (0x1 << 14),
/** 停止条件标志。值1表示当前传输以停止条件结束。 */
I3C_FLAG_STOP = (0x1 << 15),
};
/**
* @brief IBI(带内中断)回调函数。
* 使用{@link I3cRequestIbi}将其连接到I3C设备。
*
* @param handle 指向通过{@link I3cOpen}获得的I3C控制器句柄的指针。
* @param addr 重新设置IBI(带内中断)的设备地址。
* @param data IBI的数据结构。
*
* @return 如果操作成功,则返回0;否则返回负值。
* @since 1.0
*/
typedef int32_t (*I3cIbiFunc)(DevHandle handle, uint16_t addr, struct I3cIbiData data);
/**
* @brief 获取I3C控制器的句柄。
* 在访问I3C总线之前,必须调用此函数。
*
* @param number I3C控制器ID。
*
* @return 如果操作成功,则返回指向I3C控制器的DevHandle的指针;否则返回NULL。
*
* @since 1.0
*/
DevHandle I3cOpen(int16_t number);
/**
* @brief 释放I3C控制器的句柄。
* 如果不再需要访问I3C控制器,则应调用此函数关闭其句柄,以便释放未使用的内存资源。
*
* @param handle 指向通过{@link I3cOpen}获得的I3C控制器句柄的指针。
*
* @since 1.0
*/
void I3cClose(DevHandle handle);
/**
* @brief 启动到I3C设备或兼容的I2C设备的传输,或者向支持的I3C设备发送CCC(通用命令代码)。
*
* @param handle 指向通过{@link I3cOpen}获得的I3C控制器句柄的指针。
* @param msg 指向I3C传输消息结构数组的指针。
* @param count 消息结构数组的长度。
* @param mode 传输模式。
*
* @return 如果操作成功,返回传输的消息结构数;
* @see I3cMsg
* @attention 此结构不限制len指定的数据传输长度。 特定的 I3C 控制器决定了允许的最大长度。 设备地址addr表示原始设备地址,不需要包含读/写标志位。
*
* @since 1.0
*/
int32_t I3cTransfer(DevHandle handle, struct I3cMsg *msg, int16_t count, enum TransMode mode);
/**
* @brief 重新设置受支持的I3C设备的IBI(带内中断)。
*
* @param handle 指向通过{@link I3cOpen}获得的I3C控制器句柄的指针。
* @param addr 重新设置IBI(带内中断)的设备地址。
* @param func IBI回调函数。
* @param payload 有效负载数据的长度,以字节为单位。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t I3cRequestIbi(DevHandle handle, uint16_t addr, I3cIbiFunc func, uint32_t payload);
/**
* @brief 释放{@link I3cRequestIbi}重新设置的IBI(带内中断)。
*
* @param handle 指向通过{@link I3cOpen}获得的I3C控制器句柄的指针。
* @param addr 要释放IBI的设备的地址。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t I3cFreeIbi(DevHandle handle, uint16_t addr);
/**
* @brief 设置I3C控制器的配置。
*
* @param handle 指向通过{@link I3cOpen}获得的I3C控制器句柄的指针。
* @param config 要设置的配置结构的指针。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t I3cSetConfig(DevHandle handle, struct I3cConfig *config);
/**
* @brief 获取I3C控制器的配置。
*
* @param handle 指向通过{@link I3cOpen}获得的I3C控制器句柄的指针。
* @param config 用于存储配置的结构体。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t I3cGetConfig(DevHandle handle, struct I3cConfig *config);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* I3C_IF_H */
/** @} */
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
/**
* @addtogroup MIPI CSI
* @{
*
* @brief 定义用于外设接收端驱动程序开发的标准MIPI CSI API。
* 此MIPI CSI模块抽象了不同系统平台的MIPI CSI功能,以提供稳定的API。
* 用于外设接收端驱动程序开发。您可以使用此模块获取/释放MIPI CSI设备句柄。
*
* @since 1.0
*/
/**
* @file mipi_csi_if.h
*
* @brief 声明用于显示驱动程序开发的标准MIPI CSI API。
*
*
*
* @since 1.0
*/
#ifndef MIPI_CSI_IF_H
#define MIPI_CSI_IF_H
#include "hdf_platform.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
/**
* @brief MIPI RX的MIPI设备支持的最大通道数。
*
* @since 1.0
*/
#define MIPI_LANE_NUM 4
/**
* @brief Mipi Rx的LVDS设备支持的最大通道数。
*
* @since 1.0
*/
#define LVDS_LANE_NUM 4
/**
* @brief 定义支持的最大虚拟通道数。
*
* @since 1.0
*/
#define WDR_VC_NUM 4
/**
* @brief 为LVDS的每个虚拟通道定义同步代码的数量。
*
* @since 1.0
*/
#define SYNC_CODE_NUM 4
/**
* @brief 最多3组扩展数据类型。
*
* @since 1.0
*/
#define MAX_EXT_DATA_TYPE_NUM 3
/**
* @brief Mipi-Rx的通道分布。
*
* @since 1.0
*/
typedef enum {
LANE_DIVIDE_MODE_0 = 0,
LANE_DIVIDE_MODE_1 = 1,
LANE_DIVIDE_MODE_BUTT
} LaneDivideMode;
/**
* @brief MIPI接收输入接口类型。
*
* @since 1.0
*/
typedef enum {
/** mipi */
INPUT_MODE_MIPI = 0x0,
/** SUB_LVDS */
INPUT_MODE_SUBLVDS = 0x1,
/** LVDS */
INPUT_MODE_LVDS = 0x2,
/* HISPI */
INPUT_MODE_HISPI = 0x3,
/** CMOS */
INPUT_MODE_CMOS = 0x4,
/** BT601 */
INPUT_MODE_BT601 = 0x5,
/** BT656 */
INPUT_MODE_BT656 = 0x6,
/** BT1120 */
INPUT_MODE_BT1120 = 0x7,
/** MIPI Bypass */
INPUT_MODE_BYPASS = 0x8,
INPUT_MODE_BUTT
} InputMode;
/**
* @brief MIPI接收速率。
*
* @since 1.0
*/
typedef enum {
/** output 1 pixel per clock */
MIPI_DATA_RATE_X1 = 0,
/** output 2 pixel per clock */
MIPI_DATA_RATE_X2 = 1,
MIPI_DATA_RATE_BUTT
} MipiDataRate;
/**
* @brief Mipi图像区域。
*
* @since 1.0
*/
typedef struct {
int x;
int y;
unsigned int width;
unsigned int height;
} ImgRect;
/**
* @brief 传输的数据类型。
*
* @since 1.0
*/
typedef enum {
DATA_TYPE_RAW_8BIT = 0,
DATA_TYPE_RAW_10BIT,
DATA_TYPE_RAW_12BIT,
DATA_TYPE_RAW_14BIT,
DATA_TYPE_RAW_16BIT,
DATA_TYPE_YUV420_8BIT_NORMAL,
DATA_TYPE_YUV420_8BIT_LEGACY,
DATA_TYPE_YUV422_8BIT,
/** YUV422 8位转换用户定义16位原始数据 */
DATA_TYPE_YUV422_PACKED,
DATA_TYPE_BUTT
} DataType;
/**
* @brief 定义YUV和原始数据格式以及位深度。
*
* @since 1.0
*/
typedef struct {
uint8_t devno;
unsigned int num;
unsigned int extDataBitWidth[MAX_EXT_DATA_TYPE_NUM];
unsigned int extDataType[MAX_EXT_DATA_TYPE_NUM];
} ExtDataType;
/**
* @brief MIPI D-PHY WDR模式定义。
*
* @since 1.0
*/
typedef enum {
HI_MIPI_WDR_MODE_NONE = 0x0,
/** Virtual Channel */
HI_MIPI_WDR_MODE_VC = 0x1,
/** Data Type */
HI_MIPI_WDR_MODE_DT = 0x2,
/** DOL Mode */
HI_MIPI_WDR_MODE_DOL = 0x3,
HI_MIPI_WDR_MODE_BUTT
} MipiWdrMode;
/**
* @brief Mipi设备属性。
*
* @since 1.0
*/
typedef struct {
/** 数据类型:8/10/12/14/16位 */
DataType inputDataType;
/** MIPI WDR模式定义 */
MipiWdrMode wdrMode;
/** 通道id: -1 - 禁用 */
short laneId[MIPI_LANE_NUM];
union {
/** 由HI_MIPI_WDR_MODE_DT使用 */
short dataType[WDR_VC_NUM];
};
} MipiDevAttr;
/**
* @brief LVDS WDR模式定义。
*
* @since 1.0
*/
typedef enum {
HI_WDR_MODE_NONE = 0x0,
HI_WDR_MODE_2F = 0x1,
HI_WDR_MODE_3F = 0x2,
HI_WDR_MODE_4F = 0x3,
HI_WDR_MODE_DOL_2F = 0x4,
HI_WDR_MODE_DOL_3F = 0x5,
HI_WDR_MODE_DOL_4F = 0x6,
HI_WDR_MODE_BUTT
} WdrMode;
/**
* @brief LVDS同步模式。
*
* @since 1.0
*/
typedef enum {
/** 传感器SOL、EOL、SOF、EOF */
LVDS_SYNC_MODE_SOF = 0,
/** SAV, EAV */
LVDS_SYNC_MODE_SAV,
LVDS_SYNC_MODE_BUTT
} LvdsSyncMode;
/**
* @brief LVDS 列同步类型。
*
* @since 1.0
*/
typedef enum {
LVDS_VSYNC_NORMAL = 0x00,
LVDS_VSYNC_SHARE = 0x01,
LVDS_VSYNC_HCONNECT = 0x02,
LVDS_VSYNC_BUTT
} LvdsVsyncType;
/**
* @brief LVDS-Vsync列同步参数。
*
* @since 1.0
*/
typedef struct {
LvdsVsyncType syncType;
/* 当 sync_type 为 LVDS_VSYNC_HCONNECT 时,需要配置 hblank1 和 hblank2,表示 Hconnect 的消隐区长度 */
unsigned short hblank1;
unsigned short hblank2;
} LvdsVsyncAttr;
/**
* @brief 帧ID类型。
*
* @since 1.0
*/
typedef enum {
LVDS_FID_NONE = 0x00,
/** SAV 4th中的帧标识id */
LVDS_FID_IN_SAV = 0x01,
/** 第一个数据中的帧标识id */
LVDS_FID_IN_DATA = 0x02,
LVDS_FID_BUTT
} LvdsFidType;
/**
* @brief 帧ID配置信息。
*
* @since 1.0
*/
typedef struct {
LvdsFidType fidType;
/** 索尼DOL有帧信息线,在DOL H连接模式下,
应将此标志配置为false以禁用输出帧信息行。 */
unsigned char outputFil;
} LvdsFidAttr;
/**
* @brief 位大小端模式。
*
* @since 1.0
*/
typedef enum {
LVDS_ENDIAN_LITTLE = 0x0,
LVDS_ENDIAN_BIG = 0x1,
LVDS_ENDIAN_BUTT
} LvdsBitEndian;
/**
* @brief LVDS/SUBSLVDS/HiSPi设备属性。
*
* @since 1.0
*/
typedef struct {
/** 数据类型:8/10/12/14位 */
DataType inputDataType;
/** 波分复用模式 */
WdrMode wdrMode;
/** 同步模式:SOF,SAV */
LvdsSyncMode syncMode;
/** 正常、共享、连接 */
LvdsVsyncAttr vsyncAttr;
/** 帧识别码 */
LvdsFidAttr fidAttr;
/** 数据端:小/大 */
LvdsBitEndian dataEndian;
/** 同步代码endian:小/大 */
LvdsBitEndian syncCodeEndian;
/** 通道id: -1 - 禁用 */
short laneId[LVDS_LANE_NUM];
/** 每个vc有4个参数,syncCode[i]:
同步模式是SYNC_MODE_SOF:SOF、EOF、SOL、EOL
同步模式是SYNC_MODE_SAV:无效SAV、无效eav、有效SAV、有效eav */
unsigned short syncCode[LVDS_LANE_NUM][WDR_VC_NUM][SYNC_CODE_NUM];
} LvdsDevAttr;
/**
* @brief 组合设备的属性。
* 组合设备属性,由于 MIPI Rx 能够对接 CSI-2、LVDS、HiSPi 等时序,所以将 MIPI Rx 称为组合设备。
*
* @since 1.0
*/
typedef struct {
/** 设备号 */
uint8_t devno;
/** 输入模式:MIPI/LVDS/SUBSLVDS/HISPI/DC */
InputMode inputMode;
MipiDataRate dataRate;
/** MIPI Rx设备裁剪区域(与原始传感器输入图像大小相对应) */
ImgRect imgRect;
union {
MipiDevAttr mipiAttr;
LvdsDevAttr lvdsAttr;
};
} ComboDevAttr;
/**
* @brief 共模电压模式。
*
* @since 1.0
*/
typedef enum {
PHY_CMV_GE1200MV = 0x00,
PHY_CMV_LT1200MV = 0x01,
PHY_CMV_BUTT
} PhyCmvMode;
/**
* @brief 获取具有指定通道ID的MIPI CSI设备句柄。
*
* @param id 表示 MIPI CSI通道id。
*
* @return 如果操作成功,则返回MIPI CSI设备句柄;否则返回NULL。
*
* @since 1.0
*/
DevHandle MipiCsiOpen(uint8_t id);
/**
* @brief 释放MIPI CSI设备句柄。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
*
* @since 1.0
*/
void MipiCsiClose(DevHandle handle);
/**
* @brief 将Mipi、CMOS或LVDS摄像机的参数设置到控制器。
* 参数包括工作模式、图像面积、图像深度、数据速率和物理通道。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param pAttr 指向属性的指针。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiSetComboDevAttr(DevHandle handle, ComboDevAttr *pAttr);
/**
* @brief 设置共模电压模式。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param devno 总共有2个设备编号,指向0或1。
* @param cmvMode 共模电压模式参数。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiSetPhyCmvmode(DevHandle handle, uint8_t devno, PhyCmvMode cmvMode);
/**
* @brief 复位传感器。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param snsResetSource 传感器的复位信号线号在软件中称为传感器的复位源。
* sns是传感器的缩写。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiResetSensor(DevHandle handle, uint8_t snsResetSource);
/**
* @brief 撤销复位传感器。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param snsResetSource 传感器的复位信号线号在软件中称为传感器的复位源。
* sns是传感器的缩写。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiUnresetSensor(DevHandle handle, uint8_t snsResetSource);
/**
* @brief 复位 MIPI RX。
* 不同的s32WorkingViNum有不同的enSnsType。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param comboDev MIPI Rx或者SLVS 设备类型。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiResetRx(DevHandle handle, uint8_t comboDev);
/**
* @brief 未设置的MIPI RX.
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param comboDev MIPI Rx或者SLVS 设备类型。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiUnresetRx(DevHandle handle, uint8_t comboDev);
/**
* @brief 设置Mipi Rx的通道分布。
* 根据硬件连接形式选择具体模式。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param laneDivideMode 通道划分模式参数。
*
* @since 1.0
*/
int32_t MipiCsiSetHsMode(DevHandle handle, LaneDivideMode laneDivideMode);
/**
* @brief 使能mipi的时钟。
* 根据上层函数电泳传递的enSnsType参数决定是用 MIPI 还是LVDS。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param comboDev MIPI接收或LVDS设备类型。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiEnableClock(DevHandle handle, uint8_t comboDev);
/**
* @brief 关闭Mipi的时钟。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param comboDev MIPI接收或LVDS设备类型。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiDisableClock(DevHandle handle, uint8_t comboDev);
/**
* @brief 启用Mipi上的传感器时钟。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param snsClkSource 传感器的时钟信号线号,在软件中称为传感器的时钟源。
* sns是传感器的缩写。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiEnableSensorClock(DevHandle handle, uint8_t snsClkSource);
/**
* @brief 关闭传感器时钟。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param snsClkSource 传感器的时钟信号线号,在软件中称为传感器的时钟源。
* sns是传感器的缩写。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiDisableSensorClock(DevHandle handle, uint8_t snsClkSource);
/**
* @brief 设置YUV和原始数据格式以及位深度。
*
* @param handle 通过{@link MipiCsiOpen}获得的MIPI CSI设备句柄。
* @param dataType 指向图像数据格式的指针。
*
* @return 如果操作成功,则返回0;否则返回负值。
*
* @since 1.0
*/
int32_t MipiCsiSetExtDataType(DevHandle handle, ExtDataType* dataType);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* MIPI_CSI_IF_H */
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @addtogroup USB
* @{
*
* @brief Declares USB-related APIs, including the custom data types and functions
* used to obtain descriptors, interface objects, and request objects, and to submit requests.
*
* @since 3.0
* @version 1.0
*/
/**
* @file usbd_client.h
*
* @brief Defines the usbd Interface.
*
* @since 3.0
* @version 1.0
*/
#ifndef USBD_CLIENT_H
#define USBD_CLIENT_H
#include "usb_param.h"
#include "usbd_subscriber.h"
namespace OHOS {
namespace USB {
class UsbdClient {
public:
/* *
* @brief 打开设备,建立连接
*
* @param dev usb设备地址信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t OpenDevice(const UsbDev &dev);
/* *
* @brief 关闭设备,释放与设备相关的所有系统资源
*
* @param dev usb设备地址信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t CloseDevice(const UsbDev &dev);
/* *
* @brief 获取设备描述符device
*
* @param dev usb设备地址信息
* @param decriptor usb设备描述符信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t GetDeviceDescriptor(const UsbDev &dev, std::vector<uint8_t> &decriptor);
/* *
* @brief 根据String ID获取设备的字符串描述符string
*
* @param dev usb设备地址信息
* @param descId usb的string ID
* @param decriptor 获取usb设备config信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t GetStringDescriptor(const UsbDev &dev, uint8_t descId, std::vector<uint8_t> &decriptor);
/* *
* @brief 根据config ID获取设备的配置描述符config
*
* @param dev usb设备地址信息
* @param descId usb的config ID
* @param decriptor 获取usb设备config信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t GetConfigDescriptor(const UsbDev &dev, uint8_t descId, std::vector<uint8_t> &decriptor);
/* *
* @brief 获取原始描述符
*
* @param dev usb设备地址信息
* @param decriptor usb设备原始描述符
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t GetRawDescriptor(const UsbDev &dev, std::vector<uint8_t> &decriptor);
/* *
* @brief 设置当前的config信息
*
* @param dev usb设备地址信息
* @param configIndex usb设备config信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t SetConfig(const UsbDev &dev, uint8_t configIndex);
/* *
* @brief 获取当前的config信息
*
* @param dev usb设备地址信息
* @param configIndex usb设备config信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t GetConfig(const UsbDev &dev, uint8_t &configIndex);
/* *
* @brief 打开接口,并申明独占接口,必须在数据传输前执行
*
* @param dev usb设备地址信息
* @param interfaceid usb设备interface ID
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t ClaimInterface(const UsbDev &dev, uint8_t interfaceid);
/* *
* @brief 关闭接口,释放接口的占用,在停止数据传输后执行
*
* @param dev usb设备地址信息
* @param interfaceid usb设备interface ID
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t ReleaseInterface(const UsbDev &dev, uint8_t interfaceid);
/* *
* @brief 设置指定接口的备选设置,用于在具有相同ID但不同备用设置的两个接口之间进行选择
*
* @param dev usb设备地址信息
* @param interfaceid usb设备interface ID
* @param altIndex interface 的 AlternateSetting 信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t SetInterface(const UsbDev &dev, uint8_t interfaceid, uint8_t altIndex);
/* *
* @brief 在给定端点上执行批量数据读取,返回读取的数据和长度,端点方向必须为数据读取可以设置超时时间
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param timeout 超时时间
* @param data 获取写入的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t
BulkTransferRead(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data);
/* *
* @brief 在给定端点上执行批量数据写入,返回读取的数据和长度,端点方向必须为数据写入
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param timeout 超时时间
* @param data 写入的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t
BulkTransferWrite(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, const std::vector<uint8_t> &data);
/* *
* @brief 对此设备执行端点零的控制事务,传输方向由请求类型决定。如果requestType&
* USB_ENDPOINT_DIR_MASK是USB_DIR_OUT,则传输是写入,如果是USB_DIR_IN,则传输是读取。
*
* @param dev usb设备地址信息
* @param ctrl usb设备控制数据包结构
* @param data 读取/写入 的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t ControlTransfer(const UsbDev &dev, const UsbCtrlTransfer &ctrl, std::vector<uint8_t> &data);
/* *
* @brief 在给定端点上执行中断数据读取,返回读取的数据和长度,端点方向必须为数据读取
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param timeout 超时时间
* @param data 读取的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t
InterruptTransferRead(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data);
/* *
* @brief 在给定端点上执行中断数据写入,返回读取的数据和长度,端点方向必须为数据写入
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param timeout 超时时间
* @param data 读取的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t
InterruptTransferWrite(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data);
/* *
* @brief 在给定端点上执行等时数据读取,返回读取的数据和长度,端点方向必须为数据读取
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param timeout 超时时间
* @param data 读取的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t IsoTransferRead(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data);
/* *
* @brief 在给定端点上执行等时数据写入,返回读取的数据和长度,端点方向必须为数据写入
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param timeout 超时时间
* @param data 读取的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t
IsoTransferWrite(const UsbDev &dev, const UsbPipe &pipe, int32_t timeout, std::vector<uint8_t> &data);
/* *
* @brief 将指定的端点进行异步数据发送或者接收请求,数据传输方向由端点方向决定
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param clientData 用户数据
* @param buffer 传输数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t RequestQueue(const UsbDev &dev,
const UsbPipe &pipe,
const std::vector<uint8_t> &clientData,
const std::vector<uint8_t> &buffer);
/* *
* @brief 等待RequestQueue异步请求的操作结果
*
* @param dev usb设备地址信息
* @param clientData 用户数据
* @param buffer 传输数据
* @param timeout 超时时间
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t
RequestWait(const UsbDev &dev, std::vector<uint8_t> &clientData, std::vector<uint8_t> &buffer, int32_t timeout);
/* *
* @brief 取消待处理的数据请求
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t RequestCancel(const UsbDev &dev, const UsbPipe &pipe);
/* *
* @brief 获取从设备支持的功能列表(按位域表示)(从设备)
*
* @param funcs 获取当前设备的function的值
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t GetCurrentFunctions(int32_t &funcs);
/* *
* @brief 设置从设备支持的功能列表(按位域表示)(从设备)
*
* @param funcs 传入设备支持的function的值
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t SetCurrentFunctions(int32_t funcs);
/* *
* @brief 关闭设备,释放与设备相关的所有系统资源
*
* @param portId port接口 ID
* @param powerRole 电源角色的值
* @param dataRole 数据角色的值
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t SetPortRole(int32_t portId, int32_t powerRole, int32_t dataRole);
/* *
* @brief 查询port端口的当前设置
*
* @param portId port接口 ID
* @param powerRole 电源角色的值
* @param dataRole 数据角色的值
* @param mode 模式的值
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t QueryPort(int32_t &portId, int32_t &powerRole, int32_t &dataRole, int32_t &mode);
/* *
* @brief 绑定订阅者
*
* @param subscriber 订阅者信息
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static ErrCode BindUsbdSubscriber(const sptr<UsbdSubscriber> &subscriber);
/* *
* @brief 解绑订阅者
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static ErrCode UnbindUsbdSubscriber();
/* *
* @brief 异步批量读取数据,传输大量数据时使用
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param length 打算以什么长度读取数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t BulkRequstDataSize(const UsbDev &dev, const UsbPipe &pipe, uint32_t &length);
/* *
* @brief 与BulkRequstDataSize配合使用,获取读取结果
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param data 读取到的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t BulkReadData(const UsbDev &dev, const UsbPipe &pipe, std::vector<uint8_t> &data);
/* *
* @brief 异步批量写数据,传输大量数据时使用
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param data 要写入的数据
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t BulkWriteData(const UsbDev &dev, const UsbPipe &pipe, const std::vector<uint8_t> &data);
/* *
* @brief 与BulkWriteData配合使用,获取写入状态,由length描述
*
* @param dev usb设备地址信息
* @param pipe usb设备pipe信息
* @param length 已经写入的数据长度
*
* @return 0 表示成功,其他返回值表示失败
* @since 3.0
*/
static int32_t BulkGetWriteCompleteLength(const UsbDev &dev, const UsbPipe &pipe, uint32_t &length);
private:
static void PrintBuffer(const char *title, const uint8_t *buffer, uint32_t length);
static int32_t SetDeviceMessage(MessageParcel &data, const UsbDev &dev);
static int32_t SetBufferMessage(MessageParcel &data, const std::vector<uint8_t> &tdata);
static int32_t GetBufferMessage(MessageParcel &data, std::vector<uint8_t> &tdata);
static sptr<IRemoteObject> GetUsbdService();
static ErrCode DoDispatch(uint32_t cmd, MessageParcel &data, MessageParcel &reply);
};
} // namespace USB
} // namespace OHOS
#endif // USBD_CLIENT_H
......@@ -3,7 +3,7 @@
本示例将运行源码中的camera示例代码,通过本示例可以实现使用开发板进行拍照、录像及预览等功能。
- 本示例源码路径为“applications/sample/camera/media/camera\_sample.cpp”。
- 在运行本示例前需先完成编译烧录、运行镜像等步骤,相关操作请参考[Hi3516快速入门](../quick-start/oem_minitinier_des_3516.md#section26131214194212)
- 在运行本示例前需先完成编译烧录、运行镜像等步骤,相关操作请参考[Hi3516快速入门](../quick-start/quickstart-lite-overview.md)
>![](../public_sys-resources/icon-note.gif) **说明:**
>开发板启动后默认会加载launcher应用,应用的图形界面默认显示在媒体图层上方,会影响camera\_sample的演示结果,因此需要在编译或是打包时去掉launcher应用。
......
# 真机运行<a name="ZH-CN_TOPIC_0000001054809161"></a>
应用编译打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[Hi3516快速入门](../quick-start/oem_minitinier_des_3516.md#section26131214194212)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载三方应用。
应用编译打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置](https://device.harmonyos.com/cn/docs/ide/user-guides/service_introduction-0000001050166905),然后将OpenHarmony烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[Hi3516快速入门](../quick-start/quickstart-lite-overview.md)。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载三方应用。
1. 将IDE编译的未签名应用安装包和安装工具(镜像文件生成目录中的dev\_tools)放在sdcard中,将sdcard插入开发板卡槽。
2. 应用安装默认要校验签名,需要执行以下命令,关闭签名校验。
......
# 应用实例<a name="ZH-CN_TOPIC_0000001055686082"></a>
- 开发板介绍、编译烧录、运行镜像等操作请参考[Hi3518快速入门](../quick-start/oem_minitinier_des_3518.md#section14815247616),编译结果包含示例,结果文件为out/ipcamera\_hi3518ev300/dev\_tools/bin/camera\_sample,可将文件通过读卡器复制至TF卡中,或者修改camera\_sample的编译脚本将结果文件复制至rootfs.img中。
- 开发板介绍、编译烧录、运行镜像等操作请参考[Hi3518快速入门](../quick-start/quickstart-lite-overview.md),编译结果包含示例,结果文件为out/ipcamera\_hi3518ev300/dev\_tools/bin/camera\_sample,可将文件通过读卡器复制至TF卡中,或者修改camera\_sample的编译脚本将结果文件复制至rootfs.img中。
修改applications/sample/camera/media/BUILD.gn中的output\_dir。
......
......@@ -335,25 +335,25 @@ Input模型由三层驱动组成,开发者适配一款全新触摸屏驱动只
其中touch\_gt911.o为本示例中追加的内容。
2. 具体编译及烧录操作请参考[标准系统快速入门编译及烧录章节](../quick-start/quickstart-standard-burn.md)
2. 具体编译及烧录操作请参考[标准系统快速入门编译及烧录章节](../quick-start/quickstart-standard-overview.md)
## 调试验证<a name="section62577313482"></a>
如下所示为开机启动日志部分截取
```
[I/HDF_INPUT_DRV] HdfInputManagerInit: enter // 管理驱动层初始化
[I/HDF_INPUT_DRV] HdfInputManagerInit: exit succ // 初始化成功
[I/osal_cdev] add cdev hdf_input_host success
[I/HDF_LOG_TAG] HdfTouchDriverProbe: enter // 公共驱动层初始化
[I/HDF_LOG_TAG] HdfTouchDriverProbe: main_touch exit succ // 初始化成功
[I/osal_cdev] add cdev hdf_input_event1 success
[I/HDF_INPUT_DRV] HdfGoodixChipInit: enter // 器件驱动层初始化
[I/HDF_INPUT_DRV] ChipDetect: IC FW version is 0x1060
[I/HDF_INPUT_DRV] Product_ID: 911_1060, x_sol = 960, y_sol = 480
[I/HDF_LOG_TAG] ChipDriverInit: chipDetect succ, ret = 0
[I/HDF_LOG_TAG] InputDeviceInstance: inputDev->devName = main_touch
[I/HDF_INPUT_DRV] HdfGoodixChipInit: exit succ, chipName = gt911 // 初始化成功
[I/HDF_INPUT_DRV] HdfInputManagerInit: enter // 管理驱动层初始化
[I/HDF_INPUT_DRV] HdfInputManagerInit: exit succ // 初始化成功
[I/osal_cdev] add cdev hdf_input_host success
[I/HDF_LOG_TAG] HdfTouchDriverProbe: enter // 公共驱动层初始化
[I/HDF_LOG_TAG] HdfTouchDriverProbe: main_touch exit succ // 初始化成功
[I/osal_cdev] add cdev hdf_input_event1 success
[I/HDF_INPUT_DRV] HdfGoodixChipInit: enter // 器件驱动层初始化
[I/HDF_INPUT_DRV] ChipDetect: IC FW version is 0x1060
[I/HDF_INPUT_DRV] Product_ID: 911_1060, x_sol = 960, y_sol = 480
[I/HDF_LOG_TAG] ChipDriverInit: chipDetect succ, ret = 0
[I/HDF_LOG_TAG] InputDeviceInstance: inputDev->devName = main_touch
[I/HDF_INPUT_DRV] HdfGoodixChipInit: exit succ, chipName = gt911 // 初始化成功
```
## Input模型工作流程解析<a name="section1578569154917"></a>
......
......@@ -10,7 +10,7 @@ OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,
## 开发<a name="section13857170163412"></a>
1. 请先完成[《Hi3861快速入门》](../quick-start/oem_minitinier_des_3861.md#section19352114194115)
1. 请先完成[《Hi3861快速入门》](../quick-start/quickstart-lite-overview.md)
LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led\_example.c文件中。
......@@ -101,7 +101,7 @@ OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,
## 验证<a name="section1949121910344"></a>
编译过程请参考《[Hi3861快速入门-源码编译](../quick-start/quickstart-lite-steps-hi3861-connection.md#section191121332125319)》,烧录过程请参考《[Hi3861快速入门-镜像烧录](../quick-start/quickstart-lite-steps-hi3861-connection.md#section3288165814218)》。
编译过程请参考《[Hi3861快速入门-源码编译](../quick-start/quickstart-lite-steps-hi3861-building.md)》,烧录过程请参考《[Hi3861快速入门-镜像烧录](../quick-start/quickstart-lite-steps-hi3861-burn.md)》。
完成以上两步后,按下RST键复位模组,可发现LED在周期性闪烁,与预期相符,验证完毕。
......
......@@ -57,7 +57,7 @@ LITE_USER_SEC_ENTRY VOID OsUserInit(VOID *args)
clang --target=arm-liteos --sysroot=prebuilts/lite/sysroot -o helloworld helloworld.c
```
**clang**:参考[LLVM安装指导](../quick-start/quickstart-lite-env-setup-linux.md)安装LLVM编译器。
**clang**:参考[LLVM安装指导](../quick-start/quickstart-lite-package-environment.md)安装LLVM编译器。
**--target**:--target=arm-liteos,指定编译平台为arm-liteos。
......
# 概述
## 概述
目前OpenHarmony已经成立了SIG组[sig-devboard](https://gitee.com/openharmony/community/blob/master/sig/sig-devboard/sig_devboard_cn.md)。该SIG组以支持更多第三方开发板为目标,提供开发板移植的支撑。
在了解开发板移植前,需要先了解一下OpenHarmony对设备的分类。不同设备类型的移植方法会有较大差异。
......@@ -9,7 +9,7 @@
| 小型系统类设备 | 内存>1MB、有MMU | LiteOS-A、Linux |
| 标准系统类设备 | 内存>128MB | Linux |
# 代码准备
## 代码准备
目前OpenHarmony已经为各厂家创建了仓库并在openharmony-sig中进行孵化。参与孵化仓开发,需要使用如下方法初始化和下载代码。
......@@ -19,7 +19,7 @@ repo init -u https://gitee.com/openharmony-sig/manifest.git -b master -m devboar
其他下载步骤与主线相同。
# 开发板移植指导
## 芯片移植指导
- [轻量系统芯片移植指导](porting-minichip.md)
- [移植准备](porting-chip-prepare.md)
......@@ -49,10 +49,16 @@ repo init -u https://gitee.com/openharmony-sig/manifest.git -b master -m devboar
- [移植概述](porting-smallchip-driver-overview.md)
- [平台驱动移植](porting-smallchip-driver-plat.md)
- [器件驱动移植](porting-smallchip-driver-oom.md)
- 标准系统系统芯片移植指导
- [标准系统芯片移植指导](standard-system-porting-guide.md)
- [标准系统移植指南](standard-system-porting-guide.md)
- [一种快速移植OpenHarmony Linux内核的方法](porting-linux-kernel.md)
- [轻量和小型系统三方库移植指导]( porting-thirdparty.md)
- [概述](porting-thirdparty-overview.md)
- [CMake方式组织编译的库移植](porting-thirdparty-cmake.md)
- [Makefile方式组织编译的库移植](porting-thirdparty-makefile.md)
\ No newline at end of file
- [Makefile方式组织编译的库移植](porting-thirdparty-makefile.md)
## 芯片移植案例
- [轻量系统芯片移植案例](porting-minichip-cases.md)
- [带屏解决方案之恒玄芯片移植案例](porting-bes2600w-on-minisystem-display-demo.md)
......@@ -6,7 +6,7 @@
## 编译环境搭建<a name="section3336103410314"></a>
首先请搭建OpenHarmony基础环境,步骤请参考轻量和小型系统入门[linux环境搭建](../quick-start/quickstart-lite-env-setup-linux.md)。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像:
首先请搭建OpenHarmony基础环境,步骤请参考轻量和小型系统入门[linux环境搭建](../quick-start/quickstart-lite-package-environment.md)。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像:
```
sudo apt-get install gcc-arm-linux-gnueabi
......
......@@ -6,6 +6,6 @@
- **[小型系统芯片移植指导](porting-smallchip.md)**
- **[标准系统移植指](standard-system-porting-guide.md)**
- **[标准系统移植指](standard-system-porting-guide.md)**
# 快速入门
- [轻量和小型系统入门](quickstart-lite.md)
- [概述](quickstart-lite-overview.md)
- [入门介绍](quickstart-lite-introduction.md)
- [Hi3861开发板介绍](oem_minitinier_des_3861.md)
- [Hi3516开发板介绍](oem_minitinier_des_3516.md)
- [Hi3518开发板介绍](oem_minitinier_des_3518.md)
- [搭建系统环境](quickstart-lite-env-setup.md)
- [概述](quickstart-lite-env-setup-overview.md)
- [Windows开发环境准备](quickstart-lite-env-setup-windows.md)
- [获取源码及Ubuntu编译环境准备](quickstart-lite-env-setup-linux.md)
- [常见问题](quickstart-lite-env-setup-faqs.md)
- [开发步骤](quickstart-lite-steps.md)
- [Hi3861开发板](quickstart-lite-steps-hi3861.md)
- [安装开发板环境](quickstart-lite-steps-hi3861-setting.md)
- [WLAN联网(编译、烧录)](quickstart-lite-steps-hi3861-connection.md)
- [运行Hello World](quickstart-lite-steps-hi3861-running.md)
- [常见问题](quickstart-lite-steps-hi3861-faqs.md)
- [Hi3516开发板](quickstart-lite-steps-hi3516.md)
- [安装开发板环境](quickstart-lite-steps-hi3516-setting.md)
- [运行Hello OHOS(编译、烧录)](quickstart-lite-steps-hi3516-running.md)
- [驱动开发示例](quickstart-lite-steps-hi3516-program.md)
- [常见问题](quickstart-lite-steps-hi3516-faqs.md)
- [Hi3518开发板](quickstart-lite-steps-hi3518.md)
- [安装开发板环境](quickstart-lite-steps-hi3518-setting.md)
- [运行Hello OHOS(编译、烧录)](quickstart-lite-steps-hi3518-running.md)
- [常见问题](quickstart-lite-steps-hi3518-faqs.md)
- [标准系统入门](quickstart-standard.md)
- [入门介绍](quickstart-standard-overview.md)
- [搭建Windows开发环境](quickstart-standard-windows-environment.md)
- [搭建Ubuntu环境\(获取源码及编译,Docker方式\)](quickstart-standard-docker-environment.md)
- [搭建Ubuntu环境\(获取源码及编译,安装包方式\)](quickstart-standard-package-environment.md)
- [镜像烧录](quickstart-standard-burn.md)
- [镜像运行](quickstart-standard-running.md)
- [常见问题](quickstart-standard-faqs.md)
\ No newline at end of file
- [轻量和小型系统入门](quickstart-lite.md)
- [轻量与小型系统入门概述](quickstart-lite-overview.md)
- [搭建轻量与小型系统环境](quickstart-lite-env-setup.md)
- [搭建系统环境概述](quickstart-lite-env-setup-overview.md)
- [开发环境准备](quickstart-lite-env-prepare.md)
- [获取源码](quickstart-lite-sourcecode-acquire.md)
- [使用安装包方式搭建编译环境](quickstart-lite-package-environment.md)
- [使用Docker方式搭建编译环境](quickstart-lite-docker-environment.md)
- [常见问题](quickstart-lite-env-setup-faqs.md)
- [运行“Hello World”](quickstart-lite-steps.md)
- [Hi3861开发板](quickstart-lite-steps-hi3861.md)
- [安装开发板环境](quickstart-lite-steps-hi3861-setting.md)
- [新建应用程序](quickstart-lite-steps-hi3861-application-framework.md)
- [编译](quickstart-lite-steps-hi3861-building.md)
- [烧录](quickstart-lite-steps-hi3861-burn.md)
- [调试验证](quickstart-lite-steps-hi3861-debug.md)
- [运行](quickstart-lite-steps-hi3816-running.md)
- [常见问题](quickstart-lite-steps-hi3861-faqs.md)
- [Hi3516开发板](quickstart-lite-steps-hi3516.md)
- [安装开发板环境](quickstart-lite-steps-hi3516-setting.md)
- [新建应用程序](quickstart-lite-steps-hi3516-application-framework.md)
- [编译](quickstart-lite-steps-hi3516-building.md)
- [烧录](quickstart-lite-steps-hi3516-burn.md)
- [运行](quickstart-lite-steps-hi3516-running.md)
- [常见问题](quickstart-lite-steps-hi3516-faqs.md)
- [Hi3518开发板](quickstart-lite-steps-hi3518.md)
- [安装开发板环境](quickstart-lite-steps-hi3518-setting.md)
- [新建应用程序](quickstart-lite-steps-hi3518-application-framework.md)
- [编译](quickstart-lite-steps-hi3518-building.md)
- [烧录](quickstart-lite-steps-hi3518-burn.md)
- [运行](quickstart-lite-steps-hi3518-running.md)
- [常见问题](quickstart-lite-steps-hi3518-faqs.md)
- [附录](quickstart-lite-introduction.md)
- [Hi3861开发板介绍](quickstart-lite-introduction-hi3861.md)
- [Hi3516开发板介绍](quickstart-lite-introduction-hi3516.md)
- [Hi3518开发板介绍](quickstart-lite-introduction-hi3518.md)
- [标准系统入门](quickstart-standard.md)
- [标准系统入门简介](quickstart-standard-overview.md)
- [标准系统开发环境准备(仅Hi3516需要)](quickstart-standard-env-setup.md)
- [获取源码](quickstart-standard-sourcecode-acquire.md)
- [运行“Hello World”](quickstart-standard-running.md)
- [Hi3516开发板](quickstart-standard-running-hi3516.md)
- [创建应用程序](quickstart-standard-running-hi3516-create.md)
- [编译](quickstart-standard-running-hi3516-build.md)
- [烧录](quickstart-standard-running-hi3516-burn.md)
- [运行](quickstart-standard-running-hi3516-run.md)
- [RK3568开发板](quickstart-standard-running-rk3568.md)
- [创建应用程序](quickstart-standard-running-rk3568-create.md)
- [编译](quickstart-standard-running-rk3568-build.md)
- [烧录](quickstart-standard-running-rk3568-burn.md)
- [运行](quickstart-standard-running-rk3568-run.md)
- [常见问题](quickstart-standard-faqs.md)
- [附录](quickstart-standard-appendix.md)
- [Hi3516开发板介绍](quickstart-standard-appendix-hi3516.md)
- [RK3568开发板介绍](quickstart-standard-appendix-rk3568.md)
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册