码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C 语言左移位操作在kernel驱动子系统中的特殊用途


    文章目录

    • 前言
    • 一、C语言左移位操作介绍
      • 1. 左移位
    • 二、左移位操作在kernel 驱动子系统中的应用
      • 1. 左移位操作在 V4L2, Media 子系统中的应用实例
      • 2.左移位操作在 DRM 子系统中的应用实例
      • 2.1 左移位操作在struct drm_crtc 中的应用
      • 2.2 左移位操作在struct drm_encoder 中的应用
    • 总结


    前言

    `本文主要介绍C语言的移位操作(左移<<)在 Linux kernel 一些驱动子系统(V4L2, Media, DRM等)中的应用


    一、C语言左移位操作介绍

    1. 左移位

    左移位就是将一个数的各二进制位全部左移若干位,右边空出的二进制位补0,每左移 1 位原数就相当于乘2;
    例子:
    5 左移两位 相当于 5 * 2 * 2 = 20
    20 = 5 << 2
    十进制5 等于 二进制 0b101
    将 0b101 左移 2 位 后变为 0b10100
    将二进制 0b10100 转成十进制就是20

    即:x << n = x * 2^n (5 << 2 = 5 * 2^2)

    二、左移位操作在kernel 驱动子系统中的应用

    1. 左移位操作在 V4L2, Media 子系统中的应用实例

    Media 子系统中有pipeline 的概念,如下图所示是一个具有多图层合成功能的硬件的 pipeline 框图(支持最多5个图层输入和1个图层输出)
    5个输入图层和1个输出图层 分别和 6 个对应的**/dev/video***节点对应
    在这里插入图片描述
    如下是 pipeline 工作的主要代码逻辑

    因为唯一的输出图层是一定在pipeline 里面的,固可以给这个pipe 赋值一个固定的pipe index, 这里赋为0,其他可选的输入图层如果参与 
    pipeline 的组成,那也需要赋一个特定的pipe index 值(非 0 值)
    
    //初始化
    pipeline->num_inputs = 0;
    pipeline->buffers_ready = 0;
    
    //给该 pipeline 中的各个图层赋一个index       
    output->pipe_index = 0;           //给输出图层的index 赋值为0
    
    //判断有哪些图层使能,并给其赋一个index
    for(i=0; i < 5; i++) {
       
    	if (input[i]->pipe_enable) {
       
    		pipeline->num_inputs++;
    		input
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    【网络安全】学过编程就是黑客?
    Web前端:如何为Web应用程序开发找到合适的技术堆栈?
    智能驾驶ADAS算法设计及Prescan仿真(2): 自适应巡航ACC控制策略设计与simulink仿真
    玩转华为ENSP模拟器系列 | IPSec网关负载分担双机热备,隧道之间不备份
    postgresql 实践
    CS217 2_BLAS Hardware Accelerators for Machine Learning
    达梦日志分析工具DMLOG使用
    【 Linux 】密钥对登录Ubuntu 20.04
    springboot项目:订单生成和沙箱支付
    华为手机一键解锁工具箱下载 | 华为手机解BL锁软件: 支持解锁bootloader,刷写recovery功能
  • 原文地址:https://blog.csdn.net/lh0616/article/details/134193494
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号