自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Amelio Ming

linux 菜鸟

  • 博客(29)
  • 收藏
  • 关注

原创 linux radix-tree 基数树实现详解

radix tree,又称做基数树,是一种适合于构建key(index)与value(item)相关联的数据结构。内核中使用非常广泛。本文主要聚焦linux内核基数树的代码实现,大量注释过的代码。

2024-07-10 16:57:53 407

原创 linux 内核 红黑树接口说明

红黑树(rbtree)在linux内核中使用非常广泛,cfs调度任务管理,vma管理等。本文不会涉及关于红黑树插入和删除时的各种case的详细描述,感兴趣的读者可以查阅其他资料。本文主要聚焦于linux内核中经典rbtree和augment-rbtree操作接口的说明。

2024-07-10 16:41:15 1052

原创 三目运算符中间的表达式可以省略吗(a?:c)?

熟悉C语言的童靴对三目运算符都非常熟悉,a? b : c; 如果a为true,则整个运算符的值为b,否则为c;那么问题来了,三目运算符中间的表达式可以省略吗?即a? : c;

2024-06-19 15:27:04 613

原创 local_irq_enable/local_irq_disable local_irq_save/local_irq_restore实现细节

local_irq_enable/local_irq_disable和local_irq_save/local_irq_restore两对函数在内核代码中出现的频率非常之高。每个函数的功能描述如下:local_irq_enable/local_irq_disable:开关本地CPU总中断。local_irq_save:保存当前CPU CPSR寄存器值,然后关闭本地CPU总中断local_irq_restore:恢复之前的CPSR寄存

2024-04-15 19:06:36 1135

原创 kworker(kworker/u2:1,kworker/0:13,kworker/0:1H) 工作队列的命名

kworker(kworker/u2:1,kworker/0:13,kworker/0:1H) 工作队列的命名

2024-04-15 18:56:42 1286

原创 typeof((fifo) + 1),typeof高级用法

typeof(param)的作用就是获取param的数据类型。这个是大家都知道的。在阅读内核kfifo.h文件时看到下面的定义:#define kfifo_reset(fifo) \(void)({ \ typeof((fifo) + 1) __tmp = (fifo); \ __tmp->kfifo.in = __tmp->kfifo.out = 0; \})其中typeof((fifo) + 1) 的用法有点违背我们平时看到的代码的使用方法

2024-03-15 18:42:41 266

原创 Using the TRACE_EVENT() macro (Part 3)

Using the TRACE_EVENT() macro (Part 3)

2024-03-14 14:16:35 395

原创 Using the TRACE_EVENT() macro (Part 2)

Using the TRACE_EVENT() macro (Part 2)

2024-03-14 14:15:55 524

原创 Using the TRACE_EVENT() macro (Part 1)

Using the TRACE_EVENT() macro (Part 1)

2024-03-14 14:14:52 486

原创 fec mac初始化流程中涉及new api的接口

下面主要介绍mac接收网络数据帧中使用的new api接口以及对其流程的分析。

2024-03-08 17:18:34 825

原创 通过sysfs文件系统来调试phy

kobjetc是linux操作系统中非常重要的对象。我们知道,linux内核中有一个通用的惯例就是:对象一般都是嵌入到被管理的数据结构中去。如struct list_head,struct rb_node...等对象都是嵌入到数据结构中,然后通过struct list_head,struct rb_node...等对象将被管理的数据结构挂载到链表或者插入到红黑树中。

2024-03-08 16:56:32 445

原创 imx8 fec mac驱动流程

下面从imx8 fec mac控制器初始化流程中涉及到的关键代码进行了细致注释后张贴出来,对于如果正在查看该部分的童靴而言具有很大的参考意义。

2024-02-29 10:33:17 700

原创 imx8 fec mac接收/发送buffer descriptor

imx8 MAC控制器中用于收发网络数据帧的buffer descriptor 描述

2024-02-29 10:26:46 612

原创 linux phy处理流程三:fixed-link处理

"fixed-link"本质是通过一个软件模拟phy设备的方式来实现的,意味着其mdio_bus和常规phy使用的mdio_bus是不一样的,所以需要重新定义个新的针对fixed-link的mdio_bus即。phy_node && of_phy_is_fixed_link(np)) { /*phy-handle节点不存在但存在fixed-link 属性*/

2024-01-09 16:32:05 1085

原创 linux phy处理流程二:attach phy设备

of_phy_connect和phy_connect最终都会调用phy_connect_direct,of_phy_connect首先查找将设备树节点对应的phy device,之后再调用phy_connect_direct。phy_attach_direct中获取检查phydev是否已经匹配了phydrv,如果无则使用通用phydrv。//遍历mdio_bus_type总线上设备列表,通过of_phy_match判断总线上设备节点和参数phy_np是否一致,一致且为phy设备则返回对应的设备结构。

2024-01-09 16:04:25 763

原创 linux phy处理流程一:探测phy设备

如果从节点中无法获取到"reg"值,然后对无"reg"值的节点调用of_mdiobus_child_is_phy()判断其是否为phy设备,如果为phy设备则尝试phy addr从0-31(跳过以存在phy设备的phy addr)调用of_mdiobus_register_phy()注册phy设备,4).mdiobus_scan()函数通过mido获取phy id成功则创建phy设备,否则返回设备不存在错误码(-ENODEV),创建phy设备成功后则注册phy设备(phy设备和phy驱动进行匹配操作)。

