码农知识堂 - 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
  • 相关阅读:
    Autowired注解与Resource注解的区别
    【考研数学】线性代数第五章 —— 特征值和特征向量(1,理论背景与基本概念)
    微信搜索上线竞价广告
    架构师:构建高可用服务治理Consul集群与Kong网关管理
    一文读懂uniapp中的tabBar底部导航
    【LeetCode】每日一题 2023_11_21 美化数组的最少删除数(贪心/模拟)
    “蔚来杯“2022牛客暑期多校训练营7 J题: Melborp Elcissalc
    园子开店记-起名:万事开头难,起名难上难
    maven升级版本后报错:Blocked mirror for repositories
    Maven 生命周期,仓库概念和打包命令区别(package、install、deploy)
  • 原文地址:https://blog.csdn.net/lh0616/article/details/134193494
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号