linux 应用编程APIS

common api

atoi
sleep
usleep
mknod
isdigit
getpwuid struct passwd
getgrgid struct group
system
sync
getopt_long 应用程序命令行参数解析函数

sem_init
sem_wait
sem_post

IO 多路复用 API

open O_NONBLOCK
poll
epoll

fd_set
struct timeval
FD_ZERO
FD_SET
FD_ISSET
select

IO api

FILE
fopen
fgets
fseek
ftell
fread
fwrite
fclose
fflush
fsync

open
read
write
ioctl
lseek
mmap
close
access

fprintf
printf
fscanf
sscanf
snprintf
scanf

opendir
closedir
readdir

字符串/内存 API

strlcat
strcmp
strncmp
strncpy
strtok_r
strchr
strrchr
strlen
strlcpy
strstr
strcasestr
strcasecmp
strcat
strspn
strtol
strpbrk
strdup

calloc
malloc
realloc
free
memset
memcpy
memmove

IPC API

socket (netlink)
setsockopt
bind
recv

key_t
ftok
msgget
msgrcv
msgsnd

mkfifo
pipe
popen

多线程pthread API

pthread_create
pthread_detach
pthread_mutex_init
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_t

uart 编程 API

uart设备文件:/dev/ttyHSx

struct termios // 配置串口参数 数据位、parity(none、odd、even)、波特率、停止位、流控(none、hardware、software)
tcgetattr
tcsetattr
cfmakeraw
bzero
cfsetispeed
cfsetospeed
tcflush
open
close
read
write

i2c 编程 API

i2c_dev.c 这个驱动模块是 用户空间 i2c 接口
/dev/i2c-x 设备文件,代表一个 i2c adapter

struct i2c_msg
struct i2c_rdwr_ioctl_data
ioctl I2C_RDWR
open
close

在定义 struct i2c_msg数组时,涉及参数有:i2c 7位地址、读写 flag、buffer、buffer长度。
注意:
寄存器地址是大端传输。
对于i2c 写,buffer的前几个字节是寄存器地址。
对于i2c 读,i2c_msg数组第一个元素是写寄存器地址消息,第二元素是读消息。

spi 编程 API

spidev.c spidev.h 用户空间 spi接口
/dev/spidevX.Y 设备文件

struct spi_ioc_transfer
open
ioctl SPI_IOC_RD_MODE SPI_IOC_WR_MODE SPI_IOC_MESSAGE() 支持全双工
close
read 半双工read
write 半双工write

rtc 编程 API

rtc-dev.c rtc.h 用户空间 rtc 接口
/dec/rtcX 设备文件
rtc.txt 参考文档

struct rtc_wkalrm
struct rtc_time
open
ioctl RTC_RD_TIME
ioctl RTC_WKALM_SET
close
备注:
rtc-lib.c 包含了rtc相关辅助函数,例如把struct rtc_time转化为秒,或把秒时间转化为 struct rtc_time。

用户空间 gpio device 控制 接口

soc pins支持功能复用,对于gpio pins需要给应用程序导出控制接口,配置方向、值、中断、driver、pull等。
gpio pins分为两类:一类用于专用功能如wakeup_in、wakeup_out等,这些专用管脚在驱动层已经配置OK。另一类则由应用程序控制使用。
应用程序->pinctrl-msm.c(直接读写 pin 寄存器实现gpio配置,gpiolib api 无法满足需求)/pinctrl-mdm9607.c

audio应用程序 编程接口(aplay,arec,amix)

audio应用程序基于 alsalib库 实现,alsa驱动框架给应用程序提供的接口头文件
路径:include/uapi
#include <sound/asound.h>
#include <sound/compress_params.h>
#include <sound/compress_offload.h>

frame大小=channel采用精度(字节单位)
1秒的frame个数 = 采样率
channel采用精度(字节单位) / channel采用精度(字节单位), 可以看出1秒的frame个数就是采样率。
PCM接口的fsync信号频率和i2s接口的lrc信号频率就是采样率,一个采样周期传输的数据大小就是1个frame大小。
raw文件格式和wave文件格式区别就是 wave文件多了 wave header。

原文地址:https://www.cnblogs.com/bobfly1984/p/14596902.html