自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux驱动学习day3

在注册驱动的时候直接使用register_chrdev()的时候,不用指定主设备号,也可以不指定次设备号,这样会霸占一个主设备号下所有的次设备号,为了解决这个问题,使用alloc_chrdev_region(),该函数可以获得主设备号和可以指定次设备号的个数,并且使用cdev_init()和cdev_add()函数和重要的file_operations结构体挂钩。在入口函数和出口函数指定。

2025-06-08 22:55:14 1049

原创 Linux驱动学习day2

app与驱动之间,通过下面两个函数交互数据驱动和硬件之间交互。

2025-06-06 22:14:39 326

原创 Linux驱动学习day1

阅读驱动源码的工具好难调(一开始时间都比较多花费在配置环境等上面),用vscode+clangd确实是很方便(配置好环境)。驱动学习加油!

2025-06-06 16:08:49 513

原创 嵌入式Linux之RK3568

进入瑞芯微发开工具RKDevTool,选择升级固件,上传到固件,记住这里要进入maskrom模式或者是loader模式,进入该模式之后点击升级即可。

2025-06-04 20:56:43 428

原创 嵌入式项目之mini2440系统制作烧写

在嵌入式开发中,**系统移植(Linux 系统定制)** 是常见的需求,主要原因在于:1. **官方镜像体积过大**:标准 Linux 发行版(如 Ubuntu)可能占用数 GB 存储,而嵌入式设备的 **Flash 存储容量有限**(如 256MB),因此需要裁剪和优化。2. **资源适配**:不同硬件(如 ARM 开发板)需要匹配专用的驱动和配置,直接使用通用镜像可能导致兼容性问题。

2025-06-01 16:36:50 877

原创 嵌入式项目之QT页面制作

学习一下QT的基本语法以及基本操作。

2025-05-25 17:44:41 427

原创 嵌入式项目之交叉编译m2440篇

在Linux虚拟机上写好代码,并进行编译,确保编译无出错,准备移植到开发板上的工作。

2025-05-20 17:48:08 672

原创 Linux网络编程day10 web服务器

网页文档的主要语言,在计算机中以.html 和 .htm作为扩展名,可以被浏览器访问。

2025-05-11 17:56:16 193

原创 Linux网络编程day9 libevent库

开源。精简。跨平台(Windows,Linux,maxos)。专注于网络通信。源码包安装:参考README1、./configure 检查安装环境 生成makefile2、make 生成.o和执行文件3、sudo make install 将必要的资源拷贝至系统指定目录4、进入sample目录进行验证,运行demo验证库安装使用情况5、编译使用库的.c时,需要加 -levent。

2025-05-11 11:59:05 1374

原创 Linux网络编程day8本地套接字

本地套接字通过C/S模型实现进程间通信,与网络编程中的TCP C/S模型有所不同。在本地套接字中,socket函数的domain参数需设置为AF_UNIX,地址结构使用sockaddr_un,并通过bind函数绑定到本地文件路径。服务器端在bind前需调用unlink确保文件路径可用,客户端则需显式绑定并初始化服务器地址结构。通信过程中,服务器通过accept接收连接,客户端通过connect建立连接。本地套接字适用于同一主机上的进程间通信,避免了网络通信的复杂性。

2025-05-09 11:38:17 518

原创 Linux网络编程day7 线程池and UDP

满足销毁条件wait_exit_thr_num赋值,signal给阻塞在条件变量上的线程发送假条件满足信号,跳转至wait阻塞,阻塞线程会被假信号唤醒,使用pthread_exit。根据既定算法,使用上述3变量判断是否应该创建、销毁线程池中的指定步长的线程。满足创建条件pthread_create()回调任务线程函数。加锁--》lock--》整个结构体的锁。加锁--》lock--》整个结构体的锁。唤醒阻塞在条件变量上的线程。对于不稳定的网络层,采取完全不弥补的通信方式,默认还原网络状况。

2025-05-08 22:54:58 1393

原创 Linux网络编程day6 下午去健身

显著提高程序在大量并发连接中只有少量活跃的情况下系统cpu利用率。

2025-05-07 21:56:14 351

原创 Linux 网络编程 day5 多路IO转接之改进select and poll

三种多路IO转接方法:select , poll , epoll改进select多路IO转接,使用数组来保存含有需要连接的套接字cfd,不用循环至1024,节约时间提高效率。

2025-05-06 22:00:49 962

原创 Linux网络编程 day4

