Linux
文章平均质量分 61
ch3rry
每天早上醒来,看见你和阳光都在,这就是我想要的未来。
展开
-
Linux异步IO引擎:io-uring
Phoronix 报道称,IO_uring 可以说是 Linux 内核近期引入的最大创新之一,因其能够显著提升移步输入/输出(async I/O)的效率。一句话总结 io_uring 就是:一套全新的 syscall,一套全新的 async API,更高的性能,更好的兼容性,来迎接高 IOPS,高吞吐量的未来。先看一下性能数据(数据来自 Jens Axboe)。4k randread,3D Xpoint 盘:Interface QD Polled Latency原创 2021-06-01 15:56:24 · 638 阅读 · 0 评论 -
linux shell中>/dev/null 2>&1
重定向绑定>/dev/null 2>&1。这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。1. >/dev/null这条命令的作用是将标准输出1重定向到/dev/null中。 /dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。2. 2>&1这条命令用到了重定向绑定,采用&a原创 2021-04-23 10:42:12 · 192 阅读 · 0 评论 -
GDB调试基本命令
GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序;2、可让被调试的程序在你所指定的调置的断点处停住;(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生原创 2020-07-12 20:24:14 · 382 阅读 · 0 评论 -
Linux网络编程-很全面
注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意。1. LINUX网络编程基础知识11.1. TCP/IP协议概述11.2. OSI参考模型及TCP/IP参考模型11.3. TCP协议31.4. UDP协议51.5.协议的选择62.网络相关概念62.1. socket概念72.2. socket类型82.3. socket信息数据结构82.4.数据存储优先顺序的转换82.5.地址格式转化92.6.名字地址转化10...转载 2020-05-11 22:47:09 · 429 阅读 · 0 评论 -
用户态和内核态的理解
1、linux进程有4GB地址空间,如图所示:3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。2、特权级的概念:对于任何操作系统来说,创建一个进程是核心功能。创建进程要做很多工作,会消耗很多物理资源。比如分配物理内存,父子进程拷贝信息,拷贝设置页目录页表等等,这些工作得由特定的进程去做,所以就有了特权级别的概念。最关键的工作...原创 2020-04-10 12:18:22 · 195 阅读 · 0 评论 -
Linux中/proc目录下文件详解
Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。可以使用的文件随系统配置的变化而变化。命令procinfo能够显示基于其中某些文件的多种系统信息。以下详细描述/proc下的文件。/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提...原创 2020-04-02 21:27:09 · 1075 阅读 · 0 评论 -
memcpy小结
1、memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制拷贝的字节数;函数原型:void *memcpy(void *dest, void *src, unsigned int count);用法:(1)可以拷贝任何类型的对象,因为函数的参数类型是void*(未定义类型指针),也就是说传进去的实参可原创 2015-08-25 15:28:14 · 405 阅读 · 0 评论 -
如何使用反编译软件得到源码
用解压软件解压code.apk得到code文件解压然后将classes.dex拷贝到解压后的把文件夹中进入cmd原创 2015-09-23 20:21:27 · 2448 阅读 · 0 评论 -
memset总结
前段发现一个问题,程序总是在某个dynamic_cast进行动态转换时出异常,查了半天才发现问题原来是出在memset的使用上,虽然问题本身显而易见,但当处于几十万行代码量级中时,就变得不太那么容易定位了。本文归纳了下使用memset几个需要注意的地方:1. memset是以字节为单位,初始化内存块。当初始化一个字节单位的数组时,可以用memset把每个数组单元初始化成任何你想原创 2015-08-27 11:07:13 · 342 阅读 · 0 评论 -
音视频编解码学习详解h264 ,mpeg4 ,aac 等音视频格式
编解码学习笔记(一):基本概念媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采原创 2015-08-26 08:59:21 · 2765 阅读 · 1 评论 -
relayfs介绍
relayfs介绍Relay 是一种从 Linux 内核到用户空间的高效数据传输技术。通过用户定义的 relay 信道,内核空间的程序能够高效、可靠、便捷地将数据传输到用户空间。通过灵活运用改造也可双向传输。Relay 特别适用于内核空间有大量数据需要传输到用户空间的情形。Relay 的前身是 RelayFS,即作为 linux 的一个新型文件系统,即用虚拟文件系统的方式(内核创建,用转载 2017-09-04 23:01:39 · 708 阅读 · 0 评论 -
Linux音视频(V4L2运行原理)
Linux内核用一个被称为V4L2的机制来管理摄像头图像信息,它的核心工作原理就像日本料理店常见的流转餐桌,大厨将美食不断放到空盘子里,客人不断拿来吃。拓展:在内核中,摄像头所捕获的视频数据,我们可以通过一个队列来存储,我们所做的工作大致是这样的:首先配置好摄像头的相关参数,使之能正常工作,然后申请若干个内核视频缓存,并且将它们一一送到队列中,就好比三个空盘子被一一放到传送带上一样。...转载 2017-09-28 21:54:16 · 870 阅读 · 0 评论 -
gstreamer,vlc,ffmpeg比较
gstreamer,vlc,ffmpeg都是开源处理流媒体的软件,这里的比较不涉及功能,仅仅比较源代码。大约看了一个星期,对这三个 软件都略有了解,简单的谈谈。0、开发语言都是使用c语言开发,ffmpeg最为简洁;gstreamer使用了gobject,晦涩;1、注释vlc的代码完全没有注释,官网也没有任何文档;gstreamer的官网上有开转载 2017-11-09 18:22:38 · 5520 阅读 · 0 评论 -
vlc和gstreamer的跨平台移植
一般播放器的结构框图如图1所示,要将移植一个具有完整功能的开源播放, 结合本人成功移植过gstreamer和vlc到Novatek 667平台的经验, 必须要考虑图1中所有模块的移植。图中的vendor表示设备厂家,soc表示芯片厂家。 图1 播放器的一般结构12下面结合linux及android平台的vlc,gstreamer的移植经验,介绍一下li转载 2017-11-09 18:23:52 · 974 阅读 · 0 评论 -
Linux下c语言多线程编程
引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 使用转载 2017-11-10 18:08:29 · 8658 阅读 · 1 评论 -
linux下打包文件夹
tartar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。常用格式:单个文件压缩打包 tar czvf my.tar file1多个文件压缩打包 tar czvf my.tar file1 file2,...单个目录压缩打包 tar czvf my.tar dir1多个目录压缩打包 tar czvf my.tar dir1 dir2解包至当前目录:tar x转载 2017-11-13 10:41:12 · 1689 阅读 · 0 评论 -
Linux音频设备两种框架OSS和ALSA驱动
在Linux中,先后出现了音频设备的两种框架OSS和ALSA,本节将在介绍数字音频设备及音频设备硬件接口的基础上,展现OSS和ALSA驱动的结构。17.1~17.2节讲解了音频设备及PCM、IIS和AC97硬件接口。17.3节阐述了Linux OSS音频设备驱动的组成、mixer接口、dsp接口及用户空间编程方法。17.4节阐述了Linux ALSA音频设备驱动的组成、card和组件管转载 2017-11-13 11:45:59 · 2118 阅读 · 0 评论 -
Linux ALSA声卡驱动之一:ALSA架构简介
一. 概述 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,转载 2017-11-13 11:47:21 · 206 阅读 · 0 评论 -
Makefile经典教程(掌握这些足够)
该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.csdn.net/haoel/article/details/2886makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional转载 2017-11-13 13:30:01 · 220 阅读 · 0 评论 -
linux进程间通信(IPC)机制总结
在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。在linux下有多种进程间通信的方法:半双工管道、命名管道、消息队列、信号、信号量、共享内存、内存映射文件,套接字等等。使用这些机制可以为linux下的网络服务器开发提供灵活而又坚固的框架。1. 管道 (PIPE) 管道实际是用于进程间转载 2017-11-13 13:44:54 · 5028 阅读 · 0 评论 -
V4L2的使用及运行机制
v4l2 操作实际上就是 open() 设备, close() 设备,以及中间过程的 ioctl() 操作。对于 ioctl 的调用,要注意对 errno 的判断,如果调用被其他信号中断,即 errno 等于 EINTR 的时候,要重新调用。Video capture device 的实际功能就是采集视频信号,并将数字化的图像保存在 memory 中,现在几乎上所有的相关设备都能采集 25转载 2017-09-28 22:12:12 · 1487 阅读 · 0 评论 -
线程同步与互斥:互斥锁
为什么需要互斥锁?在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在此刻使用打印机打印东西,如果不做任何处理的话,打印出来的东西肯定是错乱的。下面我们用程序模拟一下这个过程,线程一需要打印“ hello ”,线程二需要打印“ world ”,不加任何处理的话,打印出转载 2017-11-14 17:35:28 · 277 阅读 · 0 评论 -
Linux下的I2S驱动
1、I2S概述既然要学习I2S,就要想、首先知道他是干什么用的。I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的转载 2017-11-15 13:55:47 · 3954 阅读 · 0 评论 -
git & repo代码管理常用命令
git pull –rebase //保留本地修改, 更新其他文件为最新版本git commit -am “temp” //先提交, 暂定log描述是”temp” -m只允许一行messagegit commit --amend //修改log描述(有标准格式) -amend可编辑成多行文字git log --stat //检查原创 2017-11-15 14:23:31 · 385 阅读 · 0 评论 -
彻底理解I/O架构
一个系统要能正确工作,必须要有数据通道(data paths)的机制,软件和硬件系统都概莫能外。对于计算机系统而言,必须要有data paths的机制来确保CPU, RAM和I/O设备之间的信息数据能正确的流动。这些data paths,通常被称为总线(BUS),是计算机内部主要的通信通道。 为什么英文总线叫bus呢?我们知道:公共汽车BUS会在每个站台上停靠并让乘客搭乘。总线也有类转载 2017-12-08 15:07:13 · 1253 阅读 · 0 评论 -
如何利用git制作和提交patch
UNIX世界的软件开发大多都是协作式的,因此,Patch(补丁)是一个相当重要的东西,因为几乎所有的大型UNIX项目的普通贡献者,都是通过 Patch来提交代码的。作为最重要的开源项目之一,Linux,也是这样的。普通开发者从软件仓库clone下代码,然后写入代码,做一个Patch, 最后用E-mail发给Linux Kernel的维护者就好了。Git最初作为Linux的版本控制工具,提供了透转载 2017-12-02 22:37:01 · 442 阅读 · 0 评论 -
V4L2框架分析学习
Author:CJOKContact:cjok.liao#gmail.comSinaWeibo:@廖野cjok 1、概述Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。就像公司的老板一般都不会直接转载 2017-12-04 20:09:13 · 219 阅读 · 0 评论 -
GDB命令大全
学习使用了GDB一段时间后,发现它真的好强大!好用!GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:转载 2017-12-04 20:11:19 · 202 阅读 · 0 评论 -
linux驱动模型开发——linux platform总线机制讲解与实例开发
概述:通常在Linux中,把SoC系统中集成的独立外设单元(如:I2C、IIS、RTC、看门狗等)都被当作平台设备来处理。从Linux2.6起,引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver,来管理相应设备。Linux中大部分的设备驱动,都可以使用这套机制,设备用platform_device表示,驱动用platform_driver进行注册。Li...转载 2018-03-26 21:44:22 · 214 阅读 · 0 评论 -
Linux 下的DMA浅析
DMA是一种无需CPU的参与就可以让外设和系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。DMA经常与硬件体系结构特别是外设的总线技术密切相关。一、DMA控制器硬件结构 DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统。每一种体系结构DMA传输不同,编程接口也不同。数据传输可以以...转载 2018-04-23 22:59:03 · 284 阅读 · 0 评论 -
Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析
https://blog.csdn.net/zqixiao_09/article/details/50859759一、VFS 虚拟文件系统基础概念 Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文...转载 2018-04-23 23:20:15 · 223 阅读 · 0 评论 -
kzalloc & kmalloc
kernel里定义:[Csharp] view plain copy/** * kzalloc - allocate memory. The memory is set to zero. * @size: how many bytes of memory are required. * @flags: the type of memory to allocate (see kmalloc)....原创 2018-05-09 17:00:08 · 381 阅读 · 0 评论 -
Linux设备驱动模型
尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备驱动模型的学习非常重要。Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述。换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要新添加设备或驱动提供一般性的统一接口,这使得驱动程序的开发变得更简单了,而...转载 2018-05-07 16:51:29 · 191 阅读 · 0 评论 -
linux设备驱动模型之总线、设备、驱动三者的关系
总线、设备、驱动,也就是bus、device、driver,在内核里都有对应的结构体,在include/linux/device.h 里定义。Device.h (linux-3.4.2\include\linux)1、总线、设备、驱动三者的关系2、结构体(1)总线结构体[cpp] view plain copystruct bus_type { const char *name...转载 2018-05-07 16:54:59 · 580 阅读 · 0 评论 -
Linux内核修炼之framebuffer分析
Linux源码包中/document/fb/framebuffer.txt有如下介绍:The frame buffer device provides an abstraction for the graphics hardware. It represents the frame buffer of some video hardware and allows application softw...转载 2018-05-07 17:55:38 · 324 阅读 · 0 评论 -
Linux Framebuffer驱动剖析之二—驱动框架、接口实现和使用
深入分析LinuxFramebuffer子系统的驱动框架、接口实现和使用。一、LinuxFramebuffer的软件需求 上一篇文章详细阐述了LinuxFramebuffer的软件需求(请先理解第一篇文章再来阅读本篇文章),总结如下: 1. 针对SOC的LCD控制寄存器进行编程,以支持不同的LCD屏,以使该SOC的应用场景最大化。这是硬件平台相关的需求。其对应Linux源码路径arch\arm\m...转载 2018-05-07 17:56:14 · 318 阅读 · 0 评论 -
module_init 和 late_initcall
在init.h 中有如下定义 #define pure_initcall(fn) __define_initcall("0",fn,1)#define core_initcall(fn) __define_initcall("1",fn,1)#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)#define postcore...原创 2018-05-08 18:04:51 · 554 阅读 · 0 评论 -
Linux内核访问外设IO资源
我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。 Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映射(map_desc)。 一、动态映射(ioremap)方式 动态映射方式是大家使用了比较多的,也比较简单。即直接通过内核提供的i...转载 2018-05-16 09:46:11 · 803 阅读 · 0 评论 -
Linux 内核 SCSI IO 子系统分析
概述LINUX 内核中 SCSI 子系统由 SCSI 上层,中间层和底层驱动模块 [1] 三部分组成,主要负责管理 SCSI 资源和处理其他子系统,如文件系统,提交到 SCSI 子系统中的 IO 请求。因此,理解 SCSI 子系统的 IO 处理机制对理解整个 SCSI 子系统就显的十分重要,同时也有助于理解整个 LINUX 内核的 IO 处理机制。本文从 SCSI 设备访问请求的提交,SCSI 子...原创 2018-05-16 10:00:14 · 353 阅读 · 0 评论 -
Linux 文件操作总结
文件是linux中的一个重要概念。在Linux中,一切(几乎一切)都是文件。简单的说,C中基本的的printf()函数,scanf()函数,其实都属于文件操作。对于文件操作,虽然都是通过函数调用的方式实现,却还是能分为两类:系统调用和库函数。这篇文章将先介绍linux中文件的概念,系统调用和库函数的概念 ,然后具体的讨论两种方式下的文件操作。博文的主要内容如下:Linux 中的文件文件访问-库函数...转载 2018-05-28 17:07:31 · 197 阅读 · 0 评论