自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux系统编程】网络编程

tcp、udp区别、端口号作用、字节序、socket套接字

2025-02-20 10:30:00 1416

原创 【Linux】文件系统、文件结构、虚拟化文件系统

1.什么是文件系统;2.文件系统种类;3.什么是分区;4.文件系统目录结构;5.文件系统结构;6.文件类型;7.文件名规则;8.绝对路径与相对路径;9.虚拟文件系统概念;10.VFS作用;

2024-10-06 07:00:00 1157

原创 【树莓派系列】OSI(七层)网络模型,三次握手四次挥手,Socket.TCP/IP.HTTP三者说明

按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。

2024-10-05 07:00:00 808

原创 【Linux 并发与竞争实验】

之前学习了四种常用的处理并发和竞争的机制:原子操作、自旋锁、信号量和互斥体。本章我们就通过四个实验来学习如何在驱动中使用这四种机制。

2025-04-16 21:35:24 942 1

原创 【Linux 并发与竞争】

Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车,大家按照谁扫谁骑走的原则来共用这个单车,如果没有这个并发访问共享单车的原则存在,只怕到时候为了一辆单车要打起来了。在 Linux 驱动编写过程中对于并发控制的管理非常重要,本章我们就来学习一下如何在 Linux 驱动中处理并发。

2025-04-16 20:51:52 935

原创 【STM32串口】使用状态机接收HEX数据包的编程思维

1.HEX模式/十六进制模式/二进制模式:以原始数据的形式显示文本模式/字符模式:以原始数据编码后的形式显示。

2025-04-04 09:17:39 865 1

原创 【STM32】Flash详解

Flash 闪存是总称,包含 NOR 和 NAND 两种技术。NAND Flash是 Flash 的子集,因容量大、成本低,成为消费电子存储的绝对主流。NOR Flash在小容量、代码直接执行的场景不可替代。因此,当人们提到“Flash 闪存”时,若未明确说明,通常默认指NAND Flash;但在嵌入式开发或特定工业领域,“Flash”可能特指 NOR Flash,需结合上下文区分。支持 XIP(Execute-In-Place)NOR Flash 允许 CPU直接读取并执行代码。

2025-04-04 09:16:03 3326

原创 【系统移植】(六)第三方驱动移植

之前编译的都是跟内核原本的驱动目录都在一块呢,如果我们写了很多驱动的话还是很乱,这个部分就是把自己写的驱动与Linux原本驱动分离开来。搞一个应用程序,测试这个LED点灯程序,Linux下一切皆文件,那么访问应用层访问底层的入口就是。如何关联起来kconfig和makefile。(之前直接写的-y就写死了)由方法一可知,添加一个驱动还行,如果有n个呢?换成tristate就可有三种模式选择,可编译不可编译,编译编译成模块。

2025-04-03 19:04:45 652

原创 【系统移植】(五)Linux内核移植及网卡移植

Linux内核移植及网卡移植。

2025-04-03 19:03:51 532 1

原创 【系统移植】 (四)Linux内核分析

从技术上说 linux 是一个内核“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。通常我们使用的 linux 系统是一个集 linux 内核、工具集、各种库、桌面管理器、应用程序等一体的一个发布包(发行版)主流的Linux发行版SUSE LinuxAsianuxCentOSLinux 内核的特性免费开源可以移植,支持的硬件平台广泛高可扩展性可剪裁、可扩展,可以运行在大型主机,也可以运行在个人计算机上。

2025-04-02 07:45:00 900

原创 【系统移植】 (三)uboot烧写及使用

什么是BootloaderBootloader是硬件启动的引导程序,是运行操作系统的前提;在操作系统内核或用户应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境;在嵌入式系统中,整个系统的启动加载任务通常由Bootloader来完成。Bootloader的特点Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。在移植系统时,首先为开发板移植Bootloader。

2025-04-02 07:00:00 985

原创 【系统移植】 (二)交叉开发环境搭建

