自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UDP网络聊天室

在引用中提到了利用fork来实现简单的并发服务器,这是因为fork可以创建一个与父进程一样的子进程,从而实现并发处理客户端请求。使用协程也可以实现并发,协程是一种轻量级的线程,可以在同一个线程中实现并发执行多个任务。使用线程可以实现并发,线程是轻量级的执行单元,可以在同一个进程中并发执行多个任务。使用进程池也可以实现并发,进程池是一组预先创建好的进程,可以重复使用来处理多个任务。所以,并发不仅仅是通过fork来实现,还可以使用线程、进程池、协程等方式来实现。这条语句,因为会跳过被删除结点的后一个结点。

2024-01-18 20:52:17 442 2

原创 PC上移植boa服务器

(打开一个套接字虚拟文件(说明socket连接建立成功)然后客户端浏览器通过套接字socket以GET或者POST参数传递方式向Web服务器提交请求)Web服务器接到请求后,根据请求的不同进行事务处理,返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。1-运行与客户端的浏览器首先要与嵌入式Web服务器BOA端建立连接,2-Web浏览器提交请求后,通过HTTP协议传输给Web服务器。

2024-01-03 17:09:39 450 1

原创 数据库mysql(学生管理系统)--已写完

数据库:存储文件(数据集合) + 数据库管理系统DBMS(软件)之前的学生管理系统 关闭终端后 数据就不存在了。因为那时的数据存到了内存上。等进程结束之后,内存就被回收了。数据库会对数据做加密或者压缩,等需要读的时候会解密。不会占用太多的硬盘空间。分布式系统-(集群式服务)常用数据库大型数据库:Oracle公司中型数据库:Server、mySql小型数据库:基于linux嵌入式的数据库:SQlite、

2023-12-31 12:14:23 2154

原创 recvfrom函数之“transport endpoint is not connected”

2023-12-27 20:09:56 639 1

原创 shell脚本(简单版)

shell是一个命令行解释器(1)sh :(全称 Bourne Shell)是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。Bourne Shell 在 shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。(2)csh :是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似(3)ksh :集合了 C Shell 和 Bourne Shell 的优点并且。

2023-10-30 20:53:10 152

原创 C语言复习

宏定义就是给表达式起一个别名,以后想使用这个表达式的时候,使用别名即可,当表达式需要改变的时候,只需要修改定义处即可,就无须修改整个代码了。格式:#define 宏名 宏值注意:宏定义的名字是一个标识符,要符合标识符命名规范,且一般情况下,宏名都大写。注意事项:1.宏定义是在预处理阶段完成替换的;2.宏定义只是一个简单的替换,无脑替换;存储类型 数据类型 变量名;

2023-10-23 19:47:53 432

原创 ARM体系结构以及接口技术

ubuntu系统需要安装交叉编译器。什么是交叉编译器?可以将程序编译生成另外一种架构的编译器,称为交叉编译器。.text @ 伪操作,不占用代码段的空间,给编译器使用@ 告诉编译器,.text后边的内容为代码.globl _start @ 伪操作 将_start声明为全局的函数@ 可以被外部的文件使用_start: @ 标签,类似于C语言的函数名,表示汇编函数的入口@ 及标签可以表示标签下的第一条汇编指令的地址。

2023-09-27 15:13:02 354

原创 Linux内核中的中断子系统+内核定时器+输入子系统驱动

目标:模拟键盘驱动输入类设备都是通过输入子系统进行数据上报的。比如鼠标,键盘,触摸屏等驱动都是需要通过输入子系统驱动上报数据的,上报的数据是input_event结构体,这个input_event结构体被上报/dev/input/event*节点中了。

2023-08-30 19:36:52 263 1

原创 设备树+gpio子系统

上述可以控制灯的亮灭,但是我们的灯亮灭不应该在安装的时候亮,卸载的时候灭。找出gpioe或者gpiof设备树,要知道内核中在那个位置描述的,因为在控制器设备树中有 修饰结点如何填充的方法 以及 控制器是否使能。我们的文件中有内核自带的设备树文件,如果我们想要用某结点的话,我们不能删除,防止后来的人没有办法使用。设备树在解析的时候会将同名的节点合并在一起,同名结点被合并时如果键值相同,则后者把前者的值覆盖掉。又由于不同的厂商封装的接口不同,这时又需要核心层,屏蔽底层厂商实现的细节为上层提供统一的接口。

