自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 高通音频驱动录音流程(五)

高通音频驱动录音流程(五) mixer path 设置过程分析snd_soc_register_card录音通路配置调用tinycap命令时的音频播放流程网上关于音频驱动的文章,大多是进行框架性的介绍,关于音频驱动控件的配置及录音播放介绍的很少,下面就已高通sm6350的mic通路配置及录音的配置,进行音频驱动流程的介绍。录音通路配置/* 下面这三个是对swr侧进行配置 */tinymix "TX DEC1 MUX" "SWR_MIC"tinymix "TX SMIC MUX1" "ADC0

2021-03-01 17:55:19 1726

原创 高通音频驱动录音流程(二)

高通音频驱动录音流程(二)目录高通音频驱动录音流程(二)Front End CPU的注册Front End Codec注册Front End PCM的注册Front End Machine的注册Front End CPU的注册Front End CPU DAI的注册,与传统的CPU DAI注册类似,不过增加了aif_name的定义,它与vendor/qcom/opensource/audio-kernel/asoc/msm-pcm-routing-v2.c中的定义SND_SOC_DAPM_AIF_OU

2021-03-01 16:23:27 1390

原创 高通音频驱动录音流程(三)

高通音频驱动录音流程(三)目录高通音频驱动录音流程(三)Back End CPU的注册Back End Codec注册Back End PCM的注册Back End CPU的注册vendor/qcom/opensource/audio-kernel/asoc/msm-dai-q6-v2.c.stream_name = “TX CDC DMA3 Capture”,Back End CPU DAI的注册,与Front End CPU DAI注册类似,snd_soc_register_componen

2021-03-01 16:23:03 1713

原创 高通音频驱动录音流程(一)

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案.

2021-03-01 16:22:35 2017

原创 高通音频驱动录音流程(四)

高通音频驱动录音流程(四)目录高通音频驱动录音流程(四)Front/Back End Machine驱动注册Front/Back End Machine驱动注册

2021-03-01 16:21:33 1145

原创 introduce to algorithm

introduce to algorithm1710. 卡车上的最大单元数1711. 大餐计数1720. 解码异或后的数组1721. 交换链表中的节点1722. 执行交换操作后的最小汉明距离1725. 可以形成最大正方形的矩形数目1726. 同积元组1727. 重新排列后的最大子矩阵1732. 找到最高海拔1733. 需要教语言的最少人数1734. 解码异或后的排列1736. 替换隐藏数字得到的最晚时间1737. 满足三条件之一需改变的最少字符数1738. 找出第 K 大的异或坐标值1739. 放置盒子56

2021-01-31 17:36:03 289

原创 Android str_parms

Android str_parmsstr_parms深入分析str_parms_create_strstr_parms_add_strstr_parms_get_strstr_parms_to_strstr_parms深入分析在了解android audio,梳理audio hal的流程时,遇到这样一个数据结构,struct str_parms, 查看代码的上下文,它在这里的主要功能是用来对各种参数进行set与get操作的。其底层采用hash map实现,并通过链接法解决哈希碰撞。str_parms

2021-01-12 10:46:19 1837 2

原创 The Road to Linux Kernel - Interrupt (AArch64 Linux)

对于arm64系列的处理器,一个gpio边沿触发引起的中断如何进行处理,聚焦于gpio外设pl061,假设该gpio中断是通过request_threaded_irq设置的,下面将一一进行展开中断向量表是可以随意放置在任意地址的,最后中断的入口地址放在VBAR寄存器中,该向量表保存了如下entry:Table 10-2 shows one of the vector tables. The base address is given by VBAR_ELn and theneach entry has

2020-08-10 21:08:31 463

原创 The Road to Linux Kernel - Kernel startup -- __create_page_tables (AArch64 Linux)

打开mmu之前,创建页表, 下面的代码分析基于如下四级页表:Translation table lookup with 4KB pages:: +--------+--------+--------+--------+--------+--------+--------+--------+ |63 56|55 48|47 40|39 32|31 24|23 16|15 8|7 0| +--------+--------+--------+

2020-07-27 22:05:54 429

原创 The Road to Linux Kernel - start_kernel (2)

smp_setup_processor_id();smp模型指的是对称多处理模型(Symmetric Multi-Processor),与它对应的是NUMA非一致性存储访问结果(Non-Uniform Memory Access)和MPP海量并行处理结构(Massive Parallel Processing)。它们的区别分别在于,SMP指的是多个CPU之间是平等关系,共享全部总线,内存和IO等。但是这个结构扩展性不好,往往CPU数量多了之后,很容易遇到抢占资源的问题。NUMA结构则是把CPU分模块,每个

2020-07-13 22:07:47 138

原创 The Road to Linux Kernel - start_kernel (1)

set_task_stack_end_magic(&init_task);跳转到start kernel后的第一步,设置该task结尾的magic number,用于栈溢出检测,这个进程也就是进程0,swapper进程,负责调度管理,内存中页面的换进换出,进程找不到父进程时的托孤等等static inline unsigned long *end_of_stack(const struct task_struct *task){ return task->stack;}void

2020-07-13 21:40:05 316

原创 The Road to Linux Kernel - Kernel startup (AArch64 Linux)

