自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 内存管理之文件内存映射(mmap):外存(磁盘/flash)的文件映射到应用层(跨越内核层)

文件内存映射(Memory-mapped File) 是一种将文件内容直接映射到进程虚拟地址空间的技术。通过调用mmap()系统调用,程序可以像访问普通内存一样访问文件数据,而无需反复使用read()或write()进行数据拷贝。内存映射提高了文件访问效率,适合处理大文件、共享内存和与设备驱动的交互等场景。常见用法包括读取大规模日志、图像处理、数据库缓存等。

2025-04-22 19:21:29 325

原创 内核中的内存分配函数 kmalloc、kzalloc、devm_kzalloc 功能及区别分析

kmalloc是 Linux 内核中最基本的内存分配函数,用于在内核空间分配连续的物理内存块。其原型为,其中size是要分配的内存大小(单位为字节),flags是分配标志,表示待分配内存的类型,也指定是否可以睡眠。功能:主要用于内核中需要连续物理内存的场景,例如分配内核数据结构、设备驱动程序中的缓冲区等。kzalloc是基于kmalloc实现的一个包装函数,其原型为。它在分配内存的同时会将分配的内存区域初始化为零。功能:适用于需要初始化为零的内存分配场景,避免了手动清零的操作,简化了代码。

2025-03-20 10:04:10 375

原创 Linux内核模块(字符设备框架)实现MPU6050采集数据并实时显示到OLED屏幕

MPU6050模块能够采集三轴加速度信息和三轴角速度,常用于无人机、无人车等领域。针对MPU6050,我们通常只需要在对其写信息初始化,然后读取其内部的各个有用的寄存器信息即可。OLED模块这里采用的尺寸为0.96寸,使用I2C通信,需要对其初始化进行一些配置,然后通常就是对RAM写信息使其显示字符。综合来说,本文要完成两个模块的驱动(在内核层)编写,在此基础上还要在应用层利用标准接口函数编写软件,然后使用交叉编译工具链编译,使其能够运行在jetson nano板子上。

2025-03-18 20:04:42 792

原创 Linux内核源码中container_of 宏定义解析及例子说明

container_of - 通过结构体成员指针获取包含该成员的结构体指针* @ptr: 指向结构体成员的指针.* @type: 是包含该成员的结构体类型.* @member: 是结构体成员的名称.*/ # define offsetof(TYPE , MEMBER)((size_t) &((TYPE *) 0) -> MEMBER) //运算符优先级为:'->' 优先级高于 '&' # define container_of(ptr , type , member)({})

2025-03-07 12:01:42 300

原创 PWM子系统芯片驱动源码pwm-tegra.c分析

本文结合芯片手册中提供的pwm控制器的硬件信息,分析了pwm控制器的驱动程序。源码主要包括以下几部分:1)定义pwm控制器寄存器相关信息;2)实现pwm_ops中的三个函数,分别为configenable和disable;3) 初始化pwm控制器,完成结构体空间申请,解析设备树相关信息并赋给结构体中的部分成员,最后调用,完成设备注册。4)最后按照平台驱动框架,使用前面的模块加载函数、卸载函数以及用于匹配设备树的结构体数组 这三个部分实例化平台驱动结构体,接着完成整个平台驱动。

2025-03-06 22:09:18 377

原创 Linux驱动分析(PWM子系统部分关键源码分析,结合具体功能实现)

以上内容大致分析了jetson nano的pwm子系统在应用层和内核层的使用和有关源码。首先,就暴露给应用层的文件操作来说,这极大方便了驱动开发过程中的调试。其次通过驱动源码的分析,我们可以大致了解整个驱动的框架,也有助于我们加深驱动源码的理解。本文虽然花费较多笔墨用于源码分析,但侧重于代码框架,对代码实现的分析较少,因此下一步将深入学习pwm子系统在驱动中的具体配置函数。

2025-03-05 17:55:43 912

原创 Linux驱动中,为什么功能实现函数的参数中均包含“struct device * “类型的结构体指针?

