自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(285)
  • 问答 (2)
  • 收藏
  • 关注

原创 闪存工作原理

闪存有两种分类,NAND型闪存主要用于存储。

2023-09-30 19:47:36 456

原创 Nand Flash基础知识

闪存根据每个单元内可存储的数据量分成SLC(1bit/Cell)、MLC(2bit/Cell)、TLC(3bit/Cell)和QLC(4bit/Cell),成本依次降低,容量依次增大,耐用度也依次降低。要读的单元Wordline=0V,-VT 的管子导通,Bitline端的传感器能够检测到,所以读到“1”,而经过写的+VT的管子不导通,传感器读为“0”。擦除前,浮栅上有可能有电子,Pwell加20V电压,经过足够时间后,由于量子隧道效应,电子从浮栅到沟道里面,完成一个Block的擦除。

2023-04-09 11:46:04 3673 1

原创 如何知道你的Linux内核占用的内存大小?

并且是通过slab分配的内存,所以知道slab的内存大小就知道了kmalloc的大小。其中每个字段的含义可以在内核的文档中找到,路径如下:/Documentation/filesystems/proc.txt。综上所述,当前内核所占用的内存大小为:15824K + 6632KB + 104KB = 22M。所以我们得到这些乱七八糟的段使用的内存大小为(也就是内核保留的内存):15824K。故内核堆内存为: 6060 kB + 572 KB = 6632KB。可以看到进程的页表大小为:104 kB。

2022-11-28 12:03:26 6705

原创 Linux- struct list_head简介

在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用。Linux内核中的链表方式与众不同,他不是将数据结构塞入链表,而是将链表结点塞入数据结构。链表代码在中声明。};next指向下一个链表结点,prev指向前一个链表结点。

2022-10-24 22:21:05 2758

原创 container_of宏简介

这里使用的是一个利用编译器技术的小技巧,即先求得结构成员在结构中的偏移量,然后根据成员变量的地址反过来得出主结构体的地址。这句代码意思是用typeof()获取结构体里member成员属性的类型,然后定义一个该类型的临时指针变量__mptr,并将ptr所指向的member的地址赋给__mptr;首先看下typeof,是用于返回一个变量的类型,这是GCC编译器的一个扩展功能,也就是说typeof是编译器相关的。可以看出container_of宏,可以完美的通过结构体变量指针和结构体类型的到结构体的首地址。

2022-10-13 23:01:59 762

原创 Linux-进程调度相关的系统调用简介

Linux提供了一个系统调用族,用于管理与调度程序相关的参数。这些系统调用可以用来操作和处理进程优先级、调度策略及处理器绑定。并且这些系统调用都包涵在C库中,也可用man手册查看。

2022-10-08 23:22:21 1403 1

原创 Linux-进程调度简介

交互式进程:这些进程常常与用户进程交互。因此,需要很多的时间等待用户的输入。当接受到输入后,进程必须被很快唤醒,否则用户会发现系统反应迟钝。典型的交互式程序有:shell命令行、文本编辑程序及图形应用程序。批处理进程:这些进程不必与用户进行交互,因此经常在后台运行。实时进程:这些程序有很强的调度需要。这些进程绝不会被低优先级的程序阻塞。它们有一个短的响应时间,更重要的是,响应时间的变化应该很小。例如:从物理传感器上收集数据的程序。

2022-10-06 00:29:15 1909

原创 Linux-位图DECLARE_BITMAP宏

位图:用每一个bit来表示一个含义。比如你需要标记32个资源的占用情况,可以用一个int型变量(刚好32bit)来标记,bit位为0代表资源空闲,bit为1表示资源被占用,你通过位运算检查每个bit的值就知道对应资源的占用情况。

2022-10-02 11:43:45 985

原创 Linux-进程简介

内核代码版本:2.6.11.1。

2022-09-28 22:02:24 699 2

原创 Linux-do_fork()函数及其他重要函数简介

内核版本2.6.11.1,每个内核版本都会有所差异。在代码中已添加注释所以就没更多的文字说明。

2022-09-23 11:15:45 790 1

原创 x86与x86-64数据格式与常用的汇编指令笔记

