- 博客(33)
- 收藏
- 关注
原创 spi通信协议解析以及驱动解析
数据传输接口:spi_read()/spi_write()最终调用主控的transfer方法。外设驱动:drivers/iio/imu/inv_icm20602.c(同系列传感器参考)需匹配从设备的CPOL/CPHA模式(如MODE 0: CPOL=0, CPHA=0)
2025-04-08 15:45:02
1016
原创 i2c驱动
在 Linux 内核中,I2C 主控制器(I2C Master)的代码实现涉及多个关键模块,其核心逻辑围绕 I2C 总线通信协议 和 硬件抽象层 展开。// 适配器编号(如i2c-0, i2c-1)2. i2c_algorithm (定义于 include/linux/i2c.h)i2c_add_adapter():将适配器注册到内核的 i2c_core 核心层。// 标准I2C传输。内核抽象层:i2c_adapter 和 i2c_algorithm 的协作。// 关联的硬件设备。
2025-04-01 10:13:55
615
原创 I2C通信协议解析
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。分别为SDA(串行数据线)和SCL(串行时钟线),主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。也就是说所有的数据传输都是由i2c的主器件开始的。从期间是没有主动发送请求的能力的。
2025-03-27 15:00:17
1258
原创 ——设备与模块——
我们称为“伪设备”(pseudo device),最常见的如内核随机数发生器(通过/dev/random和/dev/urandom 访问)、空设备(通过/dev/null 访问)、零设备(通过/dev/zero 访问)、满设备(通过/dev/full 访问),还有内存设备(通过/dev/mem 访问)。块设备通常缩写为 blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同;字符设备通常缩写为 cdev,,它是不可寻址的,仅提供数据的流式访问,就是一个个字符,或者一个个字节。
2025-03-26 13:20:47
158
原创 ——页高速缓存和页回写——
页高速缓存(cache)是 Linux 内核实现磁盘缓存。它主要用来减少对磁盘的I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。磁盘高速缓存之所以在任何现代操作系统中尤为重要源自两个因素:第一,访问磁盘的速度要远远低于(差好几个数量级)访问内存的速度——ms 和ns 的差距,因此,从内存访问数据比从磁盘访问速度更快,若从处理器的L1 和L2 高速缓存访问则更快。第二,数据一旦被访问,就很有可能在短期内再次被访问到。
2025-03-26 11:13:18
596
原创 ——进程地址空间——
linux 操作系统采用虚拟内存技术,系统中的所有进程之间以虚拟方式共享内存。对一个进程而言,它好像都可以访问整个系统的所有物理内存。即使单独一个进程,它拥有的地址空间也可以远远大于系统物理内存。
2025-03-26 10:44:10
573
原创 ——块I/O——
系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的硬件设备称作块设备,这些固定大小的数据片就称作块。另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问,像串口和键盘就属于字符设备。
2025-03-20 15:35:10
878
原创 ——虚拟文件系统——
虚拟文件系统(有时也称作虚拟文件交换,更常见的是简称 VFS)作为内核子系统,为用户空间程序提供了文件和文件系统相关的接口。系统中所有文件系统不但依赖 VFS 共存,而且也依靠 VFS 系统协同工作。通过虚拟文件系统,程序可以利用标准的 Uinx 系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作,如图。
2025-03-18 16:29:54
108
原创 ——内存管理——
内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字(甚至字节),但是内存管理单元(MMU,管理内存并把虚拟地址转换为物理地址的硬件)通常以页为单位进行处理。正因为如此,MMU以页(page)大小为单位来管理系统中的页表(这也是页表名的来由)。从虚拟内存的角度来看,页就是最小单位。
2025-03-12 17:37:58
660
原创 ——内核数据结构——
双向环形链表:最后一个链表位子的后指针指向第一个链表位子,第一个链表的前指针指向最后一个链表位子,形成回路。双向链表:数据结构中分别有一个指向前面一个链表位子和一个指向后面一个链表位子的指针。单向环形链表:最后一个链表位子的指针指向第一个链表位子形成回路。链表是一种存放和操作可变数量元素(常称为节点)的数据结构。单向链表:数据结构中有一个指向下一个链表位子的一个指针。
2025-02-17 13:54:29
559
原创 ——进程调度——
非抢占多任务:除非进程自己停止运行不然会一值运行下去。进程主动挂起的操作称之为让步,理想情况下进程做出让步,以便让每个可运行进程享有足够的处理时间,但是这样有很多的缺点,调度进程无法对每个进程运行时间做出统一规定,所以进程独占运行时间可能会超出用户预期,甚至有可能一个进程不做出让步就会导致整个系统崩溃。在单处理机上这会产生多个进程在同时运行的感觉,在多处理机上,这会使得多个进程在不同的处理机上面真正的同时并行的运行,无论是单处理机还是多处理机,多任务操作系统都能是多个进程处于堵塞或者睡眠的状态。
2025-02-06 16:00:40
207
原创 ——进程管理——
进程:就是处于执行期的程序,但是它不仅仅局限于一段程序代码,它还包含其他资源文件,(打开文件,挂起的信号,内核内部数据,处理器状态,内存映射的内存地址空间,对应执行线程,存放全局变量的数据段)。线程==执行线程:在进程中的活动对象,每一个线程都是一个独立的,独立计数器,进程栈和一组进程寄存器。
2025-01-17 13:52:04
634
原创 编译Linux 6.4可能会遇到的
第二步:将配置CONFIG_SYSTEM_TRUSTED_KEYS置空,注意CONFIG_MODULE_SIG_KEY="cert/signing_key.pem"这个配置不能够修改不然还是会导致编译报错。首先这个环境的前提是已经安装好make menuconfig相关的外部依赖使用的库的。第一步:需要安装新的perl的依赖库 : yum install perl。
2024-05-06 16:44:13
270
1
原创 如何修改网口名字和设置网络静态IP
在系统驱动加载的过程中,对于网口名字来说,内核有自己的可预测命名规则,所以就会有一个更具这个规则从而生成的一个网口名字,所以如果需要修改网口名字,就需要更改内核配置参数,而修改内核配置参数的办法就是从grub传参到内核中,所以需要禁用如下两个参数,将这两个参数加入到grub的配置文件中。将参数加入到/etc/default/grub文件中,在重新使得grub生效:grub2-mkconfig -o /boot/grub2/grub.cfg。在这个文件中需要修改。
2024-02-02 13:55:23
1091
原创 linux存储管理
在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。它是 64 位的文件系统,虽然它是在原来的 JFS 的基础上开发的,但却较之有所改进,即:JFS2 具有更优的扩展性能,而且支持多处理器架构(IBM官方将第2版的JFS文件系统命名为JFS2,但大多数Linux系统还是称其为JFS)。
2024-01-24 15:07:18
962
1
原创 mkisofs指令的使用
mkisofs指令主要是用于生成iso文件的,这个指令的功能很是强大,但是就是因为其很强大,导致在使用的过程中很多时候都是不了解的,总的来说,在直走iso文件的使用,其主要有两种的使用方式,一种是生成常规的legacy模式的iso,当用这个模式iso制作出来的u盘启动就只能打开legacy才能够识别出来这个u盘启动盘了,另外一种就是EFI模式,当用这个模式iso制作出来的u盘启动就只能打开EFI才能够识别出来这个u盘启动盘了。
2024-01-16 09:55:26
1565
1
原创 编程语言有那些
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
2024-01-03 16:12:56
957
1
原创 X86和arm的区别
这部分代码负责初始化系统,包括一些必要的外设,然后启动bootloader,并且初始化主存,把内核镜像拷贝到主存储器中(从flash设备,板上内存,MMC,主机PC或者别的什么地方)。主要是因为arm不同的硬件就需要不同的编译链就需要不停的编译适用的软件,而x86就有一套很完整的自己的相对稳定的。X86无论时性能还是生产工艺都是比arm平台上强很多的,arm的优势不在于性能,而是在意于效率,在综合性工作上x86为优势,在任务相对固定的场景就是arm有优势了,这也是两个对于市场上的应用的不同。
2023-12-27 10:33:48
1728
1
原创 如何在本地搭建centos的repo
很多时候安装完centos 之后就会发现还是有一些包含在自己下载的centos的一些yum下载的源不会全部在os里面,还需要自己去安装的,这个时候如果有网络环境的话一切都还好,但是遇到没有网络环境的时候,怎么用yum下载自己的包呢。之后就可以使用yum了,如果不行,将os中自带的repo文件删除,在新增改文件,如果下载没有,说明这个工具在os源包中不存在,就需要另外找了。2.在这个路径下面新建一个文件/etc/yum.repos.d 名为: cdrom.repo。
2023-12-26 17:32:49
819
1
原创 udev解释
Udev规则没有什么arm还是x86的区分,属于你想用就用的,但是其中arm的设备树,可以解决一些对于udev来说比较麻烦的问题。
2023-12-26 16:34:58
1089
1
原创 make menuconfig指令的运行环境配置
在使用make menuconfig的时候总是会遇到很多的问题,总结一下主要有一下几点。基本上安装完这些东西,这个make menuconfig 的运行环境就可以了。一般情况最多缺少的就是libncurses的库文件。
2023-12-22 10:37:52
694
原创 如何通过centos定制自己想要的os
在一开始的使用我们首先需要在我们机器上面安装一下我们最初的os也就是centos stream9,同时我们需要注意在我们安装的时候选择安装的环境为minimal-environment并且不需要安装其他任何的软件工具,这样可以保证我们作为基础环境的一个干净状态,以便于后期有不需要的软件工具不用在去删除那么多,和保证自己之后定制的os更小。在我们安装的时候使用的文件系统使用的是images/install.img这个文件,我们可以对这个文件进行定制,这样可以有效修改最后iso文件的大小。
2023-12-08 14:42:48
1678
原创 Linux内核的master和slave设备
master:在很多硬件协议总线上面,我们就需要使用master去对各个通道进行对应的资源分配,其中还需要包含数据上协议的传输和读写,以及同一个协议,不同的表现方式,这些大都是可以在master这边有一定的处理的,最重要的就是资源分配了。slave:从设备主要是对从设备上面的应用,和提供上层应用的接口和通信。相对来说逻辑简单,调试根据设备的功能来判断是否复杂。
2023-12-08 10:24:32
436
原创 hostname 管理
瞬态主机名(transient):瞬时主机名是在系统运行时临时分配的主机名,例如,由DHCP等一些系统临时分配的主机名,如果系统存在静态主机名且有效,则不会用到瞬态主机名。灵活主机名:只有在设置之后,才会有/etc/machine-info的文件hostnamectl set-hostname --pretty hostname。静态主机名(static):静态主机名也称为内核主机名,是系统在启动时初始化内核的主机名,默认从/etc/hostname读取配置自动初始化静态主机名。
2023-12-07 17:55:00
130
1
原创 fm23驱动程序
一,回声消除的作用消除通话过程中的杂音和回音二.fm23回声消除驱动程序示例//#include <linux/i2c/fm1288.h>//#include <linux/sensors.h>#include <linux/pinctrl/consumer.h>#include <linux/kernel.h>#include <...
2020-04-16 09:59:23
163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人