在使用TFTP(Trivial File Transfer Protocol,简单文件传输协议)服务时,是否需要在下位机开发板上安装TFTP客户端或服务器取决于您的具体需求和开发板的操作系统支持情况。tftp(Trivial File Transfer Protocol)即简单文件传输协议,是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。总的来说,如果你需要在网络中进行安全的文件传输,SCP是更好的选择。修改为如下内容,然后保存退出。

2025-04-01 21:18:57 1188

原创 【系统移植】(一)概念流程

我们需要移植的一共有4个。1. uboot移植2. Linux内核(包含设备树)3. 根文件系统移植

2025-04-01 21:15:55 1211

原创 【Linux驱动开发】pinctrl 和 gpio 子系统实验

Linux 驱动讲究驱动分离与分层,pinctrl 和 gpio 子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架,关于驱动的分离与分层我们后面会讲。我们先来回顾一下《设备树下的LED驱动实验》是怎么初始化 LED 灯所使用的 GPIO,步骤如下:①、修改设备树,添加相应的节点,节点里面重点是设置 reg 属性,reg 属性包括了 GPIO相关寄存器。②、获取 reg 属性中和。

2025-03-30 08:00:00 961

原创 【Linux设备树–IMX6ULL】设备树下的 LED 驱动实验

从可以看出,alpahled 这个节点找到了,并且 compatible 属性值为“atkalpha-led”,status 属性值为“okay”,reg 属性的值为“0X20C406C 0X4 0X20E0068 0X4 0X20E02F4 0X4 0X209C000 0X4 0X209C004 0X4”,这些都和我们设置的设备树一致。本章我们使用设备树来向 Linux 内核传递相关的寄存器物理地址,Linux 驱动文件使用OF函数从设备树中获取所需的属性值,然后使用获取到的属性值来初始化相关的 IO。

2025-03-30 07:00:00 874

原创 【Linux设备树–IMX6ULL】(二)设备树下

关于设备树常用的 OF 函数就先讲解到这里,Linux 内核中关于设备树的 OF 函数不仅仅只有前面讲的这几个,还有很多 OF 函数我们并没有讲解,这些没有讲解的 OF 函数要结合具体的驱动,比如获取中断号的 OF 函数、获取 GPIO 的 OF 函数等等,这些 OF 函数我们在后面的驱动实验中再详细的讲解。④、关于设备树的 OF 操作函数,也是重点,因为设备树最终是被驱动文件所使用的,而驱动文件必须要读取设备树中的属性信息,比如内存信息、GPIO 信息、中断信息等等。

2025-03-29 08:00:00 715

原创 【Linux设备树–IMX6ULL】(一)简介和DTS语法

设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支。

2025-03-29 07:00:00 948

原创 【字符设备驱动开发–IMX6ULL】新字符设备驱动实验

老字符设备驱动开发重点是使用函数注册字符设备,当不再使用设备的时候就使用函数注销字符设备,驱动模块加载成功以后还需要手动使用 mknod 命令创建设备节点。register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数。现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。本节我们就来学习一下如何编写新字符设备驱动,并且在驱动模块加载的时候自动创建设备节点文件。

2025-03-28 07:45:00 1069

原创 【字符设备驱动开发–IMX6ULL】嵌入式 Linux LED 驱动开发实验–寄存器版

经过前面几步,GPIO1_IO03 已经配置好了,只需要向 GPIO1_DR 寄存器的 bit3 写入 0 即可控制 GPIO1_IO03 输出低电平,打开 LED,向 bit3 写入 1 可控制 GPIO1_IO03 输出高电平,关闭 LED。所以本章的 LED 灯驱动最终也是对 I.MX6ULL 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux的驱动框架。Linux 内核启动的时候会初始化 MMU,设置好内存映射,设置好以后 CPU 访问的都是虚拟地址。

2025-03-28 07:00:00 905

原创 【字符设备驱动开发–IMX6ULL】(四)chrdevbase 字符设备驱动开发实验