由于是从16位体系结构扩展成 32位的,Intel 用术语 “字(word)”表示16位数据类型。因此,称32位数为“双字(double words)”,称64位数为“四字(quad words )。标准 int 值存储为双字(32位)。指针(在此用 char *表示)存储为8字节的四宇,64 位机器木来就预期如此。x86-64 中.数据类型 1ong 实现为 64 位,允许表示的值范围较大。下图为C语言基本数据类型(x86-64):大多数GCC生成的汇编指令都有一个字符的后缀,表明操作数的大小。例:数据传

2022-06-19 11:57:24 2735

原创 逻辑右移与算术右移

逻辑右移与算术右移

2022-06-10 08:16:46 13622

转载 Android Audio系统框架

Android Audio系统框架

2022-06-08 10:16:50 3295 3

原创 Audio-PCM设备的创建

前言Linux内核版本:4.1.15主芯片:IMX6ULLcodec芯片:WM8960一、PCM编码PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法。PCM使用等间隔采样方法,将每次采样的模拟分量幅度表示为N位的数字分量(N = 量化深度),因此PCM方式每次采样的结果都是N bit字长的数据。CODEC 的本质是 ADC 和 DAC,那么采样率和采样位数就是衡量一款音频CODEC 最重要的指标。比如常见音频采样率有 8K、

2022-05-29 13:59:58 1268

原创 六、Audio-ALSA架构中的codec

一、codec简介处理器如果既想“听到”外界的声音,又想向外界传达自己的“心声”,那么就需要同时用到 DAC 和 ADC 这两款芯片。那是不是买两颗 DAC 和 ADC 芯片就行了呢?答案肯定是可以的,但是音频不单单是能出声、能听到就行。我们往往需要听到的声音动听、录进去的语音贴近真实、可以调节音效、对声音能够进行一些处理(需要 DSP 单元)、拥有统一的标准接口,方便开发等等。将这些针对声音的各种要求全部叠加到 DAC 和 ADC 芯片上,那么就会得到一个专门用于音频的芯片,也就是音频编解码芯片,英文名

2022-05-28 21:13:55 2329 1

原创 五、Audio-ALSA架构中的platform

一、Platform驱动的作用ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DA〉把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音频信号。在具体实现上,ASoC又把Platform驱动分为两个部分: snd_soc_platform_driver和snd_soc_dai_driver。其中,platform_driver负责管理音频数据,把音频数据通过dma或其他操作传送至

2022-05-27 21:29:43 729

原创 Audio-音频传输接口(I2S、PCM、PDM)

1、音频接口使用场景I2S和PCM(TDM)接口传输的数据是PCM编码格式的音频数据。PDM接口传输的数据是PDM编码格式的音频数据。2、I2S接口I2S(Inter-IC Sound)总线有时候也写作 IIS,I2S 是飞利浦公司提出的一种用于数字音频设备之间进行音频数据传输的总线。和 I2C、SPI 这些常见的通信协议一样,I2S 总线用于主控制器和音频 CODEC 芯片之间传输音频数据。因此,要想使用 I2S 协议,主控制器和音频 CODEC 都得支持 I2S 协议。I2S 接口需要 3

2022-05-26 16:04:09 27115 2

原创 四、Audio-ALSA框架中的machine驱动

machine简介ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和 Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容: Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器)﹔单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作ASoC的一切都从Machine驱动开始,包括声卡的注册,绑定Platf

2022-05-25 21:37:49 2157

原创 三、Audio-ALSA 中的platfrom、machine、codec

一、Linux ALSA 音频系统框架● ALSA COREalsa 核心层,向上提供逻辑设备(PCM/CTL/MIDI/TIMER/…)系统调用,向下驱动硬件设备(Machine/I2S/DMA/CODEC)● ASoC COREASoC:ALSA System on Chip,是建立在标准 ALSA 驱动上,为了更好支持嵌入系系统 和 应用于移动设备的音频 codec 的一套软件体系,它依赖于标准 ALSA 驱动框架。由三大部分组成,分别是 Machine、Platform、Codec。

2022-05-24 09:51:58 963 1

原创 一、Audio-音频简介