通过传递 child 成员,可以利用设备模型中的各种功能,如设备注册、属性管理等。函数)都使用 struct device 类型的指针作为参数。类型的指针,可以使这些接口函数具有通用性,适用于不同类型的设备。,于是提出问题:“为什么不直接传指向pwm设备的指针?是设备模型中的通用结构体,可以表示各种类型的设备。因此,从这个角度来看,传。结构体中的任一成员都是等价的。

2025-03-04 21:09:15 275

原创 平台设备驱动之gpio子系统(写驱动实现在/sys/...目录下用echo命令点灯)

【代码】平台设备驱动之gpio子系统(写驱动实现在/sys/...目录下用echo命令点灯)

2025-02-26 21:08:02 242

原创 函数指针及其在结构体命名成员初始化方法中的使用

函数指针是一种指向函数的指针,允许程序动态地调用不同的函数。函数指针保存了函数的地址,可以通过它来调用目标函数,而不需要显式地知道函数的名称。函数指针的定义方法类似于定义其他类型的指针,不同之处在于函数指针需要指定函数的返回类型和参数类型。假设我们有一个函数,它接受两个int类型的参数并返回一个int类型的结果。表示func_ptr是一个指向函数的指针,该函数接受两个int类型参数并返回一个int类型的结果。

2025-02-19 11:23:58 302

原创 存储类别(作用域、链接、存储期)介绍,及内核模块中模块初始化函数使用static关键字的原因

作用域描述程序中可访问标识符的区域,一个C变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域。块作用域:通常是位于函数块内的变量,可见范围是从定义处到包含该定义的块的末尾。需要注意,函数的形参也具有块作用域,属于函数体这个块。文件作用域:变量的定义在函数的外面,具有文件作用域。改变量的可见范围:从变量定义处到文件结尾处。

2025-02-17 12:09:56 655

原创 基于jetson nano,自定义内核模块控制LED亮灭,从应用层到内核层再到硬件层,实现流水灯效果

(1)通过阅读Tegra_X1芯片手册,确定所有需要写寄存器的地址(这里要注意板子上的引脚标号与芯片上的标号的对应关系,进而才能找到引脚所对应的控制寄存器)。这里需要写的寄存器有:引脚复用控制寄存器(配置目标引脚的功能为GPIO)和GPIO控制寄存器(包括CNF/OE/OUT等,主要用于配置该组GPIO8个引脚中的某个具体引脚);基于此,简单做一个可以从应用层调用,经过内核层,并在硬件层呈现流水灯(三个LED灯分别接在 Pin 12/13/19 )效果的小实验。(2)硬件层的地址如何在内核层中被使用?

2025-01-21 22:33:54 433

原创 内联汇编代码的初步简单认识(使用编译器aarch64-linux-gnu-gcc)以及内联汇编的一般代码格式

【代码】内联汇编代码的初步简单认识(使用编译器aarch64-linux-gnu-gcc)以及内联汇编的一般代码格式。

2025-01-07 18:31:03 254

原创 如何解决Linux内核目录下make menuconfig,菜单目录找不到某个配置(如“NFS client support“)的开关问题?

从上图可见,该变量在内核配置菜单中的描述为"Enable POSIX file locking API",下面就去菜单中勾选上这个配置就好了。,换言之,只要把这三个变量配置好,那么nfs的配置开关就能出现了。想要通过配置内核菜单,使内核能支持nfs,键入。从图中不难看出这个三态开关的存在依赖于变量。从上图可以看到,这个变量在。先通过在内核顶层目录运行。中已经是配置好的状态。后,逐级菜单寻找不到。

2025-01-06 22:40:14 266

原创 通过修改Makefile以及Kconfig 文件,向项目中添加新驱动(非侵入式)的一个简单例子

大型项目的编译往往由最顶层Makefile和子目录下面的众多Makefile管理,底层的Makefile一般比较简单(通过配置菜单界面生成的.config文件中的变量,来决定哪些文件参加编译),通过修改底层目录的Makefile和Kconfig文件,可以添加第三方驱动。的某个网卡驱动添加进项目代码中,我们先将该。1、首先,假设现在我们要将一个。

