自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(189)
  • 资源 (1)
  • 收藏
  • 关注

原创 分析蓝牙协议栈源码bstack

参考:https://blog.csdn.net/lewanhah01/article/details/104029135一、bstack支持的设备类型BTStack支持多种接口的蓝牙模块,比如USB口、3线串口(TxD/RxD/Gnd)、5线串口(TxD/RxD/Gnd/CTS/RTS);所以每种接口都会有对应的代码,还区分linux和windows;如linux: port/libusb/main.c         port/posix-h4/h5/main.cWindows: por

2021-12-12 12:14:48 2757

原创 安装msys2遇到的问题整理

在安装msys2可能会遇到密钥无法信赖的问题,如网上有方法解决,参考https://blog.csdn.net/xfijun/article/details/107810097但我实际上试一下觉得还是不行密钥不成功,归根结底还是msys2不够新,直接到https://www.msys2.org/下载最新的软件然后安装https://blog.csdn.net/u011326325/article/details/111994772安装,配置镜像,成功后,执行以下命令配置linux所需环境$ p

2021-12-11 12:37:09 4918 5

原创 Android WIFi 8.0——数据流量切换到wifi

上面是直接绘制的图片,根据log走的真实流程,下面附上自己跟踪log的记录:当wifi打印到wpa_supplicant: wlan0: State: GROUP_HANDSHAKE -> COMPLETED时系统会打印:Line 3378: 02-25 01:29:28.095 1146 1661 D ConnectivityService: registerNetworkAgent NetworkAgentInfo{ ni{[type: WIFI[], state: CONNECTIN.

2021-12-09 10:46:21 3450

原创 C++ 链表、栈、队列

一、C++ 链表链表实际上是线性表的链式存储结构,与数组不同的是,它是用一组任意的存储单元来存储线性表中的数据,存储单元不一定是连续的,且链表的长度不是固定的,链表数据的这一特点使其可以非常的方便地实现节点的插入和删除操作1.1 几种链表的介绍1.1.1 单向链表单向链表很容易理解,就说把指针当成一条链一样连接每一个节点,每个节点包含了一个或者多个数据。链表的存储单元不一定是连续的,长度不固定,主要用于方便实现节点的插入和删除操作。官方的话这里就不说了,作为数据结构里最基本的,感兴趣的童鞋自.

2021-12-05 12:43:03 4317 2

原创 csdn的一些写作规范

1. 文字变红:用于复制格式一: 能改变文本样式<font color=#900>用于复制</font>格式二: 不能改变样式`用于复制`2. 图片处理1. 居中:在图片的地址末尾加入#pic_center即可。2.图片备注在括号外面加<center><b><font size ='3'>图1. 这是图1的题注</font></b></center></font>...

2021-12-05 10:44:49 288

原创 C++ 哈希表

什么是哈希表map、hash_map、unordered_map的引入unordered_map的用法1. 什么是哈希表1.1 哈希表的定义“散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。从上面的百度百科,我们小白可以知道3点:哈希表也叫散列表哈希表是一个数据结构散列表是数组.

2021-11-24 10:50:22 35609 20

原创 C++ vector库的用法

本文将分4点介绍C++ vector库的用法vector的初始化vector对象的操作2.1 vector迭代器vector整体操作vector查找1. vector的初始化赋值头文件:#include < vector>类型:vector<int/char/string/基本数据类型/自定义类型/结构体类型/…>vec ;(1)vector<int> a(10); //定义了10个整型元素的向量,初值为0(2)vector<int>

2021-11-19 11:43:15 4917

原创 Android系统启动流程——总结概况

Android系统启动流程流程图大致如下:BootLoader引导内核启动:android系统系统流程1 —(bootloader)uboot引导启动内核过程linux内核的启动:Android系统启动流程2 —linux内核的启动流程init进程的启动:Android系统启动流程4—init进程的工作流程...

2021-11-18 11:30:47 1577

原创 Android系统启动流程6---启动SystemServer进程

SystemServer 进程主要用于创建系统服务,像AMS、WMS和PMS,蓝牙,wifi服务都是由其创建。例如:mSystemServiceManager.startService(BluetoothService.class);mSystemServiceManager.startService(WIFI_SERVICE_CLASS);我们来看SyetmServer进程的启动流程一、启动SyetmServer进程ZygoteInit中主要作用是启动SystemServer进程fram

2021-11-18 11:29:54 419

原创 Android系统启动流程5---启动Zygote进程

回顾Android系统启动流程4—init进程的工作流程zygote是受精卵的意思,它是Android中的一个非常重要的守护进程服务(Daem Service),所有的其他Dalvik虚拟机进程都是通过zygote孵化(fork)出来的。Android应用程序是由Java语言编写的,运行在各自独立的Dalvik虚拟机中。如果每个应用程序在启动之时都需要单独运行和初始化一个虚拟机,会大大降低系统性能,因此Android首先创建一个zygote虚拟机,然后通过它孵化出其他的虚拟机进程,进而共享虚拟机内存和框架

2021-11-18 10:31:09 812

原创 Android系统启动流程3 ---linux根文件系统的构建

linux启动内核后,会构建根文件系统,之后才可以使用init进程,进而启动其他应用程序1. 为什么需要根文件系统init进程在根文件系统中,因此需要根文件系统,来向内核提供init进程根文件系统提供了根目录,linux通过根文件系统,可以对linux的文件进行管理。etc目录下的文件,是对linux内核进行配置的。而这些文件是存储在根文件系统中的。shell命令程序在根文件系统中(busybox在根文件系统中)只有内核本身,是不能工作的。必须要有根文件系统(/etc目录下的配置文件,she

2021-11-16 17:42:16 807

原创 Android系统启动流程4---init进程的工作流程

概况:启动init进程运行init.rc启动zygote服务Zygote fork的第一个进程——SystemServerSystemServer启动系统服务1. linux启动第一个应用程序initkernel\init\main.cstatic int __ref kernel_init(void *unused){ int ret; kernel_init_freeable(); /* need to finish all async __init code before

2021-11-16 17:11:07 3150

原创 Android系统启动流程2 ---linux内核的启动流程

1. 自解压内核映像内核映像被加载到内存并获得控制权之后,内核启动流程开始。通常,内核映像以压缩形式存储,并不是一个可以执行的内核。因此,内核阶段的首要工作是自解压内核映像。内核镜像和几个名词有关:vmliux、Image、zImageARM32平台 编译一个压缩后的内核镜像:make zImage-》 LD vmlinux SYSMAP System.map SYSMAP .tmp_System.map OBJCOPY arch/arm/boot/Image K

2021-11-10 11:29:06 1258

原创 linux内核学习17---根文件系统

linux文件系统初始化过程主要分为三个阶段:挂载rootfs,提供第一个挂载点’’/;加载initrd,扩展VFS树;执行init程序,完成linux系统的初始化。下面会详细介绍每个阶段的主要内容。vfs_caches_init()负责挂载rootfs文件系统,并创建了第一个挂载点目录:’/’;rest_init()负责加载initrd文件,扩展VFS树,创建基本的文件系统目录拓扑;init程序负责挂载磁盘文件系统,并将文件系统的根目录从rootfs切换到磁盘文件系统;参考:h

2021-11-09 18:18:44 1223

原创 android系统系统流程1 ---(bootloader)uboot引导启动内核过程

1.bootloader在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。简单的说,bootloader作用就是初始化主要硬件(时钟,内存,硬盘),把操作系统从硬盘拷贝到内存,然后让CPU跳到内存中执行操作系统。Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于PC机上的BIOS。PC–>BIOS–>引

2021-11-08 21:01:12 2623 1

原创 linux内核学习15---Ex2 和 Ex3 文件系统

1. 文件系统介绍:(1)、Ext2: 是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86 电脑系统中,簇最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统的容量上限为 16384GB。但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,因此实际上能使用的文件系统容量最多也只有 2048GB。(2)、

2021-11-08 17:12:56 451

原创 linux内核学习14---回收页框和交换空间

页框回收算法:阐述了内核回收页框的原因与策略。反向映射:技术补充,介绍了内核使用的一种数据结构,借助该结构,内核可快速定位指向同一个页框的所有页表项。PFRA实现:介绍 Linux 使用的页框回收算法。交换:讲述了交换子系统,它将匿名页(并非文件的映射数据)保存到磁盘的内核部件。1. 页框回收算法Linux 内核的页框回收算法(page frame reclaiming algorithm, PFRA)采取从用户态进程和内核高速缓存“窃取”页框的办法补充伙伴系统的空闲块列表。页框回收算法的目标之

2021-11-08 16:52:50 224

原创 算法与数据结构——算法和算法分析

1. 算法定义解决问题的方法和步骤。在计算机中表现为指令的有限序列。其中每条指令表示一个或多个操作2.算法的描述程序=数据结构+算法数据结构通过算法来实现操作3. 算法的特性(确定、有穷、可行、输入、输出)1.有穷性:算法在执行有限步骤之后,自动结束而不会出现无限循环,并且每一个步骤都在可接受的时间范围内完成。当然这里的有穷并不是纯数学意义的,而是在实际应用中合理的、可以接受的“边界”。你说你写一个算法,计算机需要算上20年,一定会结束,他在数学上是有穷的,媳妇都熬成婆了,算法的意义就不大

2021-11-07 13:35:41 900

原创 算法与数据结构——3. 数据结构与算法思维导图

2021-11-06 23:04:37 189

原创 linux内核学习13:时钟、定时器、延时/定时机制

1、时钟和定时电路Linux内核必须完成两种主要的定时测量 ,我们可以对此加以区分:保存当前的时间和日期 ,以便能通过time()、ftime()和gettimeofday()系统调用把它们返回给用户程序,也可以由内核本身把当前时间作为文件和网络包的时间戳。维持定时器 ,这种机制能够告诉内核或用户程序某一时间间隔已经过去定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的。https://www.iteye.com/blog/wangyuxxx-17257922.、定时器3、延时/定

2021-11-06 22:01:12 1795

原创 linux内核学习12:Linux内核中的同步机制,进程的同步同步机制,线程的同步机制

1. 什么是同步,为什么要同步,什么是互斥1.1 同步和互斥同步:用于实现控制多个进程按照一定的规则或顺序访问某些系统资源的机制。互斥:实现控制某些系统资源在任意时刻只能允许一个进程访问的机制。互斥是同步机制中的一种特殊情况。1.2 为什么要同步    在操作系统引入了进程概念,进程成为调度实体后,系统就具备了并发执行多个进程的能力,但也导致了系统中各个进程之间的资源竞争和共享。另外,由于中断、异常机制的引入,以及内核态抢占都导致了这些内核执行路径(进程)以交错的方式运行。对于这些交错路径执行

2021-11-05 11:40:34 1285

原创 linux内核学习11:信号

信号 (signal)signal机制可以被理解成进程的软中断, 用信号处理来模拟操作系统的中断功能软中断是执行中断指令产生的,而硬中断是由外设引发的。https://zhuanlan.zhihu.com/p/85597791信号全称为软中断信号,也有人称软中断。软中断信号(signal,又简称为信号)用来通知进程发生了异常事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程

2021-10-26 17:17:46 1849 1

原创 linux内核学习10.1:Linux内核ARM7架构异常中断向量表

https://www.cnblogs.com/sky-heaven/p/8028978.htmlhttps://blog.csdn.net/weixin_42262944/article/details/107426398

2021-10-26 10:57:19 2353

原创 linux内核学习10:中断和异常

一、中断1.1 中断的概念中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的 CPU 暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。软件对硬件进行配置后,软件期望等待硬件的某种状态(比如,收到了数据),这里有两种方式,轮询(polling): CPU 不断的去读硬件状态。中断:当硬件完成某种事件后,给 CPU 一个中断,让 CPU

2021-10-15 15:13:31 9091

原创 linux内核学习10.2:编写一个I/O中断

linux驱动编写一个中断,有下面几步操作:申请中断注册的中断服务函数卸载中断申请中断使用的函数有inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)int request_threaded_irq(unsigned int irq, irq_handler_t handler, ir

2021-10-15 15:03:42 366

原创 linux内核学习9:Linux的进程调度

一、什么是进程调度出现背景:无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。进程调度,是确保进程能有效工作的一个内核子系统。调度程序负责决定将哪些进程投入到运行,何时进行以及运行多长时间。进程调度程序(通常简称为调度程序)可看成是可运行态进程之间分配有限的处理器时间资源的内核子系统。进程调度是对TASK_RUNNING状

2021-10-12 11:34:52 3639

转载 linux内核学习8:Linux IO模型

参考:https://blog.csdn.net/z_ryan/article/details/80873449https://blog.csdn.net/en_joker/article/details/105510682一、同步、异步、阻塞与非阻塞例子故事:老王烧开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。老王想了想,有好几种等待方式1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。-同步阻塞老王想了想,这种方法不够聪明。2.

2021-09-30 17:31:57 110

原创 linux内核学习14---系统调用(sys_read+sys_write流程跟踪)

参考:https://blog.csdn.net/u012319493/article/details/85331567访问基于磁盘的文件是一种复杂的活动,既涉及 VFS 抽象层、块设备的处理,也涉及磁盘高速缓存的使用。将磁盘文件系统的普通文件和块设备文件都简单地统称为“文件”。访问文件的模式有多种:规范模式:规范模式下文件打开后,标志 O_SYNC 和 O_DIRECT 清 0,且它的内容由 read() 和 write() 存取。read() 阻塞调用进程,直到数据被拷贝进用户态地址空间。

2021-09-02 11:51:55 3217

原创 linux内核学习6:Linux的CPU高速缓存cache和页高速缓存cache,buffer

一、CPU高速缓存(cache)参考:https://blog.csdn.net/u014470361/article/details/80060701cache,中译名高速缓冲存储器,其作用是为了更好的利用局部性原理,减少CPU访问主存的次数。简单地说,CPU正在访问的指令和数据,其可能会被以后多次访问到,或者是该指令和数据附近的内存区域,也可能会被多次访问。因此,第一次访问这一块区域时,将其复制到cache中,以后访问该区域的指令或者数据时,就不用再从主存中取出。注意:这里的cache一般是S

2021-09-01 11:33:20 2913 1

原创 linux内核学习5:虚拟文件系统(VFS)

参考https://blog.csdn.net/qq_34556414/article/details/109007718https://blog.csdn.net/u012319493/article/details/85016519一、虚拟文件系统(VFS)的作用Linux的成功因素之一是它具有与其它操作系统和谐共存的能力,其中代表作之一就是虚拟文件系统(VFS)。VFS的思想是把不同类型文件的共同信息放入内核,具体思路是通过Linux在用户进程(或C库)和文件系统之间引入了一个抽象层,该抽象层

2021-08-30 15:12:32 1593

原创 linux内核学习4:linux的进程

什么是进程:    进程是任何多道程序设计的操作系统中的基本概念。通常把进程定义为程序执行的一个实例。在Linux中,常把进程称为任务task或线程thread。参考:https://blog.csdn.net/fickyou/article/details/75040699进程互斥:https://blog.csdn.net/ai977313677/article/details/724114889...

2021-08-23 20:57:01 757

原创 linux内核学习3:linux的进程地址空间

在前一章我们知道伙伴算法通过__get_free_pages()或alloc_pages()从分区页框中获得页框slab分配器通过kmem_cache_alloc()或kmalloc()为专用或通用得对象分配块vmalloc通过vmalloc()或vmalloc_32()获得一块连续的非连续的内存区。如果所请求的内存区得以满足,这些函数都返回一个页描述符地址或线性地址(即所分配动态内存的起始地址)之所以得以分配,是因为:内核是操作系统中优先级最高的成分内核信任自己但是当给用户态进程分

2021-08-16 17:59:02 830

原创 linux内核学习2:内存管理

一、页框管理1.1. 页框的定义和数据结构内核以页框为基本单位管理物理内存,分页单元中,页指一组数据,而存放这组数据的物理内存就是页框,当这组数据被释放后,若有其他数据请求访问此内存,那么页框中的页将会改变。内核必须记录每个页框当前的状态。如,内核必须能区分哪些页框包含的是属于进展的也,哪些页框包含的是内核代码或者内核数据。同理,内核还必须能确认动态内存中页框是否空闲。这种状态信息被保存在一个描述符数组中,每个页框对应数组中的一个元素,这种类型为sruct page描述符struct page是内存

2021-08-13 10:59:54 1723

原创 linux内核学习1:内存地址(1)

1. 程序反汇编机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,才能构成线性地址。也就是说 0x80495b0 是当前任务的DS数据段内的偏移2. LINUX地址分类当使用80x86微处理器时,必须

2021-07-28 21:52:34 1272

原创 linux内核学习1:进程间通信IPC

1. 管道 (PIPE)管道实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。管道的特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。 比如fork或exec创建的新进程,在使用exec创建新进程时,需要将管道的文件描述符作为参数传递给exec创建的新进程。当父进程与使用fork创建的子进程直

2021-07-27 23:54:54 764

转载 802.11协议精读4:PCF工作模式

序 在前面我们叙述过,在802.11的MAC层中,分成了两种基本工作模式: DCF(Distributed Coordination Function) PCF(Point Coordination Function) 我们已经介绍过了DCF的工作模式,而PCF模式当前只有协议中进行了规范,而在实际产品中几乎很少见到。所以就像在802.11权威指南和CWNA书本中所述一样,对于PCF的机制仅仅是协...

2021-07-16 15:04:22 2502

转载 802.11协议精读2:DCF与CSMA/CA

序言 在802.11的MAC层中,分成了两种基本工作模式: DCF(Distributed Coordination Function) PCF(Point Coordination Function) 其中,由于DCF具有良好的分布式特性,从而应用更加广泛,而PCF模式则较为少用。在802.11e协议中,DCF被扩展为EDCA模式,PCF模式被扩展为HCCA模式。本文所讨论的主要内容即有关DCF模式以及其核...

2021-07-16 11:46:24 1295

原创 多个无线 AP 怎么实现无缝漫游?

多个无线AP,实现无缝漫游上网方法有人在选用无线AP来设计无线网络的时候,非常关心无缝漫游的问题,无线AP可以实现漫游吗,多个无线AP如何实现无缝漫游等。答案是肯定的,使用无线AP确实可以实现无缝漫游。业界所指的无缝漫游主要是满足三点:1,信号覆盖上的无缝,且客户端可以自由且及时的切换。2,切换时间较短,不会中断业务。3,最核心的是,跨三层漫游时业务不会中断一般可以满足上述一点以上的都可以称为无缝漫游,因为在不同wifi中切换的时候很短,基本上可以忽略。多个无线AP同一无线wifi名称,在多个A

2021-03-05 11:18:15 13069

原创 工具|月刊第二期:程序员常用的软件工具

Hi,大家好,上星期写的工具|月刊第一期:程序员常用的工具软件(视频类、编辑类、分析类、检索类)得到了不少点赞和关注,挺开心的,今天继续分享工具类月刊第二期所有的ziyuan在文末,已经整理好1.实用小工具大全:tool.lutool.lu是一个在线工具网址,涵盖了近百种实用小工具,如在线运行代码、javascript工具、颜色转换、一键去除照片背景、证件照换背景等等https://tool.lu2.一款简约桌面整理插件-dock时间一长,是不是觉得电脑桌面又变得乱七八糟,影响审美

2021-03-01 19:57:37 196 2

原创 解决Android studio Connection timed out: connect(方法全整理,持续更新)

用了Android studio一段时间,但是有时候仍会出现Gradle问题:ERROR: Connection timed out: connect:错误:连接超时:连接这个错误 一般来说是因为.gradle引起的(1).gradle下载的不全(2)网络原因<10kb/s(3)ping不通,即不到达博主试过几种方法,分进阶步骤:即方法一不行则试试方法二,方法二不行则试试方法三,以此类推方法一:改url在Gradle目录下的build.gradle中Google()和jcente

2021-02-20 15:17:52 71310 13

UNIX环境高级编程(第3版)中文版.pdf 文字版,注意是真正的文字版,可复制

我找了非常之久,看了很多csdn的其他博主的资料,全都是扫描版且不高清。但是我要可以复制的啊,我想复制做笔记啊,然后,我把各个linux社区翻了一遍,终于被我找到了,一起学习。

2019-03-17

空空如也

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

TA关注的人

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