Linux驱动之component

0 前言

   component算是Linux内核中用的比较多的一类结构,这篇文章具体分析一波。

1 component_match_add

void component_match_add(struct device *dev, struct component_match **matchptr,
    int (*compare)(struct device *, void *), void *compare_data)
{
    struct component_match *match = *matchptr;

    if (IS_ERR(match))
        return;

    if (!match || match->num == match->alloc) {
        size_t new_size = match ? match->alloc + 16 : 15;

        match = component_match_realloc(dev, match, new_size);

        *matchptr = match;

        if (IS_ERR(match))
            return;
    }
    /* 初始match->num = 15, 后面递增 */
    match->compare[match->num].fn = compare;
    match->compare[match->num].data = compare_data;
    match->num++;
}

 2 component_master_add_with_match

int component_master_add_with_match(struct device *dev,
    const struct component_master_ops *ops,
    struct component_match *match)
{
    struct master *master;
    int ret;

    if (ops->add_components && match)
        return -EINVAL;

    if (match) {
        /* Reallocate the match array for its true size */
        match = component_match_realloc(dev, match, match->num);
        if (IS_ERR(match))
            return PTR_ERR(match);
    }

    master = kzalloc(sizeof(*master), GFP_KERNEL);
    if (!master)
        return -ENOMEM;

    master->dev = dev;
    master->ops = ops;
    master->match = match;
    INIT_LIST_HEAD(&master->components);

    /* Add to the list of available masters. */
    mutex_lock(&component_mutex);
    list_add(&master->node, &masters);

    ret = try_to_bring_up_master(master, NULL); // 执行master->ops->bind,传入上面的master->dev

    if (ret < 0) {
        /* Delete off the list if we weren't successful */
        list_del(&master->node);
        kfree(master);
    }
    mutex_unlock(&component_mutex);

    return ret < 0 ? ret : 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux组件是指构成Linux操作系统的各种程序、工具、驱动程序和库文件等。这些组件可以与其他组件互相协作,构成一个完整的操作系统。常见的Linux组件包括内核、shell、GUI、文件系统、网络、安全等。这些组件可以根据需要进行安装、升级或删除。Linux组件的开放性和可自由定制性是它的重要特点之一。 ### 回答2: Linux组件是指用于构建和运行Linux操作系统的各种软件和工具。Linux操作系统是基于开源原则开发的操作系统,因此它的组件也是开源的。 Linux的核心组件是内核,即Linux kernel。内核是操作系统的核心部分,负责管理系统的硬件和软件资源,提供各种系统调用和驱动程序,控制进程和进行任务管理。Linux内核是由Linus Torvalds率领的开源社区开发的。 除了内核外,Linux还有许多其他重要的组件,如GNU工具(GNU Utilities)、Shell(命令行解释器)、图形界面环境(如X Window System)、GNOME和KDE等桌面环境、网络协议栈(如TCP/IP协议栈)、文件系统等等。 GNU工具是一套命令行工具集,包括常用的命令和实用程序,如:ls、cp、mv、find、grep等等。Shell是用户与操作系统交互的接口,用户可以通过Shell输入命令并执行各种操作。 图形界面环境提供了相对友好的操作界面和多任务支持,使得用户可以通过鼠标和键盘来操作系统。GNOME和KDE是两个常见的Linux桌面环境,提供了各种应用程序和工具,方便用户进行图形化操作。 网络协议栈处理网络通信,包括网络协议的处理、数据传输和网络连接等。常用的网络协议栈有TCP/IP协议栈,它是互联网中标准的网络协议。 文件系统负责管理和组织存储在存储设备上的文件和目录,如EXT4、XFS等。 总之,Linux组件是构成Linux操作系统的各种软件和工具的集合,通过这些组件可以构建一个完整的、自由开放的操作系统。这些组件的开源特性使得Linux发展迅速,并且广泛应用于服务器、嵌入式设备、个人电脑和移动设备等各个领域。 ### 回答3: Linux组件指的是构成Linux操作系统的各种重要元素或组件。Linux是一个开源操作系统,由众多的组件组合而成,每个组件负责不同的功能和任务。 Linux操作系统的组件包括内核、Shell、文件系统、驱动程序、库文件和应用软件等。 内核是Linux操作系统的核心部分,负责管理和分配硬件资源,处理进程调度和内存管理等功能。它是操作系统的灵魂,控制着整个系统的运行。 Shell是用户与操作系统之间的接口,提供了命令行界面(CLI)和图形界面(GUI)两种方式,用户可以通过Shell来与系统进行交互和执行命令。 文件系统是用于组织和管理存储设备上的文件和目录的方法,Linux支持多种文件系统,包括ext4、XFS、Btrfs等,它们提供了高效的文件管理和数据存储功能。 驱动程序是用于和硬件设备进行通信的软件,它们与内核密切相关,负责驱动硬件设备的正常运行。 库文件是一组预先编译的可重用代码,为应用程序提供了一些常用的函数和功能,方便开发人员进行程序设计和开发。 应用软件是用户在Linux操作系统上运行的各种程序和工具,包括文档编辑工具、图形处理软件、开发工具等,它们丰富了Linux操作系统的功能和应用领域。 以上是Linux组件的简要介绍,每个组件都扮演着不同的角色,共同构建了功能强大且灵活的Linux操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值