进入kernel之前系统启动过程中,在kernel之前bootloader会执行若干的动作,然后把控制权转移给linux kernel。需要特别说明的是:这里bootloader是一个宽泛的概念,其实就是为kernel准备好执行环境的那些软件,可能是传统意义的bootloader(例如Uboot),也可能是Hypervisor或者是secure monitor。具体bootloader需要执行的动作包括:1.设置并初始化RAM2.设置设备树3.解压缩内核映像4.调用内核映像Kernel sta.

2020-07-08 22:27:02 458

原创 The Road to Linux Kernel - platform driver interface

platform driver驱动,下面这样的方式是其中一种注册方式, 驱动会注册到形如**__initcall**的段中,然后在start_kernel时进行调用。static struct platform_driver tegra_ahb_driver = { .probe = tegra_ahb_probe, .driver = { .name = DRV_NAME, .of_match_table = tegra_ahb_of_match, .pm = &tegra_ah

2020-07-04 22:29:34 172 1

原创 The Road to Linux Kernel - Devres - Managed Device Resource

devres是内核为驱动开发者提供的用来申请资源的机制,函数名都是以devm开头。总的来说,在大多数情况下,调用这类接口不需要关心资源的释放问题。在驱动进行probe时,可以调用这类接口,若probe失败,申请的资源也会释放。以devm_request_threaded_irq接口为例,简单了解下这个机制。函数开始调用devres_alloc将devm_irq_release保存在dr->node.release节点下,然后返回dr->data,再然后通过返回的节点,把调用relase时需

2020-07-04 21:25:52 255

原创 Route Configuration Process: Element to Codec Register

amixer.c | vcset | vsnd_ctl_elem_write | vsnd_ctl_hw_elem_write | vioctl(hw->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, control) | vsnd_ctl_f_ops | vsnd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | vsnd_ctl

2020-06-07 11:14:26 116

原创 The Road to Linux Kernel - GPIO Subsystem - GPIO Devres, Managed Device Resource(3)

GPIO Devres之前常用的gpio接口,需要对申请的资源进行管理,如果要管理多个资源,这是很麻烦的一件事,Is there a easier way?调用下面的接口,将申请的资源与device绑定,就不需要手动管理这些资源了: devm_gpiod_get() devm_gpiod_get_index() devm_gpiod_get_index_optional() devm_gpiod_get_optional() devm_gpiod_put() devm_gpiod

2020-06-05 22:06:28 833

原创 排序算法归集

冒泡排序int *sortArray(int* nums, int numsSize, int* returnSize){        *returnSize = numsSize;        int tmp; &nbsp.

2020-06-05 20:34:13 265

原创 The Road to Linux Kernel - GPIO Subsystem - descriptor-based GPIO interface(2)

struct gpio_desc *gpiod_get_optional(struct device *dev,const char *con_id,enum gpiod_flags flags)

2020-06-04 22:16:43 182

原创 The Road to Linux Kernel - GPIO Subsystem - Legacy GPIO Interfaces(1)

GPIO使用初探刚接触linux驱动中gpio方面的时候,常用的是gpio-legacy.c里面的接口,初始化gpio就像下面这样, 然后就可以调用get/set gpio的接口了。这时候就发现,初始化一个gpio,居然这么麻烦,要是通过dts进行配置,更麻烦了,就像下面这样。而如果要同时通过设备树读取,初始化几个gpio,更麻烦,首先调用of_property_read_u32_array,然后对读取的值进行判断,再调用下面这些接口,或者调用** gpio_request_array**,一个初始化

2020-06-03 20:43:18 141

原创 arm64内存访问指令小结

如下指令,用在32bit arm处理器上面是没有问题的,但是用在arm64时,就会出现下面这个data abort exceptionled_on:mov x7, #0x08000000ldr x5, =0xff780004ldr x3, =0xff780000str x7, [x5]str x7, [x3]b led_on"Synchron...

2020-05-05 17:00:57 2674

原创 排序

1. 冒泡排序```int*sortArray(int*nums,intnumsSize,int*returnSize){*returnSize=numsSize;inttmp;for(inti=0;i<numsSize;++i){for(int...

2020-02-12 16:23:57 135

原创 内联函数与宏

int a = 0;__inline __attribute__((always_inline)) void _test(void){ if (a) return; a = 1;}void test(void){ _test(); a = 2;}test: @ args = 0, pretend = 0, frame = 0 @...

2019-12-07 22:14:01 87

原创 函数入口, main函数入口, 内核入口, 内核的C程序入口, kernel中用户进程的入口

函数入口, 一般指函数入口地址, 普通的函数函数名就是入口地址, 举一个比较明显的例子:void (f)(int a);test = 0x08000000;此时0x08000000就是函数的入口地址,再比如:((void ()(int))0x08000000)(param)其中0x08000000也是函数的入口地址....

2019-12-07 20:29:52 1344

原创 移植最新版u-boot至myir-ricoboard(am4378)卷1: 下载u-boot,将最适配的defconfig配置编译后烧录

声明:本文针对有一定u-boot开发基础的人员,初学者看起来还需要更多的辅助材料; 最新版的u-boot至u-boot官方网站或github中下载release版本,千万不要直接在GitHub中git clone临时版本,其中很可能有些功能没有调通.至于编译环境, 笔者选择的是ubuntu18.04.接下来就是构建自己的编译工具链了, 由于使用的是ti的am4378 SOC,工具链可以很方...

2019-01-27 10:54:34 575

空空如也

空空如也

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

TA关注的人

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