文章分类 -  Linux

摘要:MDIO 我们平时看到网口映入眼帘的就是RJ45网口底座,也很少追究网口底座之下还有什么。最近在搞MDIO的驱动,对MAC、PHY之间的关系很陌生。而这两者也是组成网口的物理硬件,所以趁着这次机会弄清楚这两者之间的关系。 上图是组成网口的基本单元,一般SOC芯片内部会集成MAC,然后外接PHY芯片, 阅读全文
posted @ 2026-03-08 19:04 cockpunctual 阅读(42) 评论(0) 推荐(0)
摘要:riscv模拟器,要模拟芯片执行,把原始的bin文件(包含代码)加载到内存中,然后解析指令,最后执行指令。riscv的指令长度是4字节的,指令格式主要有以下6种: 每种指令格式都不同,看到这里大家都会想直接用结构体位域就能够很方便进行解析,不需要进行麻烦的位操作进行解析。但是我在写结构体位域的时候没 阅读全文
posted @ 2026-02-11 17:24 cockpunctual 阅读(6) 评论(0) 推荐(0)
摘要:前段时间脑子突然有个疑问,linux的可执行文件是怎么执行的呢?能不能根据最基本的原理写个文具在linux操作系统上动态执行可执行文件?如果自己在写操作系统(玩具级的),那是不是可以在不考虑执行效率的情况把自己写的加载器和链接器移植到项目上呢?所以就萌生了写一个简单的加载器的想法。本系列实现的加载器 阅读全文
posted @ 2025-12-27 17:46 cockpunctual 阅读(26) 评论(0) 推荐(0)
摘要:注意:段(Segment)与节(Section)的区别。很多地方对两者有所混淆。段是程序执行的必要组成,当多个目标文件链接成一个可执行文件时,会将相同权限的节合并到一个段中。相比而言,节的粒度更小。 如图所示,为ELF文件的基本结构,其主要由四部分组成: ELF Header ELF Program 阅读全文
posted @ 2025-12-09 09:46 cockpunctual 阅读(106) 评论(0) 推荐(0)
摘要:自己在写加载器的时候,通过Elf header中的e_shoff可以找到section header table,当时是这么写的: Elf64_Shdr* sec_tab_header; sec_tab_header = info.hdr + info.hdr->e_shoff; //info.hd 阅读全文
posted @ 2025-12-02 14:23 cockpunctual 阅读(14) 评论(0) 推荐(0)
摘要:在linux kernel中读写文件使用的api和用户态的是不一样的,不能直接使用用户态的api。这里简单记录下使用的函数和使用方法。内核内的文件操作主要通过 file 结构体进行,配合 vfs(虚拟文件系统)的相关 API 来读写文件。 1 打开文件 在内核中要操作文件,首先要打开文件。内核中使用 阅读全文
posted @ 2025-09-24 12:04 cockpunctual 阅读(37) 评论(0) 推荐(0)
摘要:1 问题背景 考虑下面这个场景: 在升级芯片固件的时候,例如CPLD芯片,在BMC没有访问CPLD的时候,CPLD和BMC的Jtag没有相连,BMC在升级CPLD的时候需要先把Jtag切到BMC侧,保证两者之间的正常通信,升级完成后需要再把Jtag切换到底座上。BMC通过Jtag升级CPLD时,其他 阅读全文
posted @ 2025-09-22 11:00 cockpunctual 阅读(5) 评论(0) 推荐(0)
摘要:GDB远程调试BMC GDB远程调试是基于vscode,需要gdb和gdbserver。其中gdb是在宿主机上使用的,而gdbserver是在目标主机上使用的(即BMC单板上)。也可以不使用vscode,用终端工具也可以。使用vscode主要是可以方便看源码或者设置断点。 1 编译带符号表程序 以I 阅读全文
posted @ 2025-08-25 17:12 cockpunctual 阅读(41) 评论(0) 推荐(0)
摘要:I2C-Stub模拟I2C器件 在有时候没有I2C器件,但是需要通过I2C器件完成某些特定功能的时候,比如最近想使用libmctp库来开发MCTP的相关功能,Linux提供了I2C-Stub驱动来模拟I2C器件。这篇文章主要是用来记录I2C-Stub的使用。 1 编译I2C-Stub驱动 在Linu 阅读全文
posted @ 2025-08-19 20:56 cockpunctual 阅读(67) 评论(0) 推荐(0)
摘要:在用户空间如何创建USB Gadget设备,并使用该设备来模拟网卡?在看到这篇[博客](Android USB之复合设备(gadget)详解 - sheldon_blogs - 博客园)的时候,看到里面有对于configfs的介绍: configfs是基于ram的文件系统,与sysfs的功能有所不同 阅读全文
posted @ 2025-08-15 15:47 cockpunctual 阅读(71) 评论(0) 推荐(0)
摘要:在做代码移植时,看到一些寄存器操作相关的代码,发现一些宏定义在新版本的代码中已经没有了。这些宏主要是芯片各个IP的寄存器物理地址的宏定义。众所周知,在操作系统启动完,并启用MMU的情况下,是无法直接读写寄存器物理地址来操作芯片的IP的。无论是在用户态还是在内核态,都需要把物理地址映射成虚拟地址,再通 阅读全文
posted @ 2025-08-06 20:09 cockpunctual 阅读(10) 评论(0) 推荐(0)
摘要:之前在看linux编译链接、重定向的原理的时候,总会看到物理地址、虚拟地址、相对地址和绝对地址这些名词,结合上下文自己还是不理解这几个名次的含义。最近在研究看不定参数函数的参数解析的原理对这几个名词有进一步理解。 1 物理地址 在早期的操作系统中,没有虚拟内存管理,物理地址就是真实的内存地址,应用程 阅读全文
posted @ 2025-07-16 17:46 cockpunctual 阅读(221) 评论(0) 推荐(0)
摘要:C语言可变参数经常会使用到,比如在写回调函数时,有时候会使用不定参数的函数。另外经常使用的linux printf、sprintf都是不定参数的函数。但是函数是如何解析到这些不定参数的呢?有什么手段可以实现呢?如果我们把这些不定参数都统一放在某个能找到的地方,不就可以根据参数占用的内存大小,找到并一 阅读全文
posted @ 2025-07-10 16:20 cockpunctual 阅读(20) 评论(0) 推荐(0)
摘要:在看LINUX设备驱动(第三版)的时候,需要自己手敲代码然后验证。因此需要搭建一个可以编译内核驱动的编译环境。本文搭建ARM的交叉编译环境,能够单独编译出模块ko。 1 代码准备 在driver目录下创建helloworld文件夹,并在该文件夹下创建hello.c和Makefile文件。 hello 阅读全文
posted @ 2025-07-10 09:55 cockpunctual 阅读(96) 评论(0) 推荐(0)
摘要:有些跑在i2c的协议(例如MCTP Over I2C)都是需要双向传输消息的。 当请求方发送MCTP请求消息之后,会等待响应方处理请求之后,读取响应方的响应消息。对于i2c器件来说,一般都是主设备给从设备发消息。当请求方发送MCTP请求消息时,请求方作为主设备。响应方处理完请求发送给请求方时,响应方 阅读全文
posted @ 2025-07-07 20:10 cockpunctual 阅读(165) 评论(0) 推荐(0)
摘要:在项目开发过程中,有时候需要进行文件读写操作,特别是大文件。例如在通过PLDM over MCTP升级固件过程中,会多次发送RequestFirmwareData获取整个固件,不仅要读取固件,还需要随机读取,因此要如何简单便捷高效地读取任意偏移的固件呢?使用mmap进行内存映射,进程可以像读写普通内 阅读全文
posted @ 2025-06-26 17:28 cockpunctual 阅读(66) 评论(0) 推荐(0)
摘要:1 打开文件描述符 读写i2c器件的时候,一般代码流程都是: 打开设备获取设备文件描述符 ioctl设置读取的i2c器件的从地址 调用read/write函数读写数据 int fd = open("/dev/i2c-1", O_RDWR); ioctl(fd, I2C_SLAVE, 0x50); / 阅读全文
posted @ 2025-06-16 16:51 cockpunctual 阅读(202) 评论(0) 推荐(0)
摘要:1 内核日志级别 内核通过 printk 输出日志,其级别由 /proc/sys/kernel/printk 控制。直接读取该文件即可: cat /proc/sys/kernel/printk 输出示例如下: 4 4 1 7 四个数字分别表示: 当前控制台日志级别(Console Log Level 阅读全文
posted @ 2025-05-12 14:54 cockpunctual 阅读(222) 评论(0) 推荐(0)
摘要:pipe_read函数逻辑 相对简单,这里只关注内部实现,暂时忽略copy_page_to_iter函数实现: /* 对管道上锁,避免竞态 */ __pipe_lock(pipe); for (;;) { /* 管道当前可读的数据缓冲区数量;这里的for循环就是需要把缓冲区的数据全部读取出来存放到用 阅读全文
posted @ 2025-04-24 09:42 cockpunctual 阅读(25) 评论(0) 推荐(0)