主页

Linux驱动开发之并发控制

概述 并发(Concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(Race Conditions)。 在Linux内核中,主要的竞态发生于如下几种情况: 对称多处理器(SMP)的多个CPU 单CPU内进程与抢占它的进程 中断(硬中断、软中断、Tasklet、底半部)与进程之间 解决竞态问题的途径是保证对共享资源的互斥访问,所谓互斥访问是指一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问。访问共享资源的代码区域称为临界区(Critical Sections),临界区需要被以某种互斥机制加以保护.以下是一些实现并发...

阅读更多

Linux驱动开发之字符设备

驱动结构 结构如图: cdev结构体 在Linux内核中,cdev结构体是表示字符设备的结构体之一。字符设备是一种特殊类型的设备,它以字符为单位进行输入和输出,例如终端、串口等。 cdev结构体用于表示字符设备,它包含了所有与该设备相关的信息和属性。cdev结构体定义在头文件<linux/cdev.h>中,其定义如下: struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int count; }; ...

阅读更多

Linux驱动开发之设备文件

devfs devfs是一种特殊的文件系统,用于在Linux内核中管理设备文件。在早期版本的Linux内核中,设备文件是通过手动创建和管理的,但是随着系统设备数量的增加,这变得越来越困难。 devfs解决了这个问题,它是一种动态的文件系统,可以自动创建和删除设备文件。当一个设备被添加到系统中时,devfs会自动为其创建一个设备文件,并在设备被删除时删除该文件。 devfs的优点包括: 简化设备文件的管理 允许设备文件的动态创建和删除 提高系统的可靠性和稳定性 但是,devfs在现代Linux内核中已经被udev取代,因为udev提供了更多的功能和灵活性。因此,如果您正在使用最新版本的Linux内核,您不需要了解devfs的详细信息。 udev udev是L...

阅读更多

Linux驱动开发之文件系统

简介 Linux系统中采用的文件系统有很多种,以下是一些常用的文件系统: ext4:是Linux系统中使用最广泛的文件系统,支持文件大小高达1EB(EB级别的文件系统尚未被广泛使用)。它支特数据日志和元数据日志,提供了更好的文 件系统稳定性。 XFS:是一种高性能的日志文件系统,适用于大容量文件系统和强烈的/○操作。它支特高速读取和写入,可以处理大量的小文件和大文件 Bts:是一种新的文件系统,支持快照、压缩、多设备、白动修复等功能。它是一个多用途的文件系统,可以适用于很多场景。 NTFS:是一种Windows系统中常用的文件系统,Linux系统中也可以读取和写入NTFS文件系统。但由于其专有技术,Linux系统不能直接使用NTFS文件系统。 FAT32:是一...

阅读更多

Linux驱动开发之内核模块

一、简介 在Linux系统中,内核模块是指一段可加载的代码,可以动态地插入(移除)到内核中,以扩展或修改内核的功能。内核模块是Linux内核的一个重要组成部分,它们允许用户或开发人员在不重新编译整个内核的情况下修改或扩展内核功能。内核模块可以实现许多功能,例如添加文件系统、设备驱动程序、网络协议栈等。它们通常编写在C语言中,并使用内核AP进行偏程。内核模块的代码必须遵循内核的编程规范,并且必须经过内核源代码的编译和链接才能成为可加载的内核模块。内核模块可以通过命令行或在系统启动时自动加载。一旦内核模块被加载,它会在内核中创建个新的模块对象,并将其添加到内核模块列表中。内核模块可以通过内核模块接口与内核进行通信,例如获取内核参数、注册设备驱动程序等。总之,内核模块是Linux系统中一个...

阅读更多

cmake之string命令

string 查找 string(FIND <string> <substring> <output_variable> [REVERSE]) 在中查找,返回值存放于,找到则返回在中的下标,找不到返回-1。默认为首次出现的匹配,如果使用了REVERSE则为最后一次匹配。注:下标从0开始,以字节做为单位,因此遇到中文时下标表示字符编码第一字节的位置。 替换 string(REPLACE <match_string> <replace_string> <output_variable> <input> [<input>...]) 从所有 …中查找并使用替换,替换后的字符串存...

阅读更多

qemu搭建Linux学习环境

背景 最近在学习Linux的内核驱动,就想在Linux环境下搭建一个运行Linux的环境。了解到qemu可以满足我的需求,就折腾了一下。 参考1 参考2 环境 VM虚拟机 Ubuntu 20.04 安装 vm虚拟机和Ubuntu安装 参考链接 vbox虚拟机和ubuntu安装 参考链接 相关工具链 命令行终端下输入: sudo apt-get update sudo apt-get install -y git gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev ...

阅读更多

音频编码之Opus

概述 Opus是一个有损音频压缩的数字音频编码格式,由Xiph.Org基金会开发,之后由互联网工程任务组(IETF)进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis,且适用于网络上低延迟的即时声音传输,标准格式定义于RFC 6716文件。Opus格式是一个开放格式,使用上没有任何专利或限制。 Opus集成了两种声音编码的技术:以语音编码为导向的SILK和低延迟的CELT。Opus可以无缝调节高低比特率。在编码器内部它在较低比特率时使用线性预测编码在高比特率时候使用变换编码(在高低比特率交界处也使用两者结合的编码方式)。Opus具有非常低的算法延迟(默认为22.5 ms),非常适合用于低延迟语音通话的编码,像是网络上的即时声音流、即时同步声音旁白等等,此外...

阅读更多