LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

2024年4月17日

Linux Media子系统:Media Controller设备

摘要: 关键词:Media、Device、Entity、Pad、Link、Interface、Graph、Pipeline等等。 Media Framework一个目的是发现设备内部拓扑结构,并对其进行运行时配置。 为此硬件被被抽象为通过Pad连接的Entity,Pad之间的连接称为Link。 1 Medi 阅读全文

posted @ 2024-04-17 23:59 ArnoldLu 阅读(3) 评论(0) 推荐(0) 编辑

2024年4月16日

Linux v4l2子系统(11):UVC驱动分析

摘要: UVC即USB Video Class,可以看出是基于USB接口的视频设备。相关规范在Video Class,目前最新的版本是Video Class 1.5。 uvc_driver.c:UVC驱动的主体。 uvc_v4l2.c:主要实现了uvc_fops和uvc_ioctl_ops两个数据结构。 u 阅读全文

posted @ 2024-04-16 23:59 ArnoldLu 阅读(8) 评论(0) 推荐(0) 编辑

2024年4月15日

Linux v4l2子系统(10):基于opencv的v4l2应用

摘要: 关键词:v4l2、OpenCV、mmap、ioctl。 Ubuntu下cheese非常简洁易用的拍照/录像工具,通过apt-get install cheese安装。相关的源码也可以在cheese.git下载。 如果想要更深入的了解v4l2的相关使用方法,就需要对v4l2设备进行编程。 首先通过编写 阅读全文

posted @ 2024-04-15 23:59 ArnoldLu 阅读(28) 评论(0) 推荐(0) 编辑

2024年4月14日

Linux v4l2子系统(9):libv4l2

摘要: libv4l是一个对v4l2设备抽象层,包括一系列库文件和测试程序。 1 v4l2库文件 libv4l1.so:支持v4l1应用访问v4l2设备。 libv4l2.so:支持对v4l2设备的open/ioctl/close/poll等访问。 libv4l2convert.so:是为v4l2应用使用的 阅读全文

posted @ 2024-04-14 23:59 ArnoldLu 阅读(21) 评论(0) 推荐(0) 编辑

2024年4月13日

Linux v4l2子系统(8):Rockchip ISP