本节我们就以 chrdevbase 这个虚拟设备为例,完整的编写一个字符设备驱动模块。chrdevbase 不是实际存在的一个设备,是笔者为了方便讲解字符设备的开发而引入的一个虚拟设备。chrdevbase 设备有两个缓冲区,一个为读缓冲区,一个为写缓冲区,这两个缓冲区的大小都为 100 字节。在应用程序中可以向 chrdevbase 设备的写缓冲区中写入数据,从读缓冲区中读取数据。chrdevbase 这个虚拟设备的功能很简单,但是它包含了字符设备的最基本功能。

2025-03-27 08:00:00 832

原创 【字符设备驱动开发–IMX6ULL】(三)字符设备驱动开发步骤

我们在学习裸机或者 STM32 的时候关于驱动的开发就是初始化相应的外设寄存器,在 Linux 驱动开发中肯定也是要初始化相应的外设寄存器,这个是毫无疑问的。只是在 Linux 驱动开发中我们需要按照其规定的框架来编写驱动,所以说学 Linux 驱动开发重点是学习其驱动框架。

2025-03-27 07:30:00 833

原创 【字符设备驱动开发–IMX6ULL】(二)Linux 设备号

注册字符设备的时候需要给设备指定一个设备号,这个设备号可以是驱动开发者静态的指定一个设备号,比如选择 200 这个主设备号。这 32 位的数据构成了主设备号和次设备号两部分,其中高 12 位为主设备号,低 20 位为次设备号。为了方便管理,Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。,在注册字符设备之前先申请一个设备号,系统会自动给你一个没有被使用的设备号,这样就避免了冲突。注销字符设备之后要释放掉设备号,

2025-03-26 11:12:19 864

原创 【字符设备驱动开发–IMX6ULL】(一)简介

字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。在详细的学习字符设备驱动架构之前,我们先来简单的了解一下 Linux 下的应用程序是如何调用驱动程序的,Linux 应用程序对驱动程序的调用如图所示:在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为。

2025-03-26 11:10:52 1044

原创 POSIX消息队列与System V消息队列

是一个结构体,用于描述当消息队列中有新消息时,如何通知进程。:通知方法,取值如下:SIGEV_NONE:不发送任何通知。:发送一个信号事件发生时,将sigev_signo指定的信号发送给指定的进程;:事件发生时,内核会(在此进程内)以sigev_notify_attributes为线程属性创建一个线程,并让其执行sigev_notify_function,并以sigev_value为其参数:当为时,指定要发送的信号。:通知时传递的数据,类型为。:当为时,指定的线程函数。:当为。

2025-03-24 10:15:00 1897

原创 Linux关机重启指令

因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失使系统处于不稳定的状态。而在系统关机前使用shutdown命令,系统管理员会通知所有登录的用户系统将要关闭。直接关机或者延迟一定的时间才关机都是可能的,还有可能是重启。如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消关机。如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启。下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法。

2025-03-24 07:45:00 386

原创 解决虚拟机不能上网ifconfig只显示127.0.0.1的问题

只显示127.0.0.1,不能连上外网。就可以看到多了一个ip地址。

2025-03-23 09:45:00 618

原创 解决开发板、主机、虚拟机ubantu三者ping不通问题

Windows 11系统。

2025-03-23 08:00:00 1129

原创 NAT模式、仅主机模式和桥接模式三者间的区别

模式特点用途NAT模式虚拟机通过主机共享网络,外部网络无法直接访问虚拟机,除非配置端口转发开发和测试,多虚拟机网络,需要访问互联网但不需要从外部网络直接访问虚拟机仅主机模式虚拟机与主机在同一私有网络,仅主机网络,隔离的网络环境内部测试,安全隔离,需要在主机和虚拟机之间进行通信但不需要访问外部网络桥接模式虚拟机直接连接到物理网络,获取独立IP地址,完全的网络访问开发和部署,网络测试,需要虚拟机像物理主机一样直接连接到网络通过以上对比,你可以根据具体需求选择合适的网络模式。