一、音频简介音频是我们最常用到的功能,音频也是 linux 和安卓的重点应用场合。处理器要想“听到”外界的声音必须要把外界的声音转化为自己能够理解的“语言”,处理 器能理解的就是 0 和 1,也就是二进制数据。所以我们需要先把外界的声音转换为处理器能理 解的 0 和 1,在信号处理领域,外界的声音是模拟信号,处理器能理解的是数字信号,因此这 里就涉及到一个模拟信号转换为数字信号的过程,而完成这个功能的就是 ADC 芯片。同理,如果处理器要向外界传达自己的“心声”,也就是放音,那么就涉及到将处理器能理

2022-05-23 20:34:24 3892

原创 二、Audio-Linux ALSA整体框架

一、音频架构简介ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制.想了解更多关于alsa这一开源项目的信息和只是请查看一下网站:https://www.alsa-project.org/alsa-lib:在上图中可以看出ALSA对上曾提供a

2022-05-23 20:31:12 1920 1

原创 有线网络硬件接口简介

本篇文章的内容都是有线网络一、 嵌入式下的网络硬件接口嵌入式网络硬件分为两部分:MAC 和 PHY1、SOC 内部没有网络 MAC 外设SOC 与外部 MAC+PHY 芯片的连接如图:这种方案的优点就是让不支持网络的 SOC 能够另辟蹊径,实现网络功能,但是缺点就是网络效率不高,因为一般芯片内置的 MAC 会有网络加速引擎,比如网络专用 DMA,网络处理效率会很高。而且此类芯片网速都不快,基本就是 10/100M。另外,相比 PHY 芯片而言,此类芯片的成本也比较高,可选择比较少2、SO

2022-04-12 10:38:53 2448

原创 常见的AT指令错误码

常见的AT指令错误码CME ERROR’s (GSM Equipment related codes)CME ERROR: 0 Phone failure电话故障CME ERROR: 1 No connection to phone无法连接电话CME ERROR: 2 Phone adapter link reserved保留电话适配器链接CME ERROR: 3 Operation not allowed操作不允许CME ERROR: 4 Operat

2022-03-22 10:47:47 2886 2

转载 UCI命令详解

UCI命令详解1.UCI命令2.UCI的文件和流程3.UCI的文件语法4.UCI 命令读写配置**1.UCI命令一个众所周知的原因,在Linux下各种软件包有各种不同的配置脚本,每个配置脚本的语法格式和操作方式不同,这样的设计虽然可以体现出各软件包自身的优势,同时也增加了学习曲线。在这一点上OpenWrt的UCI无疑处理的更 胜一筹。UCI是集中式配置信息管理接口(Unified Configuration Interface)的缩写,他是OpenWrt引进的一套配置 参数管理系统。UCI管理了Ope

2021-10-29 15:01:54 5435

原创 Linux-代码中如何提升文件权限?

Linux-代码中如何提升文件权限?1、代码中提升文件权限1、代码中提升文件权限在我们代码的运行中,比如想改我们当前系统用户的密码,那可不可以改呢?当然可以,但是密码记录在根目录下,这个目录下我们是没有权限去更改的,那为什么我们调用“passwd”能够更改成功呢?原因就是当我们调用passwd这个命令的时候,这个程序就临时拥有了文件拥有者属性,也就是root属性,此时我们也就可以更改了。如何判断程序是否有临时提升为文件拥有者权限的属性呢?如下图,还是以passwd为例:在这里我们发现我们一般

2021-10-16 11:27:24 652 2

原创 如何设置监听句柄为非阻塞模式?

1、设置监听句柄为非阻塞模式 flags = fcntl(sock, F_GETFL, 0); flags |= O_NONBLOCK; fcntl(sock, F_SETFL, flags);

2021-10-03 09:54:51 268 6

原创 如何设置一个句柄为异步IO模式?

设置一个句柄为异步IO模式1、设置任何一个句柄为异步IO模式1、设置任何一个句柄为异步IO模式分为两步:1、把句柄绑定到当前进程//把sockfd句柄绑定到当前进程fcntl(sockfd, F_SETOWN, getpid())2、给句柄设置一个异步IO属性int on=1;ioctl(sockfd, FIOASYNC, &on)通过以上两步就可以打开一个句柄的异步IO模式。...

