自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

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