2025-03-22 09:00:00 853

原创 VMware虚拟机三种网络模式详解

常用的虚拟机软件有VMware Workstations和VirtualBox等。而VMware的网络连接问题是大家遇到最多问题之一。接下来,我们就一起来探讨一下关于VMware Workstations网络连接的三种模式。。打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那么这些都是有什么作用呢?其实,我们现在看到的VMnet0表示的是用于桥接模式下的虚拟交换机;

2025-03-22 08:45:00 2679

原创 Linux下解压缩命令合集

根据不同的压缩文件格式,选择合适的解压缩命令。.tar.tar.gz或.tgz.tar.bz2.tar.xz.gz.bz2.xz.zip.rar(需要安装rar.7z(需要安装p7zip-full这些命令可以帮助你在Linux系统中轻松解压缩各种格式的文件。在Linux下,有多种压缩命令,适用于不同的文件格式。根据不同的需求,选择合适的压缩命令。创建.tar文件创建.tar.gz或.tgz文件创建.tar.bz2文件创建.tar.xz文件压缩文件为.gzgzip file压缩文件为.bz2。

2025-03-21 15:38:49 2041

原创 正点原子阿尔法IMX6ULL通过命令行连接WiFi

通过上述步骤,你可以成功地在正点原子阿尔法IMX6ULL开发板上通过命令行连接WiFi。如果遇到问题,可以参考正点原子提供的文档和脚本,确保所有步骤正确无误。

2025-03-21 15:36:51 1086

转载 【嵌入式内存分配】数据段、 BSS 段、代码段、堆和栈段

*数据段是程序中用于存放已初始化的全局变量和静态变量的一块内存区域。**这些变量在程序编译时就已经确定了其大小和初始值,并在程序加载到内存时,这些初始值会被复制到数据段中相应的位置。数据段的内容在程序运行期间通常保持不变,除非程序通过代码显式地修改这些变量的值。数据段属于静态内存分配,意味着在程序运行之前,操作系统或编译器就已经为数据段分配了足够的内存空间。与堆栈段和堆段不同,数据段的内存分配和释放是由编译器在编译时确定的,而不是在程序运行时动态分配的。

2025-02-27 11:15:00 1096

原创 【C语言】运算符优先级

复合运算符有:+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=在更复杂的表达式中,这两种递增方式的选择可能会影响程序的逻辑和结果。&&(逻辑与) ||(逻辑或)这里说一些需要注意的事项。

2025-02-27 10:30:00 597

转载 【嵌入式开发】位运算的进阶技巧

在嵌入式系统中,位运算是一种高效且常用的操作手段,它允许开发者在不使用复杂数据结构或额外内存的情况下,对硬件寄存器、状态标志等进行精确控制。使用按位或运算()可以将一个数的特定位设置为1,而不影响其他位。这常用于设置硬件寄存器的某个功能位。例如,要设置某个寄存器的第n位为1,可以使用如下操作:寄存器 |= (1 << n)。1.2 清除标志位使用按位与运算()和取反运算()可以将一个数的特定位清零,而不影响其他位。这常用于关闭硬件寄存器的某个功能。例如,要清除某个寄存器的第n位,可以使用如下操作:寄存器

2025-02-26 10:30:00 715

原创 【嵌入式开发】static关键字的用法

用于函数内部的局部变量时,这些变量在函数调用结束后不会消失,而是保留其值,直到程序结束。用于全局变量时,它限制了变量的作用域,使其只能在定义它的源文件中访问。如果初始化器是一个常量表达式,那么静态变量的初始化可以在编译时完成。关键字可以用于任何变量声明,指示编译器在程序的整个生命周期内为该变量分配存储空间。用于函数时,它限制了函数的作用域,使其只能在定义它的源文件中调用。这通常用于定义固定大小的数组,其大小在编译时已知。关键字是实现封装和隐藏实现细节的重要工具,它有助于模块化编程和避免命名冲突。

2025-02-26 08:45:00 341

原创 【嵌入式开发】extern关键字的用法

关键字来声明全局变量,这样包含头文件的源文件就可以访问这些变量,而不需要在每个源文件中都定义它们。关键字可以有效地管理程序中不同模块之间的变量和函数的可见性和访问权限,是实现程序模块化的重要手段。关键字支持模块化编程,允许将程序分解为多个模块,每个模块可以独立编译,然后在链接时组合在一起。关键字用于在一个文件中声明一个在另一个文件中定义的全局变量。关键字也用于在一个文件中声明在另一个文件中定义的函数。关键字声明同一个全局变量或函数,可以避免在每个文件中都定义它们,从而防止重复定义的错误。

2025-02-25 11:30:00 436

原创 【嵌入式开发】const在变量不同位置的含义

在C语言中,const是一个关键字,用于声明常量,即在程序运行期间其值不能被修改的变量。使用const可以提高代码的可读性和可维护性,同时允许编译器进行更多的优化和错误检查。const。

2025-02-24 14:52:29 399

原创 【C语言】预处理器

C 语言编译器在编译程序之前,会先使用预处理器(preprocessor)处理代码。预处理器首先会清理代码,进行删除注释、多行语句合成一个逻辑行等工作。然后,执行#开头的预处理指令。预处理指令可以出现在程序的任何地方,但是习惯上,往往放在代码的开头部分。每个预处理指令都以#开头,放在一行的行首,指令前面可以有空白字符(比如空格或制表符)。#和指令的其余部分之间也可以有空格,但是为了兼容老的编译器,一般不留空格。所有预处理指令都是一行的,除非在行尾使用反斜杠,将其折行。指令结尾处不需要分号。1.

2025-02-24 14:51:10 1495

原创 【C语言】结构体字节对齐

在C语言中,结构体(struct)的字节对齐(也称为内存对齐或数据对齐)是一种内存布局的优化手段,它涉及到结构体成员在内存中的排列方式。字节对齐的主要目的是提高内存访问的效率,因为大多数现代处理器在访问按照其字长(如32位或64位)对齐的内存地址时速度更快。自然对齐(成员对齐):每个成员变量的起始地址都是其大小的整数倍。例如,如果一个结构体包含一个int(假设int是4字节)和一个char(1字节),那么int成员的起始地址应该是4的倍数,而char成员的起始地址可以是任意地址。结构体对齐。

2025-02-24 14:49:43 1323

原创 【STM32】内存管理

如何在LCD 上面实现SD卡文件浏览?需要读取所有文件名到内存,然后显示到LCD。一般的方法,是定义一个数组来存储所有文件名1,需要知道最大文件名的长度。255字节。2,需要知道文件个数。100?1000?10000?如果没有内存管理:则要定义一个:uint8_t filenametbl[10000][255];的数组!占用2550K字>节内存内存管理,是指软件运行时对MCU内存资源的分配和使用的技术。(内存的大管家)其最主要目的是:如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

2025-02-23 21:56:38 1027

sdkmanager-2.0.0-11405-amd64

sdkmanager_2.0.0-11405_amd64

2025-02-21

嵌入式开发学习网站大全

嵌入式开发学习网站大全

2025-02-21

香橙派交叉编译所需要的库文件

香橙派交叉编译所需要的库文件

2025-02-21

姿态角解算(DMP库)

姿态角解算(DMP库)其中·包含匿名上位机

2024-04-21

Source Insight4 安装包

Source Insight是一个功能非常强大的,面向项目的程序编辑器,能够对多文件代码中变量和函数的进行快速搜索,极大的方便了我们对代码的搜索与阅读,使我们可以轻松地浏览和编辑代码,于此同时自动的显相关信息,让我们轻松跳转到函数的调用者或对变量的引用。

2024-04-17

STM32F4系列单片机固件库

内容概要:通过安装包一键安装好stm32f4系列的固件库

2024-03-28

空空如也

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

TA关注的人

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