Linux内核代码格式审查
Linux内核代码格式审查前言Linux内核代码有一套自己的代码格式规范,相关的规范说明在内核代码树目录:Documentation/CodingStyle或Documentation/process/coding-style.rst。具体细节大家可以自己去看,这里就不贴了。
以前提交内核补丁,一直用scripts/checkpatch.pl来过一遍代码格式,没怎么去研究。最近刚好检查格式报了个错,以前没怎么遇到,于是就去看了下。
报错信息:
ERROR: do not set execute permissions for source files
从提示上看很明显是源码文件权限问题。
Checkpatch 介绍内核官方与它相关的文档:https://www.kernel.org/doc/html/latest/dev-tools/checkpatch.html下面是它的介绍(保持原汁原味):
Checkpatch (scripts/checkpatch.pl) is a perl script which checks for trivial style violations i ...
Linux内核模块加载及更新问题
Linux内核模块加载及更新问题背景最近碰到了一个Linux内核模块更新问题,比较有意思,特此记录。
问题: 一款我们内核已经适配过的蓝牙模块在一台机器上用不了,驱动加载不起来,看内核日志报一堆的符号问题:
29.784454] rtk_btusb: Unknown symbol hci_free_dev(err -22)
29.784483] rtk_btusb: disagrees about version of symbol hci_alloc_dev_priv
29.784484] rtk_btusb: Unknown symbol hci_alloc_dev_priv(err-22)
29.784571] rtk_btusb: disagrees about version of symbol hci_unregister_dev
29.784573] rtk_btusb: unknown symbol hci_unregister_dev (err -22)
29.784583] rtk_btusb: disagrees about version of symbol h ...
Linux之设备管理器及热插拔处理
Linux之设备管理器及热插拔处理前言Linux内核设备管理器主要来管理/dev 中的设备节点,并在添加或删除设备时处理所有用户空间操作,比如U盘SD卡等热插拔的处理–自动挂载与卸载。
Linux内核设备管理器主要有mdev,udev和eudev等,今天就简单来看看它们。
mdev是udev的简化版本,是busybox的一部分,最适合用在简单的嵌入式系统,使用 busybox 的地方。
udev是systemd的设备管理器,相对mdev来说要复杂些,一般用在PC上的linux或比较高端点的嵌入式系统,使用 systemd 的地方。
eudev是 udev 的fork版本,所以很多规则这些都是和udev类似,主要是为了独立于systemd等initx系统和Linux发行版。
udev 和 mdev 是两个使用 uevent 机制处理热插拔问题的用户空间程序,两者的实现机理不同。
udev 基于 netlink 机制
mdev 基于 uevent_helper 机制每当设备状态发生变化时,内核都会发出一个 uevent 事件,设备管理器会接收到该事件,根据 uevent 中包含的信息 ...
RISC-V开篇及特权模式等一些概念
RISC-V开篇及特权模式等一些概念
Simplicity is the ultimate sophistication(大道至简)。
概述现在 RISC-V 很火,一直想系统地学习了解下,弄个系列,以前零碎地记了一点。今天算个开篇,主要看看 RISC-V 相关的一些概念,主要的官方文档及书籍等。
RISC-V架构主要由美国加州大学伯克利分校发明,相比于x86和ARM架构,RISC-V开源采用BSD协议,它允许用户自由地使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。计算机体系结构的传统方法是增量ISA,新处理器不仅必须实现新的ISA扩展,还必须实现过去的所有扩展。目的是为了保持向后的二进制兼容性,这样几十年前程序的二进制版本仍然可以在最新的处理器上正确运行。导致了传统ISA的体量随时间大幅增长。而RISC-V是模块化的。它的核心是一个名为RV32I的基础ISA,支持运行一个完整的软件栈。RV32I是固定的,永远不会改变。这为编译器编写者,操作系统开发人员和汇编语言程序员提供了稳定的目标。模块化来源于可选的标准扩展,根据应用程序的需要,硬件可以包含或不包含这些扩 ...
Linux下利用shell简单调试udp和tcp
Linux下利用shell简单调试udp和tcp背景Linux环境下,有时候需要简单地进行下udp和tcp的测试,又不想去写C之类的代码,可以尝试下用Python或者直接用Shell来处理,简单方便,高效快捷。这里主要讲讲使用Shell的方式。
服务端主要使用 nc (netcat) 。
客户端主要使用/dev/tcp、/dev/udp。
nc: — arbitrary TCP and UDP connections and listens
The nc (or netcat) utility is used for just about anything under the sun involving TCP, UDP, or UNIX-domain sockets. It can open TCP connections, send UDP packets, listen on arbitrary TCP and UDP ports, do port scan‐ ning, and deal with both IPv4 and IPv6.
/dev ...
使用Gstreamer进行RTSP推流
使用Gstreamer进行RTSP推流背景以前使用 Gstreamer 推过RTP流,主要涉及到 rtph264pay 插件:
gst-launch-1.0 videotestsrc ! video/x-raw,framerate=30/1 ! clockoverlay ! mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=192.168.1.104 port=1234
使用vlc打开需要配置sdp文件,前面有提到过:https://notes.z-dd.online/2024/06/08/RTP%E8%A7%86%E9%A2%91%E6%B5%81%E7%9A%84SDP%E6%96%87%E4%BB%B6/
最近尝试了推RTSP流,要稍微麻烦点:
# 1. 运行mediamtx流媒体服务器
./mediamtx &
# 2. 运行gstreamer命令
gst-launch-1.0 videotestsrc ! video/x-raw, ...
Linux内核之blktests简单介绍
Linux内核之blktests简单介绍blktests最近遇到了个补丁引起的blktests测试问题,顺便了解了下blktests。
blktests是Linux内核块设备和存储堆栈的一个测试框架。它的灵感来自于xfstests文件系统测试框架。
blktests is a test framework for the Linux kernel block layer and storage stack. It is inspired by the xfstests filesystem testing framework. It was originally written by Omar Sandoval and announced in 2017.
简单使用安装依赖确保安装相关依赖:
bash (>= 4.2)
GNU coreutils
GNU awk
util-linux
fio
gcc
make
有些测试可能要求更多组件:
e2fsprogs and xfsprogs
multipath-tools (Debian, openSUSE, Arch Linu ...
RTP视频流的SDP文件
RTP视频流的SDP文件背景直接通过URL地址(rtp://192.168.1.104:1234)用vlc打开RTP网络流的时候报错:
SDP required:
A description in SDP format is required to receive the RTP stream. Note that rtp:// URIs cannot work with dynamic RTP payload format (96).
后来才想起是需要写sdp文件,所以顺便记录下。
SDP文件
会话描述协议(Session Description Protocol或简写SDP)描述的是流媒体的初始化参数。此协议由IETF发表为 RFC 2327。– 来自百度百科
SDP(Session Description Protocol) 是一种通用的会话描述协议,例如在音视频通话前通话双方需要进行媒体能力协商,比如协商双方都可支持的编解码类型,交换候选地址等,因此通话前都会发送一个 SDP,描述自己的会话和媒体等信息。– 来自CSDN :https://blog.c ...
Linux之多媒体应用接口v4l-utils及摄像头简单使用
Linux之多媒体应用接口v4l-utils及摄像头简单使用简述V4LV4L(Video For Linux, or Video4Linux):
The V4L API is essentially a kernel interface for analog video capture and output drivers, and is applicable to most video streams that are not related to DVB devices (see explanation below) or graphics cards – though, the V4L API also entails a few oddities such as analog radio and RDS services. Examples of devices which fall within the scope of V4L are, amongst others, webcams, MPEG encoders/decoders, digital video strea ...
Linux内核之MMC框架
Linux内核之MMC框架背景之前简单说了说SDIO、SD、MMC之间的区别与联系,具体可见以下链接:
https://notes.z-dd.online/2024/01/19/MMC%E5%92%8CSD%E4%B8%8ESDIO/
最近刚好看到这块,今天来看看Linux内核中关于它们的MMC框架。
软件架构Linux内核中,SDIO、SD、MMC相关的驱动都由MMC框架来管理。其主要的软件架构如下图所示:
和一般的框架类似,可以分为横向的“从左到右”和纵向的“从上到下”两个种层次结构。
横向的“从左到右”MMC属于一种总线驱动,所以主要包括Host、Bus、Card三类实体(从左到右),软件上也是一一对应:
host,负责驱动Host controller,提供诸如访问card的寄存器、检测card的插拔、读写card等操作方法。从设备模型的角度看,host会检测卡的插入,并向bus注册MMC card设备;
bus,是MMC bus的虚拟抽象,以标准设备模型的方式,收纳MMC card(device)以及对应的MMC driver(driver);
card,抽象具体的MMC ...
Linux之Gstreamer实现视频OSD
Linux之Gstreamer实现视频OSD背景何为OSD?
OSD(on-screen display)即屏幕菜单式调节方式。一般是按Menu键后屏幕弹出的显示器各项调节项目信息的矩形菜单,可通过该菜单对显示器各项工作指标包括色彩、模式、几何形状等进行调整,从而达到最佳的使用状态。—— 百度百科
简单点说就是在视频上叠加一个自定义的图层显示,主要包括字符,图片,图形等。
Gstreamer是啥?
GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing.
Applications can take advantage of advances in codec and filte ...
红外热成像下篇--叠加字符OSD
红外热成像下篇–叠加字符OSD背景前段时间不是玩了下红外热成像,视频可见我的公众号和视频号:
还有个瑕疵:视频上没有实时显示相应的温度(叠加在视频上),这段时间就把它给实现了,视频可见我的公众号和视频号。
在视频上实现温度信息叠加,里面一个主要技术点就是字符OSD,这里使用了一种IPC芯片通用的字符OSD方案(RK、海思等方案都适用):freetype + sdl + Soc的图层处理硬件模块。
首先介绍下前面这3个东东:
freetype:
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。
sdl:
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。现SDL多 ...