码农知识堂 - 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
  • 相关阅读:
    K8s二进制安装部署
    第四章redis配置文件的介绍
    mysql 索引
    zabbix
    ElasticSearch7.3学习(二十)----采用restful风格查询详解
    【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
    IPSec 协议族的理解
    Github标星35K+超火的Spring Boot实战项目,附超全教程文档
    基于分布式光纤传感的高压电力线路异常监测探讨
    在STS里使用Gradle编译Apache POI5.0.0
  • 原文地址:https://blog.csdn.net/lh0616/article/details/134193494
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号