2023-08-23 15:24:23 1187

原创 IO模型--底层

阻塞IO模型:当使用open以阻塞方式打开设备文件的时候,使用read从驱动中读取数据的时候,如果数据没有准备好让进程休眠。如果硬件的数据准备好之后硬件就会产生中断在中断处理函数中唤醒这个休眠的进程。进程被唤醒之后从底层硬件中将数据读取到内核空间,然后再将内核空间的数据拷贝到用户空间。例:板子上有环境光接近红外传感器:测当前环境的光照强度,比如手机的背光亮度,还有接近功能,手指接近产生中断,读取数据;远离又会产生中断。

2023-08-07 11:13:20 189 1

原创 Linux内核中并发和竞态的解决方法

自旋锁:当一个进程获取到自旋锁之后,如果此时另外一个进程也想获取这把锁,后一个进程就处于自旋状态,自旋锁又叫忙等锁。信号量:当一个进程获取到信号量之后,如果此时另外一个进程也想获取这个信号量,后一个进程处于休眠状态。互斥体:当一个进程获取到互斥体之后,如果此时另外一个进程也想获取这个互斥体,后一个进程处于休眠状态。互斥体又叫排它锁。

2023-08-07 11:06:25 324 1

原创 ioctl函数(设备的控制操作) / 自动创建设备结点/字符设备驱动的创建

创建结点的方法:mknod命令可以创建,但是自动申请的设备号不能确定,要设置成静态的设备号有些设备号就是静态申请的比如cd /dev/input 设备号是13有时候不知道设备号是否被占用等原因 于是引入了动态申请设备号devfs(2.4内核版本引入,2.6版本就被废弃了)创建结点的思想和内核设计的思想不符驱动在编辑的时候有操作硬件的能力但是不能有操作硬件的逻辑动态申请设备号就让驱动有了操作硬件的逻辑了udev(2.6内核至今)

2023-08-05 14:27:15 1510 1

原创 字符设备驱动的实现2-LED灯

RCC_MP_AHB4ENSETR 0x50000a28 [4] 1 GPIOE时钟使能GPIOx_MODER 0x50006000 [21:20] 01 输出GPIOx_ODR 0x50006014 [10] 1 LED1亮 0 LED1灭思考:地址映射和灯的初始化应该放在哪来做?地址映射可以在open 也可以在init 区别是:init :安装的时候地址已经映射完了,灯也初始化好了,卸载的时候地址才会被释放。

2023-08-03 11:17:01 99

原创 开发板启动参数设置

开发板与ubuntu连接方式有两种:一种是通过数据共享(开发阶段),第二种方式是把,把内核等烧写到EMMC上,或TF卡上(产品阶段)。我们采用的是第一种网络的方式。

2023-08-02 21:27:17 258

原创 字符设备驱动-1

Linux设备驱动的种类:字符设备驱动,块设备驱动,网络设备驱动字符设备驱动:按照字节流来访问,只能顺序访问,不能无序访问的设备。块设备驱动:按照block(512字节)来访问,可以顺序访问,也可以无序访问的设备网络设备驱动:网络设备驱动没有设备文件,网络设备驱动主要是用来实现网络数据的收发工作。

2023-08-01 21:05:22 273 1

原创 linux内核模块

入口、出口、许可证入口:安装驱动的时候执行(insmod),资源申请出口:卸载驱动的时候执行(rmmod),资源释放(在内核模块中申请的资源,不手动释放是不会自动释放的,除非重启)许可证:编写内核模块要遵循GPL协议。linux内核是开源的,所以在内核中写的驱动也必须都是开源的GPL是GNU Public License的缩写GNU是一个开源组织,理查德斯托曼建立的,例如notepad++

2023-07-31 19:46:12 496 1

source insight 开发工具 tools.zip

source insight 开发工具 tools.zip

2024-01-21

空空如也

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

TA关注的人

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