2、主动关闭请求端ESTABLISHED-->发送FIN-->FIN_WAIT_1-->接收ACK-->FIN_WAIT_2(半关闭)-->接收对端FIN-->FIN_WAIT_2-->发送ACK-->TIME_WAIT-->等待2MSL时长-->CLOSE.4、被动关闭连接请求端ESTABLISHED-->接收SYN-->ESTABLISHED-->发送ACK-->CLOSE_WAIT-->发送FIN-->LAST_ACK-->接收ACK-->CLOSE.将待监听的文件描述符,添加到监听集合中。

2025-05-05 21:58:29 1331

原创 Linux网络编程 day3 五一结假

主动发起连接请求端,发送SYN标志位,请求建立连接。携带数据包包号、数据字节数(0)、滑动窗口大小。被动接收连接请求端,发送ACK标志位,同时携带SYN请求标志位。携带序号、确认序号、数据包包号、数据字节数(0)、滑动窗口大小。主动发起连接请求端,发送ACK标志位,应答服务器连接请求。携带确认序号、数据包包号。

2025-05-04 23:05:42 382

原创 Linux网络编程day2 (网络编程的函数好多好难记)

复习昨天学的socket编程,服务器端编程。服务器初始化serv_addr.sin_addr.s_addr的时候可以使用htonl(INADDR_ANY)。

2025-04-29 22:13:36 147

原创 Linux网络编程 day1(总算进入网络了)

自己重新手敲一遍使用条件变量实现生产者消费者模型。第一次写,一直在循环生产者,找了一下原因,发现当释放生产者的时候,忘记唤醒一下消费者了(没使用pthread_cond_signal())。思路还是正确的。

2025-04-28 17:42:16 1078

原创 Linux系统编程 day11 锁 (两天没有更新了,中期完就休息了)

