
Linux
文章平均质量分 90
Linux基础学习笔记。。。https://www.cnblogs.com/zyly/category/2330631.html
heater404
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux】伙伴系统和slab分配器
Linux内核的)是物理内存管理的核心机制,负责管理物理页框的分配与释放。伙伴系统的核心目标是:高效管理连续物理内存,减少外部碎片,同时通过合并空闲块快速响应大块内存请求。伙伴系统是linux内存管理的底层基础,slab等上层分配器依赖它获取大块内存后进一步细分。原创 2025-07-15 15:13:17 · 365 阅读 · 0 评论 -
【Linux】虚拟内存的概念和布局
内存地址分为虚拟地址(或者叫逻辑地址)和物理地址。虚拟地址也是人为设计的一个概念,类比我们现实世界中的收货地址,而物理地址则是数据在物理内存中的真实存储位置,类比现实世界中的城市,街道,小区的真实地理位置。原创 2025-07-11 17:22:22 · 882 阅读 · 0 评论 -
【Linux】mmap分析
平时我们写Linux驱动和用户空间交互时,都是使用read或者write函数接口,并且在函数内使用或者。因为用户空间是不能直接访问内核空间数据的,只能先将数据拷贝过来,然后再操作。如果用户空间需要传几MB的数据给内核,那么原来的拷贝方式显然效率比较低,这个时候就需要使用mmap操作,简单来说就是让一块物理内存拥有两份映射,即拥有两个虚拟地址,一个在内核空间,一个在用户空间,这样用户空间和内核空间就可以访问同一块内存了。关系如下mmap。原创 2025-06-28 16:09:23 · 891 阅读 · 0 评论 -
【Linux】regmap子系统
前面我们介绍了可以直接使用i2c子系统中数据传输接口就可以进行i2c通信,那为什么又引入了regmap子系统呢?Linux下大部分设备的驱动开发都是操作其内部寄存器,比如I2C/SPI设备的本质都是一样的,通过I2C/SPI 接口读写芯片内部寄存器,使用i2c_transfer来读写I2C设备中的寄存器,SPI接口的话使用 spi_write/spi_read读写SPI设备中的寄存器。regmap。原创 2025-06-12 16:09:36 · 878 阅读 · 0 评论 -
【Linux】I2C tools
i2c tool是一个开源工具,需要自行下载进行交叉编译,但是我们的SDK好像自带了该工具代码,所以在开发板中可以直接使用。该命令用于探测i2c总线。表示探测i2c4总线上的设备。注意,该命令检测出来的地址是7位地址。原创 2024-11-15 18:02:02 · 661 阅读 · 1 评论 -
【Linux】i2c子系统
pinctrl {&i2c4 {这是我们定义的设备树节点,是添加到i2c4节点中的,i2c4节点是平台DTS已经定义好的。我们自定义了haptics@68节点,节点中有两个属性比较关键。compatible:该属性中后面的haptics表示该设备的名称或者设备节点名称。格式为。reg:该属性表示该i2c设备的slave地址(7位的)。然后在内核启动过程中会解析该设备树并且注册I2c设备。原创 2024-11-15 16:28:48 · 1241 阅读 · 0 评论 -
【Linux】Pinctrl子系统和GPIO子系统
首先,我们在#addressranges;ranges;2;ranges;ranges;原创 2024-11-06 16:38:59 · 1206 阅读 · 0 评论 -
【Linux】设备树
我们前面介绍过平台设备驱动,知道硬件资源信息可以放在设备中,然后在驱动的probe函数中从设备中获取资源信息。但是,Linux3.x以后的版本引入了设备树,设备树用于描述一个硬件平台的硬件资源,一般描述那些不能动态探测到的设备,可以被动态探测到的设备是不需要描述。设备树可以被bootloader(uboot)传递到内核,内核可以从设备树中获取硬件信息。以树状结构描述硬件资源。设备树源文件可以像头文件(.h文件)那样,一个设备树文件引用用一个设备树文件,这样可以实现代码的重用。原创 2024-10-29 11:17:24 · 1204 阅读 · 0 评论 -
【Linux】创建设备属性节点
* 路径:linux/device.h *//* 路径:linux/device.h */ # define DEVICE_ATTR(_name , _mode , _show , _store) \ struct device_attribute dev_attr_ ## _name = __ATTR(_name , _mode , _show , _store) struct device_attribute {原创 2024-10-25 14:28:03 · 685 阅读 · 0 评论 -
【Linux】内核中申请内存的方法
都是用于内核空间申请内存都是以字节为单位进行分配所分配的内存,在虚拟地址上连续kzalloc是强制清零的kmalloc操作kmalloc和kzalloc分配的内存大小有限制(128KB),而vmalloc没有限制kmalloc和kzalloc可以保证分配的内存在物理地址是连续的,但是vmalloc不能保证kmalloc和kzalloc分配内存的过程可以是院子过程(使用GFP_ATOMIC),而vmalloc分配内存是则可能产生阻塞kmalloc和kzalloc分配内存的开销小,因此。原创 2024-10-23 17:35:06 · 1131 阅读 · 0 评论 -
【Linux】平台设备驱动
驱动代码中最好不要使用全局变量,因为驱动一般是支持多设备的,如果有全局变量会有冲突。字符设备驱动中在open函数中可以使用container_of拿到设备信息,但是杂项设备驱动中怎么拿到设备信息暂时未知。原创 2024-10-18 17:51:44 · 1192 阅读 · 0 评论 -
【Linux】总线-设备-驱动模型
前面,我们介绍了写驱动代码的一些常规步骤,并且也写了最基本的驱动代码,但是那些代码存在着问题,我们将硬件的信息都写进了驱动里了,如果我们在杂项设备驱动中控制led,那么会在硬件操作接口中包含硬件信息,如果引脚有变化,这个驱动代码就得重新修改,虽然修改也很简单,但是从框架的角度来看,这是不合理的,相当于驱动代码写死了。于是,Linux引入了设备驱动模型分层的概念,将我们编写的驱动代码分为两块:设备和驱动。下是该总线下的所有设备,而这些设备都是符号链接,他们分别指向真正的设备(:挂载在某个总线的物理设备。原创 2024-10-17 09:38:12 · 1201 阅读 · 0 评论 -
【Linux】ioctl分析
一个字符设备驱动通常会实现常规的openreleaseread和write接口,但是如果需要扩展新的功能,通常以ioctl接口的方式实现。fill:#333;user spacevfsdriverioctl()ulocked_ioctl()或compat_ioctl()user spacevfsdriver。原创 2024-10-14 16:42:33 · 1360 阅读 · 0 评论 -
【Linux】最基本的杂项设备驱动
misc的意思是混合、杂项的,因此misc驱动也叫杂项驱动。当我们板子上的某些外设无法进行分类的时候就可以使用该项驱动。所有杂项设备都共用一个主设备号(10),不同的子杂项设备使用不同的子设备号。原创 2024-10-12 14:55:22 · 385 阅读 · 0 评论 -
【Linux】最基本的字符设备驱动
前面我们介绍到怎么编译出内核模块.ko文件,然后还加载了这个驱动模块。但是,那个驱动代码还不完善,驱动写好后怎么在应用层使用也没有介绍。原创 2024-10-11 15:10:56 · 1039 阅读 · 0 评论 -
【Linux】驱动的基本架构和编译
Kconfig文件中配置为default y执行指令进行编译上述指令是编译整个内核,编译后将镜像文件烧录至开发板,驱动会自动加载Kconfig文件中配置为default m执行指令进行编译上述指令是编译驱动模块,编译结果只有.ko文件,需要上传至开发板手动加载(开发板提前烧录好不含驱动的镜像)行编译上述指令是编译整个内核,编译后将镜像文件烧录至开发板,驱动会自动加载Kconfig文件中配置为default m执行指令进行编译上述指令是编译驱动模块,编译结果只有.ko。原创 2024-09-24 16:19:01 · 1271 阅读 · 0 评论 -
【linux驱动】什么是驱动
在谈驱动之前,我们需要先谈内核。内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,决定着整个操作系统的性能和稳定性。不包括应用层IPC、文件系统功能、设备驱动模块。微内核具有动态扩展性强的优点。Windows操作系统、华为的鸿蒙操作系统就属于这类微内核架构。宏内核架构是将应用层IPC、文件系统功能、设备驱动模块都编译成一个整体。优点:执行效率高缺点:一旦我们想修改或增加内核某个功能时(如增加设备驱动程序)都需要重新编译一遍内核。原创 2024-09-23 18:14:10 · 1134 阅读 · 0 评论 -
【rk3588】环境搭建及系统编译
在目录下,有不同板型的配置文件(xxxx.mk),用于管理 SDK 每个环节的编译配置,可以查看一下显然,根据名称,我们要使用的是,因为我们要编译buildroot系统。#**roc-rk3588s-pc-buildroot.mk**文件内容如下前3行代码使用source命令来执行位于当前脚本同一目录下的文件。前3行代码使用source命令来执行位于当前脚本同一目录下的/bin/bash配置文件指定了DTS文件和分区表文件等其他文件。上述配置文件中是。原创 2024-08-29 18:54:12 · 6048 阅读 · 0 评论 -
Shell教程
Shell编程跟JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux的Shell中类众多,可以使用以下指令直到系统支持的Shell类型:zhudk@vm1:~$ cat /etc/shellszhudk@vm1:~$ cat /etc/shells# /etc/shells: valid login shells/bin/sh/bin/bash/bin/rbash/bin/dash/bin/zsh/usr/bin/zsh原创 2022-04-13 16:54:24 · 953 阅读 · 0 评论 -
cmake基础
cmake安装:Download | CMake。在这之前,我们介绍一下cmake。虽然Make和Makefile简化了手动构建的过程,但是编写Makefile文件仍然是一个麻烦的工作,因此就有了CMake工具。CMake工具用于生成Makefile文件,而如何生成Makefile文件,则由CMakeLists.txt文件指定。它们直接的关系如下图:使用cmake生成Makefile并编译的流程如下:编写CMake配置文件CMakeLists.txt。执行命令 cmake path生成CMake原创 2022-04-12 19:11:09 · 2503 阅读 · 0 评论 -
Makefile基础
书写规则规则包括两部分,一个是依赖关系,一个是生成目标的方法.规则的语法:targets : prerequisites command ...targets是文件名,以空格分开,可以使用通配符.一般来说,我们的目标基本上是一个文件,但也有可能是多个文件.command是命令行,如果其不与"targets : prerequisites"在一行,那么必须以Tab键开头.prerequisites也就是目标所依赖的文件(或依赖目标).如果其中的某个文件要比目标文件要新,那么,目标就被认为是"过原创 2022-04-11 20:42:03 · 406 阅读 · 0 评论 -
Linux GCC编译原理
简介GCC是GNU Compiler Collection也即GNU编译器家族的缩写。简单编译//main.c#include <stdio.h>int main(void){ printf("Hello World!\n"); return 0;}有上述源文件main.c,在其同目录下执行命令:gcc main.c -o main即可在同目录下得到名为main的可执行性文件.(不同的平台有不同的后缀).实际上,上述编译过程是分为四个阶段进行的,即:预处理:Pre原创 2022-04-11 20:14:05 · 250 阅读 · 0 评论