2021-10-03 09:44:59 247

原创 struct socket 简介

struct socketstruct socket状态socket操作函数集合struct file *filestruct sock *skstruct socket内核版本:2.6.2socket在内核中的变现形式,也就是我们通常所说的表示层的体现。struct socket { socket_state state; unsigned long flags; struct proto_ops *ops; struct fasync_struct *fasync_list;

2021-09-15 22:16:36 815

原创 Linux-USB驱动笔记(八)--Gadget Function驱动

Linux-USB驱动笔记(八)--Gadget Function驱动1、前言2、Gadget Function 驱动2.1、usb_function -- 配置的一个功能2.2、usb_request -- I/O请求2.3、usb_function_driver3、API函数1、前言在Linux-USB驱动笔记(四)–USB整体框架中有説到Gadget Function驱动,下面我们来具体看一下。Gadget Function就是指设备的功能,比如作为U盘,需要文件存储的功能,则需要File St

2021-09-13 22:14:45 2258

原创 Linux-USB驱动笔记(七)--设备控制器(UDC)驱动

@TOC1、前言在Linux-USB驱动笔记(四)–USB整体框架中有説到设备侧的设备控制器(UDC),下面我们来具体看一下。2、设备控制器(UDC)USB设备控制器(UDC)驱动指的是作为其他USB主机控制器的USB硬件设备上的底层控制器驱动。该硬件和驱动负责将一个USB设备依附于一个USB主机控制器上。UDC驱动位于/drivers/usb/gadget目录下。2.1、usb_gadget – USB从机设备struct usb_gadget { struct work_struct

2021-09-13 21:53:16 3316

转载 PCIE基础简介

PCIe总线概述随着现代处理器技术的发展,在互连领域中,使用高速差分总线替代并行总线是大势所趋。与单端并行信号相比,高速差分信号可以使用更高的时钟频率,从而使用更少的信号线,完成之前需要许多单端并行数据信号才能达到的总线带宽。PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽,而PCIe总线使用了高速差分总线,并采用端到端的连接方式,因此在每一条PCIe链路中只能连接两个设备。这使得PCIe与PCI总线采用的拓扑结构有所不同。PCIe总线除了在连接方式上与PCI总线不同之外,还使用了一

2021-09-10 09:43:50 15467 2

转载 AC耦合与DC耦合

AC耦合与DC耦合1、AC耦合2、DC耦合1、AC耦合交流耦合(AC Coupling)就是通过隔直电容耦合,去掉了直流分量2、DC耦合直流耦合(DC Coupling)就是直流、交流一起过,并不是去掉了交流分量。比如在3V的直流电平上叠加一个1Vpp的弦波,如果用直流耦合,看到的是以3V为基准,+/-0.5V的正弦波;如果用交流耦合,看到的是以0V为基准,+/-0.5V的正弦波。...

2021-09-10 09:25:21 15302 2

原创 Linux-USB驱动笔记(六)--设备驱动框架

Linux-USB驱动笔记(六)--设备驱动框架1、前言2、USB设备驱动3、重要结构体3.1、usb_driver -- USB设备驱动3.2、usb_device_id -- 支持的USB设备信息3.3、urb -- USB请求块4、API函数5、URB发送流程1、前言Linux-USB驱动笔记一Linux-USB驱动笔记二Linux-USB驱动笔记三Linux-USB驱动笔记(四)–USB整体框架Linux-USB驱动笔记(五)–主机控制器驱动框架2、USB设备驱动这里的USB设备驱动

2021-08-29 19:40:52 1986 1

原创 Linux-USB驱动笔记(五)--主机控制器驱动框架

Linux-USB驱动笔记(五)--主机控制器驱动框架1、前言2、主机控制器框架3、重要结构体3.1、usb_hcd -- 主机控制器驱动3.2、hc_driver -- 控制器操作函数3.3、ehci_hcd -- ECHI主机控制器4、API函数1、前言Linux-USB驱动笔记一Linux-USB驱动笔记二Linux-USB驱动笔记三Linux-USB驱动笔记(四)–USB整体框架2、主机控制器框架USB核心(USBD)是整个USB驱动的核心部分,一方面USBD对从USB主机控制器接收

2021-08-29 19:20:51 2013

原创 Linux-USB驱动笔记(四)--USB整体框架

Linux-USB驱动笔记(四)--协议解析1、前言2、 USB协议解析2.1、USB 描述符2.1.1、设备描述符2.1.2、配置描述符2.1.3、接口描述符2.1.4、端点描述符2.1.5、字符串描述符2.1.6、USB设备1、前言USB基础知识在前三篇笔记中。Linux-USB驱动笔记一Linux-USB驱动笔记二Linux-USB驱动笔记三2、 USB协议解析USB 协议中有很多的基础概念,我们来总结一下吧。之前在基础知识中,我们介绍过设备,配置,接口,端点等概念,它在Linux中有

2021-08-29 13:19:34 2729

原创 Linux-USB驱动笔记(三)

Linux-USB驱动笔记(三)1、前言2、USB接口类型3、USB枚举3.1、检测电压变化,报告Host3.2、Host发送Get_Status请求3.3、Host发送Set_Feature请求复位端口3.4、Hub建立设备和主机之间的信息通道3.5、 Host获取默认管道的最大包长度3.6、Host给设备分配一个地址3.7、Host获取设备的信息3.8、Host给设备挂载驱动3.9、设备驱动选择一个配置4、USB OTG4.1、OTG硬件结构4.2、OTG支持协议1、前言前两篇笔记地址如下:Lin

2021-08-29 12:16:06 1796

原创 Linux-USB驱动笔记(二)

Linux-USB驱动笔记(二)1、前言2、USB 拓扑结构3、USB的传输方式4、USB设备的逻辑组织1、前言这些笔记需要连着看,不然没有上下文感觉很难受,嘿嘿上一篇文章:Linux-USB驱动笔记(一)2、USB 拓扑结构USB 是主从结构的,也就是分为主机和从机两部分,一般主机叫做 Host,从机叫做 Device。主机就是提供 USB A 插座来连接外部的设备,比如电脑作为主机,对外提供 USB A 插座,我们可以通过 USB 线来连接一些 USB 设备,比如声卡、手机等。因此电脑带的

2021-08-29 11:58:22 1322

原创 Linux-USB驱动笔记(一)

这里写目录标题1、前言2、USB简介3、USB版本速率对比4、USB总线4.1、USB2.04.2、USB3.05、USB控制器类型1、前言USB的驱动非常的复杂,一下子去看源码也是一头雾水,下面记录下学习USB驱动的过程,后续也会有几篇笔记连续起来。2、USB简介USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB为解决即插即用需求而诞生,支持热插拔。USB协议版本有USB1.0、

2021-08-29 11:28:33 2753 3

原创 Linux笔记--堆简介

Linux笔记--堆简介1、前言2、堆的由来3、Linux中堆简介4、堆分类4.1、请求堆4.2、释放堆5、内存分配背后的系统调用6、堆相关数据结构7、堆的申请8、调试验证1、前言当前针对各大平台主要有如下几种堆内存管理机制:平台堆管理机制dlmallocGeneral purpose allocatorptmalloc2glibcjemallocFreeBSD and FirefoxtcmallocGooglelibumemSolaris在

2021-08-08 16:11:37 887

原创 栈溢出实例--笔记三(ret2libc)

栈溢出实例--笔记三(ret2libc)1、栈溢出含义及栈结构2、ret2libc基本思路3、实战3.1、二进制程序如下3.2、查看栈结构3.3、第一次栈溢出3.4、第二次栈溢出1、栈溢出含义及栈结构请参考栈溢出实例–笔记一(ret2text)栈溢出实例–笔记二(ret2shellcode)2、ret2libc基本思路在当一个程序开启了NX(栈不可执行)的时候,我们没办法去写shellcode,而且程序中也没有system函数供我们调用的时候,那此时我们该如何做呢?首先,程序本身没有system

2021-08-07 17:47:35 1275 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除