1、尽量保证锁的粒度,越小越好。(访问共享数据前,加锁,访问结束后2、互斥锁,本质是结构体,但是可以看成整数,初值为1。(pthread_mutex_init调用成功)3、加锁: --操作,阻塞线程4、解锁:++操作,唤醒阻塞在锁上的进程try锁:尝试加锁 , 成功-- , 失败:返回错误号(EBUSY),不阻塞。

2025-04-27 17:35:32 947 1

原创 Linux系统编程 day10 接着线程(中期头大,还要写论文)

线程控制原语 进程控制原语fork();getpid();exit();kill();这里写一下昨天的join函数,那块有点难理解。int var;// 这里不能直接使用结构体,因为这是在栈上的// 这边需要在堆区分配内存,如果不使用堆区会发生错误,因为当线程执行完之后,栈上的内存会释放,如果返回栈上的内容会非法访问。if(ret!if(ret!if(ret!

2025-04-23 22:34:56 420

原创 Linux系统编程 day9 SIGCHLD and 线程

只要子进程信号发生改变,就会产生SIGCHLD信号。

2025-04-22 22:09:23 1029

原创 Linux系统编程 day7、8 信号(周日划水了)

int i;for(i = 0;i < 32;i++){}else{//初始化set// 将SIGINT位置变为1exit(1);return 0;

2025-04-21 21:50:39 710

原创 Linux系统编程 day6 进程间通信mmap

var的时候 :读时共享,写时复制父进程先创建映射区,指定共享MAP_SHARED权限 , fork创建子进程。

2025-04-19 20:17:32 628

原创 Linux 系统编程 day5 进程管道

Linux环境下,进程地址空间相互独立,任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能互相访问,要交换数据必须通过内核,在内核中开辟一块缓冲区(4096,buf),进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据拷走,内核提供的这种机制称为进程间通信(IPC)。常用的进程间通信的方式有:1、管道(使用最简单,要求有血缘关系)2、信号(开销最小)3、共享映射区(无血缘关系)4、本地套接字(最稳定)

2025-04-18 22:09:22 1532

原创 Linux系统编程学习 day4 进程

程序:死的,只占用磁盘空间。-----剧本进程:活的,运行起来的程序,占用CPU,内存等系统资源。------戏。

2025-04-17 22:24:10 791

原创 Linux系统编程 继续学习day3

接昨天的文件系统。

2025-04-17 09:03:48 279

原创 Linux系统编程 day2

由操作系统实现并提供给外部应用程序的编程接口(API)。是应用程序同系统之间数据交换的桥梁。

2025-04-15 21:53:32 1051

原创 linux 系统编程基础部分 day1

创建修改用户组查看当前用户组:whoami创建用户 sudo adduser 用户 sudo addgroup 组名添加权限:chmod [u,g,o,a]+[x,w,r] 数字表示法r4 w2 x1 chmod 471 每个权限种类想加给文件换所属用户 chown 新用户名 文件名 chgrp递归查找:find 路径 -type/name ' ' 无递归: find 路径 -maxdepth 1 -type/name '文件名';

2025-04-14 20:44:32 776

原创 操作系统

(OperatingSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。操作系统的特征:并发、共享、虚拟、异步,并发和共享是两个最基本的特征,二者互为存在条件。并发:指两个或多个时间在同一时间间隔内发生,宏观上是同时发生但是微观上是交替发生。单核CPU同一时刻只能执行一个程序,各个程序只能并发进行。多核CPU可以同一时刻运行多个程序,各个程序可以并行运行。

2025-04-12 21:58:26 1091

原创 day19

直接打印数组A,会得到A首元素的地址 也就是&a[0] = A,数组作为函数参数传入。通用数据类型的指针 , 不能解引用 也不能做指针运算。A[i]可以理解为*(A+i) (A+i) 也可以理解为 &(A+i)A[5]数组有一个特点,如果我们直接使用A , 会得到一个A[0]的地址。字符数组最后一位一定要是NUL ,'、\0' ,不然编译器无法打印。如果要保存整型变量指针的地址,就要使用 int **p。数组传引用传的是首地址而不是整个数组。多维数组当作函数参数传递的时候。

2025-03-27 22:08:54 176

原创 day18 常用算法剩下的,完结撒花!

sortrandom_shuffle洗牌merge容器元素合并,存储到另一个容器中revrese 反转元素。

2025-03-26 17:37:03 126

原创 day18 常用算法

算法主要包含的头文件有#include<algorithm>这个是最大的,常用的基本都在这里。

2025-03-26 17:20:41 427

原创 day18 内建函数对象

STL内建了一些函数对象,有 算术仿函数 关系仿函数 逻辑仿函数。这些仿函数所产生的对象,用法和一般函数完全相同,使用内建函数对象,需要引入头文件 #include<functional>

2025-03-26 16:36:44 211

原创 day18 谓词

如果operator()接收一个参数 就叫一元谓词。如果operator()接收两个参数 就叫二元谓词。谓词:返回bool类型的仿函数称为谓词。

2025-03-26 16:31:06 119

原创 day18 完结多补充点 STL函数对象

函数对象概念:重载函数调用操作符的类,其对象称为函数对象。函数对象使用重载()时,行为类似函数调用,也叫仿函数。函数对象(仿函数)本质是一个类,不是一个函数。

2025-03-26 16:29:43 138

原创 day17 周末两天偷懒没更新,今天炼丹加学习,完结STL常用容器部分

还剩下两个常用容器,一个是set(集合容器) , 一个是map容器。

2025-03-25 11:43:02 223

原创 day16 没进展怎么炼丹

功能:双端数组,可以对头端进行插入删除操作deque和vector区别:vector对于头部插入删除效率低,数据量越大 效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时速度比deque快构造方式和vector基本一致,并且插入和删除提供的位置是迭代器排序 利用算法对deque进行排序。

2025-03-21 21:55:06 850

原创 day15 容器有好多东西需要记住的

vector数据结构和数组非常相似 ,也称为, 与数组不同在于 数组是空间,而vector可以, 动态扩展不是在原有空间之后续接空间,而是找更大的内存空间,将原数据拷贝到新空间,释放原空间。

2025-03-21 09:41:22 756

原创 day14 STL部分

/向容器中添加数据//it迭代器 当成指针v.begin()!= v.end();it++)cout << "姓名:" << (*it).m_name << " 年龄:" << (*it).m_age<< endl;cout << "姓名:" << it->m_name << " 年龄:" << it->m_age << endl;// it看成指针//我尝试使用了这个,也可以正常输出,要在定义一个myprint函数,实现如下。

2025-03-19 22:03:32 305

原创 day13 类模板案例

上述代码中 尾插法的代码有问题,在自己实现的时候忘记其本质,下面是尾插法的相关代码。4、提供对应的拷贝构造函数以及operator=防止浅拷贝的问题。1、可以将内置数据类型以及自定义数据类型的数据进行存储。5、提供尾插法和尾删法对数组中的数据进行增加和删除。这个案例的实现算是其中最容易理解的一个了,可以手敲。7、可以获取数组中当前元素个数和数组的容量。6、可以通过下标的方式访问数组中的元素。3、构造函数中可以传入数组容量。2、将数组中的数据存储到堆区。

2025-03-18 17:12:44 382

原创 day13,今天学的类模板操作

建立一个通用类 , 类中的成员数据类型可以不具体指定,用一个虚拟的类型代表。语法 template <typename T>类现在来创建一下类模板。

2025-03-18 11:49:55 1042

空空如也

空空如也

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

TA关注的人

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