- 博客(10)
- 收藏
- 关注
原创 ARM Linux ASoc Play
->snd_pcm_lib_write_transfer //拷贝数字信号到runtime->dma_area 本质上也是写到了runtime->dma_addr 里面,只是OS只能操作vaddr,DMA得操作paddr。1)从open的分析我们得到snd_minors[minor]->f_op->open函数就是snd_pcm_f_ops中的open函数例如snd_pcm_playback_open,所以ioctl就是snd_pcm_ioctl_compat。//注册了substream的ops。
2025-09-03 17:04:06
1857
原创 ARM Linux ALSA
snd_soc_component_initialize //初始化struct snd_soc_component结构并赋值struct snd_soc_component_driver。snd_soc_register_dais //初始化struct snd_soc_dai结构并赋值snd_soc_dai_driver。一、platform驱动(snd_soc_dai_driver<sai> 和snd_soc_platform_driver<dma>)fsl_sai.c。
2025-09-01 17:00:50
813
原创 ARM Linux 页表
2M连续的虚拟地址,如果页框是4K,那么索引就有512个,因为逢4K进1,所以这512个索引也是连续的(0,1,..., 511)!在(1)中,分配页表大小,PTE_HWTABLE_OFF和PTE_HWTABLE_SIZE都是512*sizeof(pte_t),即一共是4K(1024*sizeof(pte_t))一个页表。页框分配后写入页表时,即set_pte_ext,会写入到相对于pte首地址偏移512*sizeof(pte_t)的地址,因为前512*sizeof(pte_t)是给软件用的。
2025-09-01 17:00:14
520
原创 ARM Linux IRQ
lr = lr & 0x0f:lr 保存的是spsr,即取低四bit,也就是lr保存的是cpu mode,看看是执行__irq_svc还是__irq_user。# lr = *(pc + (lr << 2)),pc 指针加上 lr << 2,也就是__irq_svc的地址,lr 就是__irq_invalid的值。2.将返回地址保存到LR_irq寄存器中,以便将来能继续执行,用户模式的LR会被压入栈中,返回地址和用户模式LR是两个东西。# 将r0,lr按地址递增保存到sp 为基地址的栈中。
2025-09-01 16:59:32
687
原创 ARM Linux Rbtree
2.node->rb_left node->rb_right,指向的指针都是4字节对齐的,所以rb_link_node(&de->subdir_node, parent, new);是判断parent->__rb_parent_color的低2bit。也就是节点的地址,是4字节对齐的,节点的颜色是保存在__rb_parent_color成员中。1.rb_red_parent表示获取红节点的父节点,红节点的__rb_parent_color就是其父节点的地址。
2025-09-01 16:58:55
177
原创 ARM Linux spinlock
未释放其他线程第二次获取, lock中的next为1, owner为0, 所以lockval中的next为1,owner为0, 紧接着把lock中的next设置成2,while成立,等待。第一次获取的时候, lock中的next,owner都是0,所以lockval中的next,owner都是0,紧接着把lock中的next设置成1, while条件不满足,获取锁。: 破坏列表(clobbers) // 可选,声明被修改的寄存器或内存。: 输出操作数列表 // 可写变量(结果写入这些变量)
2025-09-01 16:58:24
1564
原创 ARM Linux irqControler
/创建硬件中断号和desc->irq_data的关系,保存在domain->revmap_tree,软件中断号在之前就保存在desc->irq_data.irq中,建立了软硬件中断号的联系。-> 查找 GPIO1.1 virq 的 irq_desc -> 调用其 ->handle_irq (e.g., handle_edge_irq)-> 查找 SPI 66 的 irq_desc -> 调用其 ->handle_irq (即 mxc_gpio_irq_handler)//这里的irq是软件中断号。
2025-09-01 16:57:50
710
原创 ARM Linux gpio
2.of_get_named_gpio(struct device_node *np, const char *propname, int index) //propname为reset-gpios。struct gpio_chip //描述一组gpio,例如gpio1,gpio2。gpio_desc *desc //描述某个gpio 比如gpio1.1。通过gpiochip_get_desc返回gpio_desc *desc结构。1.先看看gpio子节点的信息。
2025-09-01 16:57:11
275
原创 ARM Linux pinctrl
/获取到引脚id map->data.configs.group_or_pin和setting->data.configs.group_or_pin不一样!//通过引脚获取名称,引脚是通过寄存器偏移除以4得到的,获取的名称是imx6ul_pinctrl_pads这里的名称,得到名称后就可以获取到引脚ID。
2025-09-01 16:56:31
1358
原创 ARM Linux make过程
因为是在Makefile.build中include arch/arm/boot/Makefile,所以当前的obj=arch/arm/boot,所以$(obj)/zImage即为 arch/arm/boot/zImage,(6) include 一个Makefile,不是执行这个Makefile中的目标,想要执行目标,还是要看这个目标是不是直接调用,或者是这个目标又是另一个目标的依赖,这样才能执行!应为执行make Makefile.build时,没有指定目标,默认执行_build目标。
2025-09-01 16:53:18
438
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