- 博客(55)
- 收藏
- 关注
原创 Linux驱动学习day3
在注册驱动的时候直接使用register_chrdev()的时候,不用指定主设备号,也可以不指定次设备号,这样会霸占一个主设备号下所有的次设备号,为了解决这个问题,使用alloc_chrdev_region(),该函数可以获得主设备号和可以指定次设备号的个数,并且使用cdev_init()和cdev_add()函数和重要的file_operations结构体挂钩。在入口函数和出口函数指定。
2025-06-08 22:55:14
1049
原创 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
原创 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 网络编程 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系统编程 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 系统编程基础部分 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 内建函数对象
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
原创 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关注的人