2024-01-09 15:17:13 898

原创 linux phy相关数据结构

本文以imx8为例,呈现其phy驱动中主要涉及的文件以及数据结构。phy驱动涉及的数据结构其实本身并不复杂,在整个网络通路中phy处于数据链路层,主要完成物理信号转换的工作,将接收信号传递给MAC或者将MAC过来的数据进行转换后输出到物理链路上

2024-01-08 18:07:02 553

原创 unix域套接字编程

unix域套接字用于服务端和客户端均位于同一台主机上进行通讯的场景,相比较通过127.0.0.1回环口的tcp,udp的优势在于效率。unix域套接字的效率提高一倍。所以很有必有了解下unix域套接字。

2023-12-07 11:50:34 1085

原创 imx8 lpi2c open/read/write分析

i2c_master_send(将待发送数据组装为i2c_msg结构)->i2c_transfer->__i2c_transfer调用adap->algo->i2c_master_recv->i2c_transfer->__i2c_transfer调用adap->algo->algo->master_xfer的实现可以参考imx8 lpi2c驱动分析流程。lpi2c注册的字符设备操作接口。//分配buffer空间。3、write操作流程。1、open操作流程。2、read操作流程。

2023-09-06 10:20:39 138

原创 imx8 lpspi open/read/write分析

b).如果spi_controller->transfer接口为spi_queued_transfer则调用__spi_queued_transfer,该函数调用list_add_tail(&msg->queue, &ctlr->queue)将spi_message挂接到spi_controller->queue链表上,如果!调用流程:__spi_pump_messages->spi_transfer_one_message->fsl_lpspi_transfer_one。对于lpspi驱动部分不涉及。

2023-09-06 10:16:56 146

原创 i.mx8 DMA流程分析

DMA无论是在mcu中还是在Soc中的使用都变得非常的普遍。从硬件的角度,DMA可以说是继中断之后另一个重要的里程碑。它开创了硬件加速的时代来解放处理器资源,继DMA之后各种特定功能的硬件加速应运而生,但只有DMA有如此广泛的应用。

2023-09-05 14:09:25 243

原创 设备控制器的pin管脚何时进行绑定?

本文需要读者对linux设备驱动模型以及pinctrl子系统有一定的了解,同时对设备树中配置的特定控制器功能时的pin管脚状态配置了解。在设备和驱动匹配成功后的probe()函数中没有对于该控制器(uart,spi,mac等)的pin管脚绑定操作,那么绑定操作在什么地方进行的呢?

2023-08-17 19:43:10 86

原创 device_node中的Phandle成员有何用?

在设备树文件中使用lable来引用节点是非常常见的现象,尤其是gpio。看下面的设备树内容:switch-reset-gpios = ;这里配置了一个gpio,用于复位switch网络交换机。该gpio从属于gpio1组的第15个gpio pin管脚。我们看下通过fdtdump后的内容:switch-reset-gpios = ;

2023-08-09 17:58:37 147

原创 为什么__io_rmb() __io_wmb()使用的是dsb(ld/st)?dmb?

为什么__io_rmb() __io_wmb()使用的是dsb(ld/st)?

2023-08-04 11:49:54 289

原创 设备树中/aliases节点的作用

阅读linux内核驱动代码,会遇到of_alias_get_id(...)接口,通过函数名可以猜测其是在获取别名(aliase)的id,id是指代的什么呢?下面通过源码来看看其到达是在获取什么id?在uart,spi,i2c等驱动中都使用of_alias_get_id获取别分对应的id值:of_alias_get_id(np, "serial");of_alias_get_id(ctlr->dev.of_node, "spi")of_alias_get_id(dev->of_node, "i

2023-07-21 14:44:34 622

原创 imx8 ttylpuart打开和读写分析

b.如果线路规程的write函数存在 ld->ops->write则调用 do_tty_write(ld->ops->write, tty, file, buf, count),do_tty_write主要是将用户空间缓冲区的数据写入tty_struct->write_buf[]中,调用tty_init_dev,该函数首先调用alloc_tty_struct分配tty_struct结构并初始化内部关键成员(tty_struct->ops和tty_driver->ops一致),

2023-07-12 11:07:48 122

原创 以太网 Magic packet 帧唤醒

以太网 Magic packet 帧唤醒

2023-06-08 10:30:57 698

原创 linux内核中ALIGN宏定义说明

linux内核关于ALIGN相关宏定义如下,套几个数据进去替换就清楚了。,ALIGN_DOWN是。向下对齐(向下取整)。向上对齐(向上取整)

2023-05-31 09:54:28 1148

原创 关于 container_of(...)的说明

关于 container_of(…)的说明1.首先看看下面这两个宏的定义#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)#define container_of(ptr, type, member) ({ const typeof(((type )0)->member)__mp...

2018-11-17 16:46:59 238

空空如也

空空如也

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

TA关注的人

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