2024-12-16 16:51:36 148

原创 make配置、编译相关的命令(make menuconfig/make ****_defconfig/make install)

make配置、编译相关的命令(make menuconfig/make ****_defconfig/make install)

2024-12-11 20:28:48 259

原创 Linux系统文件损坏 EXT4-fs error (device sda1): ext4_lookup:1603: inode #2900322

EXT4-fs error (device sda1): ext4_lookup:1603: inode #2900322: comm rm: deleted inode referenced: 29003

2024-12-05 21:07:35 581

原创 使用命令ext4load mmc 1:1 时,u-boot返回Card did not respond to voltage select

保存变量,重启后,u-boot停在 Card did not respond to voltage select,不能加载内核。1:1 ->表示mmc1的第一个分区,mmc1代表的是外接SD卡,但我用的板子使用的是emmc。

2024-11-25 22:11:39 600

原创 Jetson_nano尝试从u盘启动卡在No partition table - usb

已知国产B01板子默认启动系统方式为emmc启动,尝试将其改为从usb(u盘)启动,根据微雪的资料(见下图)进行一系列设置后,在emmc系统启动的u-boot阶段运行命令。这个错误提示扔给gpt,反馈是u盘没有创建分区表的原因,分析微雪的资料中确实没有对u盘创建分区表,导致u-boot无法识别引导分区;

2024-11-21 20:46:19 473

原创 u-boot在内存中运行时卡在Loading Environment from SPIFlash

尝试在Jetson nano 启动的u-boot阶段(u-boot版本为2020),在内存中运行2022版本的u-boot,启动日志卡在Loading Environment from SPIFlash…从能够正常启动的2020版本u-boot的启动日志的入手,这个版本的日志在对应的这一句显示为:Loading Environment from MMC。CONFIG_ENV_IS_IN_MMC没有配置;

2024-11-18 20:47:31 359

原创 jetson nano在uboot阶段,使用网线连接笔记本,但windows检测不到该以太网连接

jetson nano在uboot阶段,使用网线连接笔记本,但windows检测不到该以太网连接

2024-10-21 15:12:23 157

原创 无法通过SSH远程访问jetson nano,使用SSH命令时,返回“Network unreachable”

无法通过SSH远程访问jetson nano,使用ssh命令时,返回“Network unreachable”

2024-09-27 20:29:20 421

原创 自定义jupyter notebook的启动文件目录

修改jupyter notebook的默认文件路径

2024-05-06 22:06:44 338 2

原创 关于指针常量和常量指针

指针常量是指一个指针本身是常量,不能通过该指针修改其所指向的内容。声明方式为在指针类型前加const关键字。// 指向常量整数的指针在这个例子中,ptr是一个指向常量整数的指针,意味着你不能通过ptr来修改所指向的整数的值,但是你可以让ptr指向其他地方。常量指针是指指针本身是可以修改的,但不能通过该指针修改其所指向的内容。声明方式为在指针变量名前加const关键字。// 常量整数指针在这个例子中,ptr是一个常量整数指针,你不能通过ptr。

2023-12-18 19:40:01 430 1

原创 C++的类和对象_基础

