Linux驱动开发——__stringify

简介: 在Linux内核中有一个宏__stringify,在include/linux/stringify.h定义如下:#ifndef __LINUX_STRINGIFY_H#define __LINUX_STRINGIFY_H/* Indirect stringification.

在Linux内核中有一个宏__stringify,在include/linux/stringify.h定义如下:

#ifndef __LINUX_STRINGIFY_H
#define __LINUX_STRINGIFY_H

/* Indirect stringification.  Doing two levels allows the parameter to be a
 * macro itself.  For example, compile with -DFOO=bar, __stringify(FOO)
 * converts to "bar".
 */

#define __stringify_1(x...)    #x
#define __stringify(x...)    __stringify_1(x)

#endif    /* !__LINUX_STRINGIFY_H */

其作用实际上就是 把  x 直接转换为字符串。其返回值就是字符串,而不是变量名。

用法1:

  #define __ATTR(_name,_mode,_show,_store) { /
    .attr = {.name = __stringify(_name), .mode = _mode }, /
    .show = _show,    /
    .store = _store,    /
    }

假设我们这样使用  __ATTR: 

                      __ATTR(var_name, 777,  show_function, store_function)

  那么,实际上 复制给  .attr.name 的值是 "var_name" ,而不是var_name 变量所代表的值。

用法2:将枚举类型转换为字符串

#define WCD_MBHC_STRINGIFY(s)  __stringify(s)

enum wcd_notify_event {
    WCD_EVENT_INVALID,
    /* events for micbias ON and OFF */
    WCD_EVENT_PRE_MICBIAS_2_OFF,
    WCD_EVENT_POST_MICBIAS_2_OFF,
    WCD_EVENT_PRE_MICBIAS_2_ON,
    WCD_EVENT_POST_MICBIAS_2_ON,

 

static const char *wcd_mbhc_get_event_string(int event)
{
    switch (event) {
    case WCD_EVENT_PRE_MICBIAS_2_OFF:
        return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_OFF);
    case WCD_EVENT_POST_MICBIAS_2_OFF:
        return WCD_MBHC_STRINGIFY(WCD_EVENT_POST_MICBIAS_2_OFF);
    case WCD_EVENT_PRE_MICBIAS_2_ON:
        return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_ON);

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-09/135383.htm

目录
相关文章
|
28天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
73 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
28天前
|
安全 Linux API
Linux设备模型统一:桥接硬件多样性与应用程序开发的关键
在Linux的宏大世界中,各种各样的硬件设备如星辰般繁多。从常见的USB设备到复杂的网络接口卡,从嵌入式设备到强大的服务器,Linux需要在这些差异极大的硬件上运行。这就引出了一个问题:Linux是如何统一这些不同硬件的设备模型的呢?本文将探讨Linux是如何针对不同的硬件统一设备模型的,这一统一的设备模型对于应用程序开发人员来说又有何意义。让我们一探究竟🕵️‍♂️。
Linux设备模型统一:桥接硬件多样性与应用程序开发的关键
|
28天前
|
算法 Linux 测试技术
Linux C++开发中的代码优化之道:把握时机与策略
Linux C++开发中的代码优化之道:把握时机与策略
56 0
|
28天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
63 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
3天前
|
Web App开发 安全 Linux
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
《FFmpeg开发实战》书中介绍轻量级流媒体服务器MediaMTX,但其功能有限,不适合生产环境。推荐使用国产开源的ZLMediaKit,它支持多种流媒体协议和音视频编码标准。以下是华为欧拉系统下编译安装ZLMediaKit和FFmpeg的步骤,包括更新依赖、下载源码、配置、编译、安装以及启动MediaServer服务。此外,还提供了通过FFmpeg进行RTSP和RTMP推流,并使用VLC播放器拉流的示例。
18 3
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
|
4天前
|
编解码 Linux
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
《FFmpeg开发实战》书中指导如何在Linux环境下为FFmpeg集成libwebp以支持WebP图片编解码。首先,从GitHub下载libwebp源码,解压后通过`libtoolize`,`autogen.sh`,`configure`,`make -j4`和`make install`步骤安装。接着,在FFmpeg源码目录中重新配置并添加`--enable-libwebp`选项,然后进行`make clean`,`make -j4`和`make install`以编译安装FFmpeg。最后,验证FFmpeg版本信息确认libwebp已启用。
14 1
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
|
5天前
|
Linux 芯片
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
9 2
|
10天前
|
Linux 编解码 Python
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
AV1是一种高效免费的视频编码标准,由AOM联盟制定,相比H.265压缩率提升约27%。各大流媒体平台倾向使用AV1。本文介绍了如何在Linux环境下为FFmpeg集成AV1编解码库libaom、libdav1d和libsvtav1。涉及下载源码、配置、编译和安装步骤,包括设置环境变量以启用这三个库。
34 3
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
|
23天前
|
运维 网络协议 Linux
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
|
24天前
|
编解码 Linux 5G
FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器
AVS3,中国制定的第三代音视频标准,是首个针对8K和5G的视频编码标准,相比AVS2和HEVC性能提升约30%。uavs3d是AVS3的解码器,支持8K/60P实时解码,且在各平台有优秀表现。要为FFmpeg集成AVS3解码器libuavs3d,需从GitHub下载最新源码,解压后配置、编译和安装。之后,重新配置FFmpeg,启用libuavs3d并编译安装,通过`ffmpeg -version`确认成功集成。
33 0
FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器