Name | Date | Size | #Lines | LOC | ||
---|---|---|---|---|---|---|
.. | 29-Oct-2021 | - | ||||
example/ | 29-Oct-2021 | - | ||||
include/ | 29-Oct-2021 | - | ||||
src/ | 29-Oct-2021 | - | ||||
README.md | A D | 29-Oct-2021 | 5.8 KiB | 154 | 109 | |
package.yaml | A D | 29-Oct-2021 | 324 | 26 | 20 |
README.md
1@page posix posix 2 3[更正文档](https://gitee.com/alios-things/posix/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html) 4 5# 概述 6POSIX (Portable Operating System Interface) 是IEEE组织为了维护应用在不同操作系统之间的兼容性而制定的标准。 主要包括API,Shell和Utility等一整套应用环境。主要应用于Unix/Linux操作系统之间, 也有其他的操作系统为了兼容Unix/Linux的应用生态而支持POSIX标准, 如Zephyr, VxWorks, QNX, Fuchsia等。 7组件支持以下功能: 8- pthread 线程及其属性管理 9- pthread 条件变量及其属性管理 10- pthread 互斥及其属性管理 11- 文件系统类接口 12- 环境变量管理 13- POSIX信号量 14- POSIX定时器 15- POSIX消息队列 16 17## 版权信息 18> Apache license v2.0 19 20## 目录结构 21```tree 22posix 23|-- example 24| |-- pthread_example.c #示例代码 25|-- include 26| |-- dirent.h #文件系统类接口申明 27| |-- enviro.h #环境变量接口申明 28| |-- mqueue.h #POSIX消息队列接口申明 29| |-- posix 30| | |-- timer.h #POSIX定时器接口申明 31| |-- pthread.h #pthread接口申明 32| |-- semaphore.h #POSIX信号量接口申明 33| |-- signal.h #signal结构体申明 34| |-- sys 35| |-- prctl.h #prctl接口申明 36|-- package.yaml #编译及配置文件 37|-- README.md #组件说明文档 38|-- src 39 |-- dirent.c #文件系统接口实现 40 |-- enviro.c #环境变量接口实现 41 |-- internal 42 | |-- pthread.h #pthread内部定义 43 | |-- sched.h #调度功能内部定义 44 |-- mqueue.c #POSIX消息队列实现 45 |-- prctl.c #prctl实现 46 |-- pthread_attr.c #pthread线程属性实现 47 |-- pthread.c #pthread线程实现 48 |-- pthread_cond.c #pthread条件变量及其属性的实现 49 |-- pthread_mutex.c #pthread互斥锁及其属性的实现 50 |-- pthread_tsd.c #pthread互斥锁及其属性的实现 51 |-- sched.c #调度类接口实现 52 |-- semaphore.c #POSIX信号量的实现 53 |-- timer.c #POSIX定时器及时间函数的实现 54``` 55 56## 依赖组件 57* osal_aos 58 59# 常用配置 60无 61 62# API说明 63本组件实现POSIX标准的API,API的使用方式遵循POSIX.1-2017标准的定义,与Unix/Linux上POSIX API使用方式一致。具体使用方法可以参考POSIX标准的官方文档[POSIX.1-2017标准](https://pubs.opengroup.org/onlinepubs/9699919799/idx/functions.html)。 64 65# 使用示例 66 67组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),下载安装。 68待开发环境搭建完成后,可以按照以下步骤进行示例的测试。 69 70## 步骤1 创建或打开工程 71 72**打开已有工程** 73 74如果用于测试的案例工程已存在,可参考[《AliOS Things集成开发环境使用说明之打开工程》](https://help.aliyun.com/document_detail/302381.html)打开已有工程。 75 76**创建新的工程** 77 78组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择helloworld_demo案例。helloworld_demo案例相关的源代码下载可参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html)。 79 80## 步骤2 添加组件 81 82案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖: 83 84```yaml 85 86depends: 87 - posix: master # helloworld_demo中引入posix组件 88 89``` 90 91## 步骤3 下载组件 92 93在已安装了 的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入: 94 95```shell 96 97aos install posix 98 99``` 100 101上述命令执行成功后,组件源码则被下载到了./components/posix路径中。 102 103## 步骤4 添加示例 104 105在posix组件的package.yaml中添加[example示例代码](https://gitee.com/alios-things/posix/tree/master/example): 106 107```yaml 108source_file: 109 - "src/*.c" 110 - "example/pthread_example.c" 111``` 112 113## 步骤5 编译固件 114 115在示例代码已经添加至组件的配置文件,并且helloworld_demo已添加了对该组件的依赖后,就可以编译helloworld_demo案例来生成固件了,具体编译方法可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)。 116 117## 步骤6 烧录固件 118 119helloworld_demo案例的固件生成后,可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)来烧录固件。 120 121## 步骤7 打开串口 122 123固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考[《AliOS Things集成开发环境使用说明之查看日志》](https://help.aliyun.com/document_detail/302382.html)。 124 125当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。 126 127## 步骤8 测试示例 128 129**CLI命令行输入:** 130```shell 131 132pthread_example # 执行pthread示例 133 134``` 135 136> 关键日志: 137```shell 138 139new thread:0x34038460, arg:10 140new thread hold the lock. 141Main thread hold the lock. 142retval:0x34003aa8, &ret_value:0x34003aa8 143New thread:0x34038460 exited with vaule: 100 144The count is 11 145pthread_example test success! 146 147``` 148 149# 注意事项 1501. POSIX API的使用方式虽然与POSIX标准一致,但相同API的子功能项可能是不支持的,此时注意判断API的异常处理(返回值和errno),如API有子功能项不支持,会设置errno为ENOTSUP并返回-1,或者直接返回ENOTSUP,具体需要查看不同API的标准定义。 151 152# FAQ 153无 154