通用模块驱动使用
1. GPIO SPI总线驱动
Iconfig配置
编译完成会在module_driver/output生成 spi_gpio_add.ko和 spi_gpio_add.sh 安装脚本,运行
这个安装脚本可实现spi_gpio驱动的安装。
可以在spi_gpio_add.sh脚本中对以上这些参数重新进行配置,下面列举脚本中的参数。
bus_num spi总线编号(要保证其唯一性)
sck 时钟信号引脚
mosi 数据输出引脚
miso 数据输入引脚
num_chipselect 最大的从设备数量
2. SPI设备驱动
Iconfig配置
3. GPIO I2C驱动
Iconfig配置
编译完成会在module_driver/output/目录生成i2c_gpio_add.ko和 i2c_gpio_add.sh 安装脚本,
运行这个安装脚本可实现gpio i2c驱动的安装。
可以在i2c_gpio_add.sh脚本中对以上这些参数重新进行配置,下面列举脚本中的参数。
bus_num i2c总线编号
rate i2c速率
scl 时钟引脚
sda 数据引脚
4. utils基础实用工具集
4.1 Iconfig配置
4.2 导出API说明
utils工具相关源代码目录在module_driver/drivers/utils下面
4.2.1 string相关导出API
int stricmp(const char *s1, const char *s2)
功能:忽略大小写,判断字符串是否相同
参数:const char *s1 需要比较的字符串
const char *s2
返回值:0 表示两个字符串相同
非0 表示表示不相同
int strimatch(const char *s1, const char *prefix)
功能:判断字符串 "s1" 是否带有前缀 "prefix"
参数:const char *s1 需要判断的字符串
const char *prefix 需要判断的前缀
返回值:0 表示字符串s1带有前缀prefix
非0 表示不带有前缀prefix
char *str_first_space(const char *s)
功能:得到字符串s第一个space的地址,并返回
参数:const char *s 目标字符串
返回值: 字符串s中第一个space的地址(即返回的字符串会将空格之前的字符删除)
char *str_first_not_space(const char *s)
功能:得到字符串s第一个非space的地址,并返回
参数:const char *s 目标字符串
返回值:字符串s中第一个非space的地址(即返回的字符串会将第一个非空格字符,之前的空格删除)
char *str_first_tail_space(const char *s)
功能:尾部的连续space的起始地址,并返回
参数:const char *s 目标字符串
返回值:字符串s尾部的连续space的起始地址(即返回的字符串,会将连续space之前的字符全部删除)
注意:如果该字符串s尾部没有space,那么返回的是该字符串结束符'\0'的地址,
可以利用这个特性来判断尾部是否有space
char *strip(const char *s, const char **right_p)
功能:指明首部第一个非space的地址,和尾部连续的space的起始地址。
参数:const char *s 目标字符串
const char **right_p 会被赋值尾部的连续space的起始地址
(相当于right_p = str_first_tail_space(s))
返回值:字符串s第一个非space的地址(相当于return str_first_not_space(s))
char **str_to_words(const char *str, int *word_count)
功能:将字符串转换为 word
参数:const char *str 输入的字符串
int *word_count 返回 word 的个数,可以为NULL
返回值:words[count+1] 字符串数组, 数组的成员按顺序存放每个 word, words[count] 为 NULL表
示结束
注意:返回值需要调用 str_free_words() 释放
支持 "... ..." 以及 '... ...' 类型的word(即有空格的要用"" 或''括起来)
其中只有""支持转义符
int strtol_h(const char *str, long *res)
功能:将字符串转换为数字,类型为long,可以支持单位为 k/K m/M(例如将"1K"可转化成1000)
参数:const char *str 待转换的字符串
long *res 返回转换的值,如果转换成功
放回值:0 转换成功 -ERANGE 超出范围 -EINVAL 转换失败
int strtoul_h(const char *str, unsigned long *res)
功能:将字符串转换为数字,类型为unsigned long,可以支持单位为 k/K m/M(例如将"1M"可转化成
1000 000)
参数:const char *str 待转换的字符串
long *res 如果转换成功,返回转换的值
返回值:0 转换成功 -ERANGE 超出范围 -EINVAL 转换失败
4.2.2 gpio相关导出API
int gpio_port_set_func(int port, unsigned long pins, enum gpio_function func)
功能:设置gpio port 中部分引脚的 func
参数:int port 0:PA 1:PB ,,,
unsigned long pins 用bit来表示port 对应的某些pin脚
enum gpio_function func 参见不同平台的定义
返回值:0 表示成功
int gpio_set_func(int gpio, enum gpio_function func)
功能:设置gpio功能
参数:int gpio 要设置功能的gpio
enum gpio_function func 参见不同平台的定义
返回值:0 表示成功
int str_to_gpio(const char *str)
功能:字符串 转 gpio
参数:const char *str 要转换的字符串
返回值: 如果转换成功 则返回gpio
如果转换失败 -EINVAL
如果 str 是 “-1” 则返回 -1, -1 一般表示gpio未定义
注意: 字符串形式如下所示,不限大小写
gpio_pXN, gpio_pXNN, pXN, pXNN
X: a,b,c,d,e,f,g
N: 0,1,2,3,4,5,6,7,8,9
例如: gpio_pa02 GPIO_PA02 gpio_pa2 PA02 pa02 pa2
char *gpio_to_str(int gpio, char *buf)
功能:gpio 转 字符串
参数:int gpio 要转换的gpio
char *buf 存放转换完成的字符串数组,是如果buf为NULL,那么会调用kmalloc分配一个(需要
用户kfree)
返回值:返回gpio字符串,如果buf为NULL,则返回kmalloc分配的(需要用户kfree), 如果buf不为
NULL,则返回buf
int str_match_gpio(const char **str_p)
功能:字符串 匹配 gpio
参数:const char **str_p 要匹配的字符串
返回值: 正数 表示匹配到一个有效的gpio,str_p 里的值会被指向接下来的字符串
-1 表示匹配到 -1, -1 一般表示gpio未定义,str_p 里的值会被指向接下来的字符串
-EINVAL 没有匹配到gpio或者-1, str_p里的值不会改变
4.2.3 其他导出API
unsigned long long local_clock_us(void)
功能: 获取本地时钟的值(us级)
返回值: 返回本地时钟的值(us级)
unsigned long long local_clock_ms(void)
功能: 获取本地时钟的值(ms级)
返回值: 返回本地时钟的值(ms级)
struct i2c_client *i2c_register_device(struct i2c_board_info *info, int
i2c_bus_num)
功能:向指定的i2c总线注册i2c设备
struct spi_device *spi_register_device(struct spi_board_info *info, int
spi_bus_num)
功能:向指定的spi总线注册spi设备
注意:设备的 chip_select 变量会被自动累加无需赋值
需要提供 controller_data 变量作为cs 的gpio 引脚