摘要: 关键词:ISP、DMA等等。 1 Rockchip ISP的dts配置和初始化 rkisp0是硬件设备节点: rkisp0: rkisp@fdcb0000 { compatible = "rockchip,rk3588-rkisp"; reg = <0x0 0xfdcb0000 0x0 0x7f00 阅读全文

posted @ 2024-04-13 23:59 ArnoldLu 阅读(27) 评论(0) 推荐(0) 编辑

2024年4月12日

Linux v4l2子系统(7):CIF(VICAP)

摘要: 关键词:CIF、Interface、Crop、MUX、Scale、IOMMU、MIPI、PVDS、DVP等等。 1 VICAP框架图 VICAP负责从DVP/MIPI接收数据,将数据通过AXI存入内存,或者直接送到ISP,包括如下组件: Interface:和DVP/MIPI CSI接口对接,共7个 阅读全文

posted @ 2024-04-12 23:59 ArnoldLu 阅读(22) 评论(0) 推荐(0) 编辑

2024年4月11日

Linux v4l2子系统(6):MIPI CSI2

摘要: 关键词:CSI2、endpoint、Entity、Pad等。 1 CSI2 Host架构图 2 CSI Host的DTS配置和初始化 mipi2_csi2: mipi2-csi2@fdd30000 { compatible = "rockchip,rk3588-mipi-csi2"; reg = < 阅读全文

posted @ 2024-04-11 23:59 ArnoldLu 阅读(17) 评论(0) 推荐(0) 编辑

2024年4月10日

Linux v4l2子系统(5):MIPI DPHY

摘要: 1 CSI2 DPHY框架图 2 CSI2 DPHY的DTS配置和初始化 csi2_dphy0_hw中定义了DPHY的硬件信息: csi2_dphy0_hw: csi2-dphy0-hw@fedc0000 { compatible = "rockchip,rk3588-csi2-dphy-hw"; 阅读全文

posted @ 2024-04-10 23:59 ArnoldLu 阅读(8) 评论(0) 推荐(0) 编辑

2024年4月9日

Linux v4l2子系统(4):I2C&OV13850

摘要: 关键词:ov13850、subdev、media entity pad等等。 1 OV13850原理图 由原理图可知,Camera接口分为三部分: 4 Lane MIPI信号接口。 I2C控制接口。 Powerdown,Reset,供电接口。 2 I2C总线dts配置和初始化 i2c3总线: i2c 阅读全文

posted @ 2024-04-09 23:59 ArnoldLu 阅读(17) 评论(0) 推荐(0) 编辑

2024年4月8日

Linux v4l2子系统(3):video buffer

摘要: 1. videobuffer介绍 videobuf2用于链接v4l2驱动层与用户层,提供数据传输通道,它可以分配并管理视频帧数据。 videobuf层实现了很多ioctl函数,包括buffer分配、入队、出队和数据流控制。 video buffer支持三种类型的struct vb2_mem_ops: 阅读全文

posted @ 2024-04-08 23:59 ArnoldLu 阅读(10) 评论(0) 推荐(0) 编辑

2024年4月7日

Linux v4l2子系统(2):v4l2框架分析

摘要: v4l为Video子系统提供统一框架,驱动通过将v4l2_dev/v4l2_subdev注册到Video子系统,在用户空间创建设备节点。 使用如下命令在kernel(5.10.110)生成driver-api.pdf帮助文件: make SPHINXDIRS="driver-api" pdfdocs 阅读全文

posted @ 2024-04-07 23:59 ArnoldLu 阅读(35) 评论(0) 推荐(0) 编辑

2024年4月6日

Linux v4l2子系统(1):RK3588 VI概述

摘要: 本文从硬件框架、软件框架、Buildroot配置、相关源码、创建Video设备及其关系图,来对整个RK3588 VI有所了解。 1 RK3588 VI硬件框架 RK3588的VI(Video Input)硬件框架包括如下部分: 外部MIPI/LVDS/DVP Camera采集数据,最对支持7路输入( 阅读全文

posted @ 2024-04-06 23:59 ArnoldLu 阅读(60) 评论(0) 推荐(0) 编辑

2024年4月4日

camera:一个基于QT+Weston的Camera应用

摘要: 基于QT UI框架编写camera,作为Wayland Client运行。 QT Multimedia自带的camera示例程序位于examples/multimediawidgets/camera。 Camera Example | Qt Multimedia 5.15.16 1 camera框架 阅读全文

posted @ 2024-04-04 23:59 ArnoldLu 阅读(6) 评论(0) 推荐(0) 编辑

2024年3月29日

基于ldd快速遍历应用/库的依赖关系

摘要: 对于复杂的应用或库文件,要了解其运作原理、架构,通过了解其库依赖关系不失为一种手段。 ldd可以查看单个可执行文件或库文件以来的库,但是库比较多的话不容易有个全局概念。 所以基于ldd编解Python脚本,做个小工具,提供集中查看方式: 直接文本查看类似tree命令输出的属性结构。 xml格式的树形 阅读全文

posted @ 2024-03-29 23:59 ArnoldLu 阅读(27) 评论(0) 推荐(0) 编辑

2024年3月23日

Weston概览:架构、配置、启动、代码

摘要: 关键词:wayland、westom、compositor、render、shell backend等等。 weston是Wayland compositor的参考实现。整个weston解决方案包括Wayland协议实现、Wayland协议定义、weston server、weston默认clien 阅读全文

posted @ 2024-03-23 23:59 ArnoldLu 阅读(313) 评论(0) 推荐(0) 编辑

2024年3月22日

POSIX标准及其一致性/功能/压力测试

摘要: 1 POSIX标准 POSIX: Portable Operating System Interface of Unix.,可移植操作系统接口。X表示其是对Unix API的传承。 POSIX标准由IEEE(电气和电子工程师协会)发布,定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种 阅读全文

posted @ 2024-03-22 23:59 ArnoldLu 阅读(28) 评论(0) 推荐(0) 编辑

2024年3月16日

Linux Graphics Stack(图图图)

摘要: Linux图形相关涉及到硬件、内核驱动、协议API、2D/3D渲染框架、GUI框架、桌面环境等,相当复杂,这里简单收集架构图作为记录。 1 硬件相关 显示相关的有: Displaying:显示器、投影等。包括Display engine、Timings controller、Display inte 阅读全文

posted @ 2024-03-16 23:59 ArnoldLu 阅读(56) 评论(1) 推荐(0) 编辑

2024年3月10日

Ubuntu 22.04内核代码下载、编译、调试

摘要: 1 下载Ubuntu Kernel 参考《Kernel/Dev/KernelGitGuide - Ubuntu Wiki》,下载Ubuntu 22.04代码。 优先使用: apt source linux-image-unsigned-$(uname -r) 或者: git clone https: 阅读全文

posted @ 2024-03-10 23:59 ArnoldLu 阅读(252) 评论(0) 推荐(1) 编辑

2024年3月9日

Linux CAN子系统:基于M_CAN解读

摘要: Linux下CAN驱动属于网络设备驱动。 CAN在内核中大致框架如下: 1 CAN配置 对CAN设备的配置,首先需要打开CAN子系统,然后打开CAN设备驱动,其他还包括调试信息等。 Networking support ->CAN bus subsystem support ->Raw CAN Pr 阅读全文

posted @ 2024-03-09 23:59 ArnoldLu 阅读(144) 评论(0) 推荐(0) 编辑

2024年3月3日

Linux显示(六):基于Buildroot的QT显示(mesa3d+opengl+libdrm)

摘要: Biuldroot下配置libdrm、Mesa3D、Qt5进行测试。 1 Buildroot下QT配置 Buildroot下配置libdrm、mesa3d、Qt5: Target packages ->Libraries ->Graphics ->libdrm ->etnaviv--支持的GPU驱动 阅读全文

posted @ 2024-03-03 23:59 ArnoldLu 阅读(164) 评论(0) 推荐(0) 编辑

2024年3月2日

FIT(2):基于FIT对镜像/配置进行签名和uboot验签启动

摘要: 关键词:hash、sha1、sha256、md5、crc32、rsa、pkcs-1.5、signature等等。 接前文《FIT(1):基于FIT的镜像创建和解析/启动》,重点梳理签名/验签流程和hash校验流程。 mkimage对镜像或者配置进行签名并生成FIT镜像,uboot执行相反的过程解析F 阅读全文

posted @ 2024-03-02 23:59 ArnoldLu 阅读(188) 评论(0) 推荐(0) 编辑

2024年3月1日

Linux显示(一):Framebuffer子系统

摘要: Framebuffer是向应用层提供统一标准显示设备的接口,将显示设备硬件结构抽象为一系列数据结构。应用程序打开Framebuffer设备后,通过ioctl进行配置,将内存通过mmap映射后直接操作。 Linux中Framebuffer是一个字符设备,一个LCD往往对应多个Framebuffer设备 阅读全文

posted @ 2024-03-01 23:59 ArnoldLu 阅读(62) 评论(0) 推荐(0) 编辑

2024年2月25日

Linux显示(四):libdrm及相关测试工具

摘要: 关键词:libdrm、drm等。 libdrm基于内核DRM,尤其对ioctl命令进行包裹,向上层显示框架提供更易使用的API。 1 libdrm libdrm来自于MESA项目,对open/read/write/ioctl/mmap/close等系统调用进行封装,尤其是对繁杂ioctl的命令调用封 阅读全文

posted @ 2024-02-25 23:59 ArnoldLu 阅读(211) 评论(0) 推荐(0) 编辑

2024年2月24日

Linux显示(三):DRM子系统(以及LCDC/Panel/Backlight驱动)

摘要: 关键词:DRM、CRTC、Plane、Framebuffer、Encoder、Connector、Bridge、Panel、Backlight、GEM、TTM、KMS等等。 DRM(Direct Rendering Manager)是Linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DR 阅读全文

posted @ 2024-02-24 23:59 ArnoldLu 阅读(635) 评论(0) 推荐(0) 编辑

2024年2月23日

Linux显示(二):基于Framebuffer的图形框架和测试工具

摘要: Linux Framebuffer子系统是传统的内核显示框架。有很多基于Frambuffer的用户空间形式框架,以及针对Framebuffer的测试工具。 1. Linux Framebuffer Linux FrameBuffer相关的开源资源《fosdem_2020_nicolas_carame 阅读全文

posted @ 2024-02-23 23:59 ArnoldLu 阅读(104) 评论(0) 推荐(0) 编辑

2024年2月7日

Linux IIO子系统概述(结合STM32 ADC/DAC驱动)

摘要: 关键词:IIO、ADC、DAC、Trigger等等。 IIO(Industrial I/O)主要用于数字量和模拟量转换的IO接口设备。这些设备种类繁多,内部一般都会有一个ADC或者DAC。SOC对这些设备操作可以通过I2C/SPI,或者直接访问寄存器进行。 IIO子系统主要管理抽象这些类别设备: 模 阅读全文

posted @ 2024-02-07 23:59 ArnoldLu 阅读(303) 评论(0) 推荐(0) 编辑

2024年2月6日

Linux线程proc信息解析

摘要: 每个线程对应的/proc/xxx有助于分析线程的各种资源占用情况。之前零零散散做了一些分析,这里总结记录一下。 /proc/183/ |-- auxv |-- cgroup |-- clear_refs |-- cmdline--执行进程的命令行,包括启动参数等等。 |-- comm--进程名称。 阅读全文

posted @ 2024-02-06 23:59 ArnoldLu 阅读(71) 评论(0) 推荐(0) 编辑

2024年2月3日

Linux watchdog子系统概述

摘要: 关键词:watchdog、pretimeout、governor、softdog等等。 watchdog子系统是内核为保证系统正常运行,将系统从死循环或者死锁等状态中退出并重启的一种机制。 内核中支持基于hrtimer的softdog和基于硬件的watchdog。硬件看门狗从dts读取配置,创建同样 阅读全文

posted @ 2024-02-03 15:33 ArnoldLu 阅读(343) 评论(0) 推荐(0) 编辑

2024年1月21日

Linux RTC子系统概述

摘要: 关键词:rtc、date、hwclock、Alarm、WakeAlarm、AIE、PIE、UIE等等。 1 rtc子系统框架 rtc子系统分为三部分: rtc core:负责rtc设备注册注销;对用户空间提供rtc字符设备文件,以及rtc类sysfs接口。 rtc driver:将rtc设备注册到r 阅读全文

posted @ 2024-01-21 23:59 ArnoldLu 阅读(125) 评论(0) 推荐(0) 编辑

2024年1月20日

Linux pwm子系统概述

摘要: 关键词:pwm,period,duty_cycle,polarity,enable等。 1 pwm子系统框架 pwm子系统比较简单: pwm core:提供pwm_chip的添加删除,pwm_class类pwm_chip/pwm_device的sysfs创建。 pwm driver:根据pwm co 阅读全文

posted @ 2024-01-20 23:59 ArnoldLu 阅读(97) 评论(0) 推荐(0) 编辑

2024年1月19日

Linux input子系统概述

摘要: 关键词:input、evdev、mousedev、joydev、rfkill、tslib、evtest等等。 input子系统处理Linux下输入设备。外设接收到输入事件,发送到input core;input core根据事件类型,将事件交给对应的input handler处理,上报用户空间;用户 阅读全文

posted @ 2024-01-19 23:59 ArnoldLu 阅读(188) 评论(0) 推荐(0) 编辑

2024年1月7日

LED/GPIO/pinctrl子系统(3):pinctrl子系统概述

摘要: 关键词:pinctrl、pinmux、pinconf等。 pinctrl可以归结为两类设置:一类是功能选择,比如是普通的GPIO或者专用功能引脚;另一类是上拉、下拉、驱动能力、速率等配置。 pinctrl子系统主要完成如下工作: 初始化pin contrroller,并为其每个pin命名和枚举。 处 阅读全文

posted @ 2024-01-07 23:59 ArnoldLu 阅读(105) 评论(0) 推荐(0) 编辑

2024年1月6日

LED/GPIO/pinctrl子系统(2):GPIO子系统概述

摘要: 关键词:gpiolib、pinctrl、gpio-keys等。 在了解pinctrl基础上,分析GPIO子系统按照如下几方面进行: GPIO总体框架、gpiolib主要文件、menuconfig配置GPIO。 了解gpiolib的主要数据结构和API(GPIO Controller和Consumer 阅读全文

posted @ 2024-01-06 23:59 ArnoldLu 阅读(73) 评论(0) 推荐(0) 编辑

2023年12月30日

LED/GPIO/pinctrl子系统(1):基于GPIO的LED子系统概述

摘要: 关键词:led、gpio、led trigger(heartbeat/netdev/timer)等等。 本系列文档以LED为起点,结合GPIO LED首先了解LED子系统;然后梳理背后的GPIO子系统;进而梳理GPIO子系统背后的pinctrl子系统。 LED子系统为设备提供指示灯、闪光灯等功能,对 阅读全文

posted @ 2023-12-30 23:59 ArnoldLu 阅读(129) 评论(0) 推荐(0) 编辑

2023年12月23日

FIT(1):基于FIT的镜像创建和解析/启动

摘要: 关键词:FIT、mkimage、dtc、its、itb、bootm、initrd、sha256等等、 Kernel中引入的Device Trace概念,将配置信息放入dtb中。达到一个kernel,结合不同dtb适配多个平台。 FIT是Flattened Image Tree的意思,即将多个镜像通过 阅读全文

posted @ 2023-12-23 23:59 ArnoldLu 阅读(244) 评论(0) 推荐(0) 编辑

2023年12月16日

Linux NAND Flash建立分区表的几种方式

摘要: 关键词:cmdline parser、dts parser、cmdline、mtdparts等等。 MTD支持三种创建分区表的方式: cmdline:通过bootargs传入。 dts:在dts中编写。 struct mtd_partition结构体代码:代码中固定配置。 他们的优先级是:分区结构体 阅读全文

posted @ 2023-12-16 23:59 ArnoldLu 阅读(343) 评论(0) 推荐(0) 编辑

2023年12月15日

Linux ARM32内嵌DTB实现

摘要: 大多数方案是将dtb独立,uboot启动kernel时通过r2传递dtb的地址。kernel读取到__atags_pointer,后续解析dtb内容。 内核保留了.dtb.init.rodata用于保存dtb内容,借此实现ARM32下dtb内嵌功能。 1 ARM 32启动__atags_pointe 阅读全文

posted @ 2023-12-15 23:59 ArnoldLu 阅读(70) 评论(0) 推荐(0) 编辑

2023年12月9日

openssh/dropbear使用与对比

摘要: 使用并比较嵌入式常用的SSH解决方案openssh和dropbear。 1 openssh openssh提供SSH服务,包括服务端sshd、客户端ssh、远程文件传输工具scp等一系列工具。 ssh协议有两个版本: v1:基于CRC-32 做MAC,不安全;,一般用于实现主机认证。 v2:基于协议 阅读全文

posted @ 2023-12-09 23:59 ArnoldLu 阅读(844) 评论(0) 推荐(0) 编辑

OpenWRT uhttpd+LuCI初探

摘要: uhttpd是OpenWRT的默认WebServer,通过LuCI OpenWRT提供了统一的配置接口。这里简单了解UCI、Lua、LuCI、luci、uhttpd等基本概念,然后在QEMU环境下启动OpenWRT查看LuCI实例。 1 uhttpd和LuCI的基本概念 UCI(Unified Co 阅读全文

posted @ 2023-12-09 23:59 ArnoldLu 阅读(1041) 评论(0) 推荐(0) 编辑

2023年12月3日

Linux bridge及其配置

摘要: 1. Linux下Bridge原理 1.1 Linux Bridge配置 Kernel要支持Bridge功能,需要打开802.1d Ethernet Bridging: Networking support ->Networking options ->802.1d Ethernet Bridgin 阅读全文

posted @ 2023-12-03 23:59 ArnoldLu 阅读(220) 评论(0) 推荐(0) 编辑

导航