- 博客(79)
- 收藏
- 关注
原创 嵌入式内核及驱动开发高级
仅devfs,导致开发不方便以及一些功能难以支持:热插拔不支持一些针对所有设备的统一操作(如电源管理)不能自动mknod用户查看不了设备信息设备信息硬编码,导致驱动代码通用性差,即没有分离设备和驱动。
2023-07-13 14:24:06 1012 1
原创 嵌入式系统移植
(1)内核与操作系统内核是一个操作系统的核心,提供了操作系统最基本的功能,是操作系统工作的基础,决定着整个系统的性能和稳定性操作系统是在内核的基础上添加了各种工具集、桌面管理器、库、shell、应用程序等(2)Linux层次结构(3)Linux内核特点代码结构清晰、模块化设计支持丰富的硬件平台较高的稳定性轻量化及较强的裁剪性开放源代码更新活跃、用户较多、资料丰富支持丰富的网络协议... ...2.Linux内核源码结构(1)Linux内核源码获取。
2023-07-04 20:34:25 933
原创 数据处理指令
C语言:效率比较低,硬件可操控性比较差,目标代码体积大,容易维护,可移植性很好。汇编语言:效率高,对硬件的可操控性更强,体积小,不易维护,可移植性很差。简述C语言和汇编语言的本质区别是什么?
2023-06-25 10:42:08 94
原创 ARM寄存器
比如处理器遇到哪些事件认为是异常事件遇到异常事件之后处理器有哪些动作、处理器如何跳转到异常处理程序如何处理异常、处理完异常之后又如何返回到被打断的程序继续执行等我们将这些细节的实现称为处理器的异常处理机制。> 产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下 一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回。(4)因为异常向量表空间有限一般我们不会在这里写异常处理程序,而是在对应的位置写一条跳转指令使其跳转到指定的异常处理程序的入口。(1)FIQ在异常向量表位于最末;
2023-06-20 13:51:55 764
原创 ARM存储器概论
一、ARM指令集概述一、ARM指令集概述1.指令集(1)能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...)(2)指令在内存中以机器码(二进制)的方式存在(3)每一条指令都对应一条汇编(4)程序是指令的有序集合(1)处理器能识别的指令的集合称为指令集(2)不同架构的处理器指令集不同(3)指令集是处理器对开发者提供的接口2.ARM 指令集(1)所有指令(机器码)都占用32bit存储空间(2)代码灵活度高、简化了解码复杂度(3)执行ARM指令集时PC值每次自增4。
2023-06-19 22:21:52 532
原创 在线词典项目
服务器端将用户信息和历史记录保存在数据库中。客户端输入用户名和密码,服务器端在数据库中查找、匹配,返回结果。根据客户端输入的单词在字典文件中搜索。分析服务器端和客户端流程。定义数据库中表的结构。
2023-06-16 18:05:39 88
原创 嵌入式数据库之sqlite3
sqlite> create table stu1 as select id, name, score from stu//创建一张新的表。―在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库。sqlite> alter table stu1 rename to stu//讲新的表名字改成原有旧表的名字。IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统,支持包Linux在内的一系列平台。
2023-06-14 23:17:39 1704
原创 万维网服务器
HTTP 规定:在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即“类MIME (MIME-like)”的响应组成。h_addr_list:指向主机网络地址的指针数组(按网络字节顺序),由。h_addr h_addr_list:中的第一个地址,以实现向后兼容性。h_aliases:主机的备用名称数组,以。h_length:地址的长度(以字节为单位)h_addrtype:地址类型;h_name :主机的正式名称。二、HTTP 的操作过程。
2023-06-09 22:05:10 657
原创 广播和组播的实现
数据包发送方式只有一个接受方,称为单播如果同时发给局域网中的所有主机,称为广播只有用户数据报(使用UDP协议)套接字才能广播广播地址一个网络内主机号全为1的IP地址为广播地址发到该地址的数据包被所有的主机接收255.255.255.255在所有网段中都代表广播地址。
2023-06-09 15:46:37 64
原创 套接字属性的获取与设置
一、基本概念设置套接字的选项对套接字进行控制除了设置选项外,还可以获取选项选项的概念相当于属性,所以套接字选项也可说是套接字属性有些选项(属性)只可获取,不可设置;有些选项既可设置也可获取1.选项级别SOL_SOCKET 该级别的选项只作用于套接字本身SOL_LRLMP 该级别的选项作用于IrDA协议IPPROTO_IP 该级别的选项作用于IPv4协议IPPROTO_IPV6 该级别的选项作用于IPv6协议IPPROTO_RM 该级别的选项作用于可靠的多播传输。
2023-06-09 14:51:46 692
原创 poll函数和epoll函数族
events: 分配好的 epoll_event 结构体数组,epoll_wait 将会把发生的事件赋值到events 数组中。EPOLLPRI:表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来);epfd: epoll 专用的文件描述符,epoll_create()的返回值。epfd: epoll 专用的文件描述符,epoll_create()的返回值。EPOLL_CTL_ADD:注册新的 fd 到 epfd 中;EPOLL_CTL_MOD:修改已经注册的fd的监听事件;
2023-06-09 11:53:14 205
原创 五种I/O模型
进程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。线程试图得到一个锁,而该锁正被其他线程持有,于是只能进入阻塞状态,等到获取了同步锁,才能恢复执行。阻塞和同步是完全不同的概念。同步是对于消息的通知机制而言,阻塞是针对等待消息通知时的状态来说的。线程调用一个在I/O上被阻塞的操作,即该操作在输入/输出操作完成前不会返回到它的调用者。对于一个线程的请求调用来讲,同步和异步的区别在于是否要等这个请求出最终结果。I/O分为内存I/O、网络I/O和磁盘I/O三种。
2023-06-08 16:23:59 812
原创 UNIX域套接字
1.本地地址/* 协议类型 *//* 套接字文件路径 */2.UNIX域流式套接字UNIX 域流式套接字服务器端流程如下:(1)创建 UNIX 域流式套接字。(2)绑定本地地址(套接字文件)。(3)设置监听模式。(4)接收客户端的连接请求。(5)发送/接收数据。UNIX 域流式套接字客户端流程如下。(1)创建 UNIX 域流式套接字。(2)指定服务器端地址(套接字文件)。(3)建立连接。(4)发送/接收数据。
2023-06-06 14:54:13 1012
原创 IP协议与ethernet协议
一、IP协议1.IP协议作用和意义(1)计算机网络体系结构(2)网络互联使用路由器(3)IP网的意义当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。(4)分组在互联网中的传送(5)分组传输路径2.IP数据报首部格式(1)IP数据报的格式(2)IP数据报首部的固定部分中各字段——占 4 位,指 IP 协议的版本。
2023-06-06 12:02:12 1206
原创 TCP连接管理与UDP协议
1.TCP包头2.连接的建立——“三次握手”TCP 建立连接的过程叫做握手。采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。3.连接的释放——“四次握手”TCP 连接释放过程比较复杂。数据传输结束后,通信的双方都可释放连接。TCP 连接释放过程是四报文握手。4.保活计时器(1)用来防止在 TCP 连接出现长时期空闲。(2)通常设置为 2 小时。
2023-06-06 10:33:51 326
原创 TCP协议是如何实现可靠传输的
1.TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。2.TCP最主要的特点(1)TCP 是面向连接的运输层协议。每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。(2)TCP 提供可靠交付的服务。(3)TCP 提供全双工通信。(4)面向字节流TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
2023-06-05 19:22:57 1107
原创 实现UDP通信(socket接口函数扩展)
一、write/read到send/recv。一、write/read到send/recv。1. 前四个参数同recv/send一样;前三个参数同read/write一样;
2023-06-05 16:41:04 457
原创 socket套接字及TCP的实现框架
*创建套接字*//*绑定通信结构体*//*监听套接字*//*处理客户端发起的连接,生成新的套接字*//*向服务器发起连接请求*/1.三元组【IP地址,端口,协议】IP地址:标识计算机端口号:标识计算机当中的进程协议:指定数据传输的方式//通用地址族结构体/*地址族结构体*//*地址族结构体*/AF_UNIX 使用本地域套接字的地址结构,用于本地通信AF_INET 使用IPv4的通信地址结构。
2023-06-05 09:28:58 894
原创 字节序及IP地址转换
字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序,分为:大端字节序(Big endian)、小端字节序(Little endian)。3.这样做的目的是获取变量val32第一个字节的值,后面就可通过判断val8的值是0x44或者0x11来确定主机字节序是大端还是小端。2.定义一个8位的无符号整型变量val8,并且将强转以后的val32的数据赋值给val8。3.网络字节序转主机字节序以后通常需要转换成“点分十进制”的字符串。2.主机字节序一般采用小端字节序。一、主机字节序和网络字节序。
2023-06-04 16:34:49 771 1
原创 OSI七层体系结构
1.两台计算机要互相传送文件需解决很多问题(1必须有一条传送数据的通路。(2) 发起方必须激活通路。(3)要告诉网络如何识别接收方。(4)发起方要清楚对方是否已开机,且与网络连接正常。(5)发起方要清楚对方是否准备好接收和存储文件。(6)若文件格式不兼容,要完成格式的转换。(7)要处理各种差错和意外事故,保证收到正确的文件。二、协议与划分层次网络协议 (network protocol),简称为协议,是为进行网络中的数据交换而建立的规则、标准或约定。
2023-06-04 10:52:08 247
原创 项目实战:基于Linux的Flappy bird游戏开发
一、项目介绍项目总结1.按下空格键小鸟上升,不按小鸟下落2.搭建小鸟需要穿过的管道3.管道自动左移和创建4.小鸟撞到管道游戏结束知识储备1.C语言2.数据结构-链表3.Ncurses库4.信号机制二、
2023-06-03 17:54:06 888
原创 进程间通信(信号灯)
释放资源,如果没有线程阻塞在该sem上,表示没有线程等待该资源,这时该函数就对信号量的值进行增1操作,表示同类资源多增加了一个。如果至少有一个线程阻塞在该sem上,表示有线程等待资源,信号量为0,这时该函数保持信号量为0不变,并使某个阻塞在该sem上的线程从sem_wait函数中返回。获取资源,如果信号量为0,表示这时没有相应资源空闲,那么调用线程就将挂起,直到有空闲资源可以获取。//对某一个信号灯的操作,如果同时对多个操作,则需要定义这种结构体数组。nops: 要操作的信号灯的个数 ,1个。
2023-06-03 09:56:56 494
原创 消息队列的使用
MSG_EXCEPT:与msgtype配合使用返回队列中第一个类型不为msgtype的消息。IPC_NOWAIT:如果没有返回条件的消息调用立即返回,此时错误码为ENOMSG。IPC_NOWAIT:当消息队列已满的时候,msgsnd函数不等待立即返回。1 消息结构必须有long类型的msg_type字段,表示消息的类型。0:当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列。msgtype>0:收到的第一条 msg_type类型的消息。msgtype=0:收到的第一条消息,任意类型。
2023-06-02 13:35:41 430
原创 信号机制下(阻塞、信号集、信号驱动任务)
有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。信号递达(Delivery ):实际信号执行的处理过程(3种状态:忽略,执行默认动作,捕获):信号的”阻塞“是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。功能:将进程的屏蔽字替换为由参数sigmask给出的信号集,然后挂起进程的执行。1如果信号的默认处理动作是终止进程,则进程终止,pause函数么有机会返回。SIG_BLOCK : 把参数set中的信号添加到信号屏蔽字中。
2023-06-02 11:03:53 204
原创 信号机制上(信号概念、发送、定时器、信号捕捉、SIGCHLD)
0:发送信号给跟调用kill函数的那个进程处于同一进程组的进程。< -1: 取绝对值,发送信号给该绝对值所对应的进程组的所有组员。SA_SIGINFO:使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数。SIG_IGN 代表忽略信号;= -1:发送信号给,有权限发送的所有进程。sa_sigaction: 另一个信号处理函数,它有三个参数,可以获得关于信号的更详细的信息。SA_NODEFER:使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。
2023-06-01 20:29:53 701
原创 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)
功能:创建共享内存映射函数返回值:成功返回创建的映射区首地址,失败返回MAP_FAILED( ((void *) -1) ),设置errno值addr:指定要映射的内存地址,一般设置为 NULL 让操作系统自动选择合适的内存地址。length:必须>0。映射地址空间的字节数,它从被映射文件开头 offset 个字节开始算起。prot:指定共享内存的访问权限。
2023-06-01 11:39:12 801
原创 又名管道和无名管道
4.对于以只写方式(O_WRONLY)打开的FIFO文件,如果open调用是阻塞的(即第二个参数为O_WRONLY),open调用将被阻塞,直到有一个进程以只读方式打开同一个FIFO文件为止;如果open调用是非阻塞的(即第二个参数为O_WRONLY | O_NONBLOCK),open总会立即返回,但如果没有其他进程以只读方式打开同一个FIFO文件,open调用将返回-1,并且FIFO也不会被打开。),那么或者写入全部字节,或者一个字节都不写入,系统就可以确保数据决不会交错在一起。
2023-05-31 17:19:16 902
原创 线程池及gdb调试多线程
我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设。概念:通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合。线程池工作线程,它是任务队列任务的消费者,等待新任务的信号。任务队列,存储需要处理的任务,由工作线程来处理这些任务。,使用线程池可以降低频繁创建和销毁线程所带来的开销,实现任务队列互斥锁和条件变量的初始化。删除任务队列链表所有节点,释放空间。检查函数的参数,添加对应的参数。判断是否有空闲的工作线程。删除线程池,释放空间。二、线程的GDB调试。
2023-05-31 14:25:07 1667
原创 条件变量基本使用
信号会被多个线程收到,这叫线程的惊群效应。所以需要加上判断条件。必要性:为了实现等待某个资源,让线程休眠。应用场景:生产者消费者问题,是线程同步的一种手段。,在没有资源等待是是先。,则有可能会丢失信号。广播通知多个消费线程。休眠,等资源到了,再。
2023-05-30 17:15:59 710
原创 线程的取消和互斥
在Linux中,互斥锁并不占用任何资源,因此LinuxThreads中的 pthread_mutex_destroy()除了检查锁状态以外(锁定状态则返回EBUSY)没有其他动作。写者:写者使用写锁,如果当前没有读者,也没有其他写者,写者立即获得写锁;否则写者将等待,直到没有读者和写者。读写锁出于写锁状态时,所有试图对读写锁加锁的线程,不管是读者试图加读锁,还是写者试图加写锁,都会被阻塞。读写锁处于读锁状态时,有写者试图加写锁时,之后的其他线程的读锁请求会被阻塞,以避免写者长时间的不写锁。
2023-05-30 15:49:26 1808
原创 线程的取消和清理
4.线程内的return 可以结束线程,也可以给pthread_join返回值,但不能触发pthread_cleanup_push里面的回调函数,所以我们结束线程尽量使用pthread_exit退出线程。2.pthread_cleanup_pop()被执行且参数为0,pthread_cleanup_push回调函数routine不会被执行.PTHREAD_CANCEL_DEFERRED 等到取消点才取消。注意:线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是。
2023-05-30 11:40:22 1490
原创 线程的创建和参数传递
意义:表示pthread_create参数3的定义和实际代码不符合,期望的是void * (*)(void *) ,实际的代码是int * (*)(char *)collect2: error: ld returned 1 exit status --------这个链接错误,使用多线程的好处:大大提高了任务切换的效率,避免了额外的TLB & cache的刷新。arg 传递给routine的参数 ,参数是void * ,注意传递参数格式,注意事项:1. 主进程的退出,它创建的线程也会退出。
2023-05-29 14:34:12 1803
原创 exec函数族和进程
1.背景:fork创建进程之后,子进程和父进程执行相同的代码,但是在实际开发当中,我们希望父子进程执行不同的代码。作用:执行指定的程序成功时执行指定的程序;失败时返回EOFpath 执行的程序名称,包含路径arg… 传递给执行的程序的参数列表file 执行的程序的名称,在PATH中查找注意:两个函数区别execlp不需要写文件名全路径,在PATH查找最后一个参数必须用空指针(NULL)作结束进程当前内容被指定的程序替换,但进程号不变第0个参数必须要写,虽然它没有使用。
2023-05-24 17:39:43 431
原创 进程的创建和回收
pid>0时,只等待进程ID等于pid的子进程,不管其它已经有多少子进程运行结束退出了,只要指定的子进程还没有结束,waitpid就会一直等下去。pid=0时,等待同一个进程组中的任何子进程,如果子进程已经加入了别的进程组,waitpid不会对它做任何理睬。pid=-1时,等待任何一个子进程退出,没有任何限制,此时waitpid和wait的作用一模一样。pid
2023-05-24 14:39:49 882
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人