定义一个类需要使用关键字** class **,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。(1)下面使用关键字class定义Box数据类型:(关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。class Boxpublic:// 盒子的长度// 盒子的宽度// 盒子的高度(2)Box Box1;// 声明 Box1,类型为 BoxBox Box2;// 声明 Box2,类型为 Box。

2023-11-12 21:28:10 124 1

原创 C++中的new和delete运算符使用

new和delete,动态内存

2023-11-02 22:56:41 103

原创 数据结构_2_线性表_单链表

单链表C语言实现

2023-08-16 16:56:56 183 1

原创 数据结构_1_绪论

数据结构的一些基础知识

2023-08-12 16:32:57 72 1

原创 模拟电子技术_第二章_关于放大电路的部分思考(两种失真、静态工作点的稳定)

上图为输入特性曲线,即iB​= f(uBE​) |UCE​,温度升高时,曲线向左平移,当我们加入输入部分的负载直线后,与上图中的曲线的交点在温度升高时,显然Q点向左上移动,对应iB​减小;同样的,温度降低时,Q点向右下移动,对应iB​增大。再看到下图中的输出特性曲线:静态的Q点向左上移动后,iB​增加,故在上图中输出负载线和曲线的交点也向左上移动;相反则向右下移动。

2023-07-06 15:13:00 1429 1

原创 模拟电子技术_第二章_放大电路分析

模电的三极管放大电路分析(复习)

2023-07-02 18:07:11 400 1

原创 实参与形参的思考

当定义一个需要传入参数的函数时,为非指针类型参数时,当主程序调用该函数时,会为传入的值分配新的内存,即在函数中的变量虽然与主程序中的值一毛一样,但二者的地址不同,并且由于在程序跳出该函数后,为形参分配的内存会释放,所以通过传值的函数并不能改变实参的值;当定义一个使用指针变量或数组名的函数时,为函数的传地址方式,此时将实参所存放的地址赋予形参,由于该地址的唯一性,实参和形参将占用同一片内存空间,在函数体中可以通过地址访问相应的变量,从而改变主调函数中的变量值。形参:在被调函数中的变量,作用域一般仅限于函数。

2023-01-19 16:51:32 159

原创 C51单片机,基于LCD液晶屏的简易时钟

1、 实验原理图及相关设备介绍各引脚的功能介绍如下。·引脚1:VSS为地电源。·引脚2:VDD接5V正电源。·引脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10kQ的电位器调整其对比度。·引脚4:RS为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。·引脚5:R/W为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为

2022-01-15 16:58:06 3295 1

原创 keil编译报错,main.c(3): warning C318: can‘t open file...

想要直接调用代码模块点击Add后编译会发现无法打开Delay.h ,将两模块一起复制到当前keil对应的文件夹里再重新编译即可解决问题。

2022-01-15 16:23:44 12733

原创 单片机C51实现矩阵键盘密码锁

实验结果由矩阵键盘输入密码,按下确认键后,由LCD液晶显示屏输出结果是否正确软硬件目录STC89C52keil5stc烧录软件普中单片机开发板LCD1602部分代码(C语言)#include <REGX52.H>#include "LCD1602.h" //LCD矩阵键盘头文件#include "MatrixKey.h" //矩阵键盘头文件unsigned char KeyNum;unsigned...

2021-12-23 23:14:00 3032 1

原创 关于80C51,8086在堆栈上的区别

在80C51单片机中堆栈通常设在30H~7FH这一段片内RAM中,堆栈区是向地址增大的方向生成的,且由于CPU是8位的,数据入栈时,SP先加1,然后数据再压入SP指向的单元;数据出栈时,先将指向的单元的数据弹出,然后SP再减1。(以字节为单位)在8086CPU中堆栈是在存储器里开辟出来的一个特定的数据区域,称为堆栈段。堆栈的位置和长度由堆栈段寄存器SS和堆栈指针SP来设定,给定了SS和SP就设置了一个堆栈,其最大容量为64KB。堆栈区是向地址减小的方向生成的,操作方式有PUSH和POP,以字为单位,

2021-12-04 16:07:19 2804

原创 汇编,分支程序练习

1.某个学生的英语成绩已存放在BL中,如果低于60分,则显示F(Fail),如果高于或者等于85分,则显示G(Good),否则显示P(Pass),试编写完整的汇编语言程序来实现。DATA SEGMENT DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BL,70 CMP BL,60 JB FAIL CMP BL,85 JAE GOOD MOV AL,'P' J

2021-11-03 00:21:09 1244

原创 关于C语言单链表的一些操作函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言去年在学校学的C语言,现在与其说是复习还不如说是重学,主要是之前在大一时没有引起重视,现在自己主要是想深入一点的去学习指针之类的,核心的知识。总之,目的是弄懂C语言,方法是看书和做题。提示:以下是本篇文章正文内容,下面案例可供参考一、每日学习感想示例:pandas 是基于NumPy 的一种工具,该工

2021-08-05 22:44:17 1237

空空如也

空空如也

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

TA关注的人

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