自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (5)
  • 收藏
  • 关注

原创 Linux kernel内存管理基础

vmalloc与ioremap在驱动中才能用,因为申请的虚拟内存是在内核的地址范围内,是从VMALLOC区域申请的。ioremap从VMALLOC区申请到虚拟地址后,直接映射(因为物理地址已知): virtual addr <–> regsiters address。vmalloc从VMALLOC区申请到虚拟地址后,需要申请size大小的物理地址空间(vmalloc参数指定),然后在映射: virtual addr <–> 物理地址。

2024-03-13 10:11:18 979 1

原创 select,poll,epoll阻塞IO使用示例介绍

接下来,使用 epoll_ctl 函数将设备文件或套接字的文件描述符添加到 epoll 实例中,并设置需要监听的事件类型。接下来,将设备文件或套接字的文件描述符添加到 fd_set 结构体中,使用 FD_SET 宏将文件描述符添加到 fd_set 结构体中。将设备文件或套接字的文件描述符添加到 epoll 实例中,使用 epoll_ctl 函数将设备文件或套接字的文件描述符添加到 epoll 实例中,并设置需要监听的事件类型,如 EPOLLIN(可读事件)或 EPOLLOUT(可写事件)。

2023-07-06 20:08:02 612

原创 gptp报文完成时间同步原理

gptp

2022-11-24 14:15:55 3548 3

原创 【Linux】线程概念与线程控制

认识线程线程是一个执行流(运行代码,处理数据)​ 1.操作系统使用pcb来描述一个程序的运行-------pcb就是进程​ 2.linux下通过pcb模拟实现线程,因此linux下的线程是一个轻量级进程​ 3.这个轻量级进程因为公用大部分进程资源;相较于传统进程更加轻量化进程是资源分配的基本单位----因为程序运行时资源分配给整个线程组(线程是cpu调度的基本单位-----因...

2022-11-24 14:07:22 422 1

原创 【转载】深入学习ARM、DSP、FPGA之间的区别

arm dsp fpga

2022-11-04 11:09:25 1912 2

原创 快速移植OpenHarmony Linux内核的方法

内核态与用户态OpenHarmony = OpenHarmony内核态层 + OpenHarmony用户态层其中内核态层就是由内核本身(如Linux Kernel,LiteOS),和一些运行在内核态的一些特性组成,比如HDF等。OH内核态层 = OH Linux内核 + OH内核态特性(可选特性或者必选特性,如必选特性HDF,今后的可选特性HMDFS等)而OH Linux内核 = 标准LTS Linux内核 + 三方SoC芯片平台代码 + OH内核态基础代码(支撑OH用户态层运行的最基础代码)OH

2022-04-12 21:10:27 2180

原创 【起航】OpenHarmony远征05标准系统移植

标准移植流程定义开发板本文以移植名为MyProduct的开发板为例讲解移植过程,假定MyProduct是MyProductVendor公司的开发板,使用MySoCVendor公司生产的MySOC芯片作为处理器定义SOC在“//productdefine/common/device”目录下创建以SOC名字命名的json文件,并指定CPU的架构。如要移植一个叫MySOC的SOC,这个SOC采用32位ARM内核。配置如下://productdefine/common/device/MySOC.json

2022-04-12 17:52:16 962

原创 【起航】OpenHarmony远征04小型系统移植

openharmony小型系统内核移植内核支持的archROM文件系统Flash类型Liteos-AARMV7>2MVFAT、JFFS2SPI、NOR、NANDLinux-4.19ARM、ARM64、MIPS、X86>5MVFAT、JFFS2、EXT2NOR、NAND、EMMC编译构建系统介绍编译框架与编译环境的搭建和之前的轻量系统移植类似Liteos-A内核移植Liteos-A支持ARM V7的指令集架构,若第三方芯片本身就是

2022-04-12 16:52:30 968

原创 【起航】OpenHarmony远征03轻量系统移植

轻量级系统芯片移植目前轻量级系统的典型架构有cortex-m和risc-v系列,这里顺便说一下常见的架构CISC(复杂指令合集):隐式总线访问x86 --> 用于PC 常见的芯片core i7 (intel)RISC(精简指令合集):显式总线访问ARM -->用于Mobile & 便携设备MIPS -->机顶盒 & 网关RISC-V -->智能穿戴设备由于openharmony的整体功能较为复杂,如果没有特殊的需求,移植过程中需要关注的目

2022-04-06 14:38:32 879

原创 【起航】OpenHarmony远征02

【起航】OpenHarmony远征02

2022-04-01 16:08:20 245

原创 【起航】OpenHarmony远征01

项目介绍OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的发展。OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。OpenHarmony技术架构如下所示:OpenHa

2022-04-01 15:07:57 5405

原创 【driver】理解file , file_operations, inode之间的关系

驱动开发基础知识理解一切皆文件在unix中,我们对设备的访问最终都会演化成对文件的访问,设备文件往往都存放在/dev的目录下在terminal中输入ls -l /dev//其中字母"b"表示的是块设备。"c"表示的是字符设备//以sda,sda2,sda3为例,sda表示硬盘,sda2表示硬盘对应的分区//shell程序使用这些设备进行用户交互,相比于普通文件,设备文件会多出来两个数字,一个是主设备号表示设备类型,另一个是次设备号表示设备的分区/*设备号是cdev在kernel的唯一标识*

2022-03-15 16:54:17 675 1

原创 初识cgroups原理

cgroups子系统cpu子系统,用来限制进程的cpu使用率cpuacct子系统,可以统计cgroups中进程的使用报告cpuset子系统,为cgroups中的进程分配单独的cpu节点或者内存节点memory子系统,可以限制进程的memory的使用量blkio子系统,可以限制进程的块设备iodevices子系统,可以控制进程能够访问某些设备net_cls子系统,可以标记cgroups中进程的网络数据包,然后使用tc模块对数据包进行控制freezer子系统,可以挂起或者恢复cgroups中的

2021-09-24 20:23:01 437

原创 EBP与ESP的作用

EBP与ESP的作用EBP是当前函数的存取指针,就是存储或读取函数中变量的指针基地址。ESP就是当前函数的栈顶指针。每一次发生函数调用的时候,在被call func初始化的时候都会把当前函数的EBP入栈,保证在子函数返回到主函数的时候能够找到栈帧基地址EBP假设某一个main函数调用某一个test(int a,int b)函数假设此时的main函数的ESP指针已经指向了0X896FFFAA,EBP为0x896FFFFFFpush a; 完成参数a的压栈,ESP = 0X896FFFAA - 4 =

2021-08-16 14:20:37 2905

原创 GIT 常用命令

GIT 常用命令获取git 配置信息的命令git config --listgit config --global user.name “user”git config --global user.name “[email protected]”git init相当于在本地建立一个.git目录git statusgit status -s:-s表示short,-s输出标记有两列,第一列是staging,第二列是workinggit loggit log --oneline --number 每

2021-08-02 16:56:54 100

原创 XML文件解析流程

引言expat是使用C语言编写的XML解析器,采用stream的方式解析XML文件,首先需要向解析器注册callback函数,在传入文档进行解析的时候,对于解析器能够识别的部分,就会去调用适当的callback动作进行解析。被解析的xml文件是被分块传入解析器的,这样expat就能够解析较大的xml文件,而不需要将整个xml文件整个加载到内存中去。具体的使用流程创建解析器XML_Parser XML_ParserCreate(const XML_Char* encoding)//创建一个新的

2021-04-28 13:51:20 771

原创 Session和Cookie的区别

协议:计算机通信网络中两台计算机进行通信所必须共同遵守的规定或规则。超文本传输协议(HTTP):是一种通信协议,它允许将超文本标记语言(HTML)文档从服务器端传送到客户端浏览器。HTTP协议是无状态的协议:一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。会话:指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cooki

2020-09-22 13:59:02 141

原创 大小端系统分析

什么是大端小端大小端模式就是存储数据时,数据的高低位是怎么存储在地址的高低位上。大端模式(Most Significant Byte,MSB):数据的高位,存放在地址的低位,即高位存低位,低位存高位。小端模式(Least Significant Byte,LSB):数据的高位,存放在地址的高位,即高位存高位,低位存低位。明显小端模式更符合我们日常记录书写的习惯,pc机一般都是小端模式。当我们使用的pc机和待读取数据大小端不一致时候,要特别注意,要使用相应的方式进行读取数据,具体方式看下文。//联

2020-09-22 13:53:26 235

原创 kernel知识整理(一)

自旋锁(spin lock)自旋锁是一种用于保护多线程共享资源的锁,与一般的互斥锁的不同之处在于自旋锁在尝试获取锁时以等待的形式不断的循环检查当前的锁是否可用。在多CPU的环境中,对持有锁较短的程序来说,使用自旋锁代替一般的互斥锁能够提高程序的性能自旋锁的主要特征当自旋诉被一个线程持有的时候,就不可以被其他线程获取,如果其他的线程常识去获取pthread_spin_lock()获得该锁,那么他将不会从改函数返回,而是一直自旋,直到当前的自旋锁可用为止使用自旋锁的注意事项由于自旋时仍然需要占用C

2020-08-06 13:47:15 717

原创 嵌入式中异常/中断/事件的区别

嵌入式中异常/中断/事件的区别Cortex-M3在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中,编号1-15的对应系统异常,大于等于16的则都是外部中断除了个别异常的优先级被定死之外,其余异常的优先级都是可编程的我们通常把能够打断正常执行流的事件称之为异常异常的概念中包含了中断的概念,即中断是异常的子集异常与中断的触发都是硬件支持的编号类型优先级简介0N/AN/A没有异常在运行1复位-3(最高优先级)复位2NMI-

2020-07-23 17:10:21 1807

原创 各类总线分析

各类总线分析总体来说,总线可以分为3个大类,分别是内部总线,系统总线和外部总线,所谓内部总线即是微机内部各外围芯片与处理器之间的总线,用于芯片一级的连接;系统总线是指微机中各个插件板与系统板之间的总线,用于插件板一级的互连;外部总线则是外部设备与危机之间的总线,微机本身作为一种设备,通过该总线与其他的设备进行信息与数据的交换,属于设备一级的互联。SPIMOTOROLA公司提出的同步串行总线方式,高速同步串行口,3-4线接口,收发独立,可以同步进行。标准SPI总线由四根线组成:串行时钟线(SCK),主

2020-07-23 14:15:35 1078

原创 df du top free等命令的区别

df du top free等命令的区别df含义:列出文件系统的整体磁盘使用量-a 列出所有的文件系统-k 以kb的容量显示各个文件系统-m 以mb的容量显示各个文件系统-h 以容易阅读的方式显示各个文件系统du含义:评估文件系统的磁盘使用量-a 列出所有档案与目录内容-s 列出总量,不列出个别目录的占用容量du -sm /× 检查根目录下每个目录所占用的容量top含义:不同于ps是静态的输出,top可以持续的检测系统的程序工作状态-d 后面可以接秒数,即整个程序画面更新的秒数,

2020-07-22 09:16:30 962

原创 【C++】二叉搜索树

二叉搜索树的定义对于树中的每个节点Node,它的左子树中所有关键字值小于Node的关键字值,而它的右子树中所有关键字值大于Node的关键字值。根据这个性质,对一个二叉树进行中序遍历,如果是单调递增的,则可以说明这个树是二叉搜索树。实现一个二叉搜索树#include <iostream>using namespace std;template <class T>...

2020-05-02 15:23:12 142

原创 【Linux】线程池知识点复习

线程池​ 线程池的实现 = 线程安全的队列 + 很多线程、为何要有线程池?在实际的业务场景中,一台服务器可能在同一时刻涌入大量的请求,但是这个请求五花八门,在程序不崩溃的情况下,需要竟可能多的处理请求。如果只有一个线程,程序效率低如果在请求到来的时候创建线程会有大量的时间成本如果没有开辟线程数量的限制,有可能会耗尽CPU的资源导致程序崩溃这就产生了线程池的需要,根据系统资源的多少实时...

2020-05-01 16:35:25 156

原创 【Linux】IPC知识点总结

匿名管道具有亲缘关系的进程之间进行通信半双工通信,只能提供字节流服务当传输的数据小于PIPE_BUF时,带有同步与互斥属性生命周期随进程如果管道中没有数据,产生读阻塞如果管道中写满了数据,产生写阻塞如果读端被关闭,写端还往管道中写数据时,会造成管道破裂,当前正在写的进程收到SIGPIPE信号,导致进程终止如果写端被关闭,读端读完管道的数据后,read不会处于阻塞状态,而是返回读到...

2020-02-18 18:09:03 293

原创 【Linux】文件IO整理

文件描述符与文件流指针的关系文件描述符文件描述符是由内核中的进程产生的,进程控制块(PCB)中存放了files_struct结构体,该结构体中存放了若干个文件描述符的结构体数组fd_array,数组中的每一个元素都是一个file结构体用来保存文件的大小、创建时间、所有者、所属组等信息,通过该文件描述服能够找到对应的 *.*文件。文件流指针文件流指针是用来封装文件描述符的,文件流指针的底层是...

2020-02-15 16:07:14 192

原创 MD5算法的实现原理

【项目】磁盘文件管理工具项目预期目标本项目旨在实现一个文件管理项目,主要功能为删除磁盘中的重复文件(拟采用计算机文件指纹的方法来判断两个文件是否相同,所谓的文件指纹就是数字签名)常用的数字签名算法数字签名的作用主要有:能够确保信息由指定的发送方发送,因为每个人的签名不同数字签名能够保证文件的完整性,因为数字签名代表了所发文件的特征,文件若发生改变,数字摘要的值也会随之发生改变。常...

2020-02-11 17:05:54 1473

原创 ROS中tf变化与时间之间的关系

在TF中会保持更新TF参考系的结构,这个结构会随着时间的变化而变化TF中会存放10s的各个坐标系变化的时间镜像通常利用lookuptramsform()来获取最新的坐标系变换通过修改nodes/turtle_tf_listener.py来改变调用方式try: now = rospy.Time.now() (trans,rot) = listener.lookupTransform(...

2020-01-31 23:18:28 1162

原创 【Linux】虚拟地址到物理地址的转换

硬件单元MMU如何实现虚拟地址到物理地址的转换虚拟地址构成虚拟地址有32个bit位组成,其中高10个字节存放L1(一级页表索引),中间8个字节存放L2(二级页表索引),低12个字节存放页索引虚拟地址到物理地址的转换L1索引检索的一级页表存放在TTBRx寄存器中,通过L1地址在一级页表中检索到二级页表的地址,再通过L2地址在二级页表中检索到的地址作为物理地址的前24个字节,最后与页索引共同...

2019-10-20 20:54:00 463

原创 【C++】static关键字用法

static关键字1.全局静态变量在全局变量前加上关键字static,全局变量就被定义成为全局静态变量,存放在静态存储区,在整个程序的运行期间一直存在初始化:未初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显示初始化)作用域:作用域发生改变,仅在当前文件中有效。2.局部静态变量在局部变量之前加上static关键字,局部变量就成为局部静态变量,存放在静态存储区。...

2019-10-12 22:24:30 199

原创 在浏览器输入URL,按下回车会经历那些流程

在浏览器输入URL,按下回车会经历那些流程?DNS域名解析,得到IP地址DNS解析流程:​ 1.在主机查询DNS缓存,如果没有就会给本地的DNS发送查询请求​ 2.本地的DNS服务器向根域名服务器发送查询请求,根域名服务器返回该域名的一级域名服务器​ 3.该本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址解析出IP地址后,根据IP地址和默认...

2019-10-11 10:02:12 1282 1

原创 【Linux】浅析单例模式与线程池

单例模式及其应用场景单例模式是一种常见的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于协调系统整体的行为。例如在服务器程序中,该服务器的配置信息存放在一个文件中,这些配置信息由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这样能够简化复杂环境下的配置管理。如何实现一个单例模式一个类能...

2019-09-29 17:26:56 239

原创 【C++】模拟实现Linux中的mkdir -p命令

问题背景工作中,每当要部署一台新机器的时候,就意味着有一堆目录需要创建。例如要创建目录“/usr/local/bin”,就需要此次创建“/usr”、“/usr/local”以及“/usr/local/bin”。好在,Linux下mkdir提供了强大的“-p”选项,只要一条命令“mkdir -p /usr/local/bin”就能自动创建需要的上级目录。问题描述输入包含多组数据。每组数据第一...

2019-09-27 10:04:40 2328

原创 【Linux】图片服务器

项目背景类似于在CSDN中上传博客,选择上传图片后,会进去选择图片文件的界面,然后上传成功后,我们就可以看到上传的图片被显示,其实质就是将图片上传到了CSDN的后台服务器中。核心功能新增图片查看所有的图片信息查看指定图片信息查看图片内容删除图片该项目的核心就是实现一个HTTP服务器,然后用该服务器来存储图片,针对每个图片提供唯一的URL,有了该URL后,就可以接住它将图片展示在其...

2019-09-20 15:52:14 353

原创 【Linux】单例模式

某些类,只应该具有一个对象(实例),就称之为单例。在很多的服务器开发场景中,需要服务器加载很多的数据到内存中,往往需要一个单例的类来管理这些数据饿汉模式懒汉模式懒汉模式的核心思想就是“延时加载“,从而能够优化服务器的启动速度。如果在创建实例对象时不加上synchronized就导致对对象的访问是线程不安全的。饿汉模式的核心思想就是“立即加载”,饿汉模式是线程安全的,在类创建的同时就会...

2019-09-20 10:23:19 680

原创 【C++】浅析智能指针

C++中为什么要引入智能指针malloc 或者new出来的空间没有进行释放,存在内存泄漏等问题异常安全问题,如果在malloc和free之间存在异常抛出,程序转移到异常处执行还是会存在内存泄漏问题智能指针的使用及原理1.RAIIRAII只一种利用对象生命周期来控制程序资源(如内存,操作句柄,网络连接,互斥量等),在对象构造时获取资源,接着控制对资源的访问在对象的生命周期内始终有效,最...

2019-09-19 11:24:19 109

原创 【c++】菱形继承问题

菱形继承我们可以得到Assistant的类模型如下图所示:可见Assistant对象中由两份Person成员吗,造成了数据冗余与二异性问题,利用虚拟继承来解决菱形继承的二义性和数据冗余问题。虚拟继承class A{public: int _a;};class B : virtual public A{public: int _b;};class C : virtu...

2019-08-23 16:43:49 131

原创 【c++】继承定义,基类与派生类赋值转换

继承概念继承机制是面向对象程序设计使代码可以复用的最重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生的新的类称为派生类。继承呈现了面向对象程序设计的层析结构,体现了由简单到复杂的认知过程,之前接触的复用都是函数复用,继承是类设计层次的复用。继承基类成员访问方式的变化类成员/继承方式public继承protected继承private继承基类的...

2019-08-23 15:37:06 442

原创 【c++】深浅拷贝以及string类的传统版写法和现代版写法

浅拷贝浅拷贝也称为拷贝,即编译器只是将对象中的值拷贝了,如果对象中管理资源,最后会导致多个对象共享同一份资源,当一个对象销毁时,就会将该资源释放,然而另一个对象不知道资源已经被你销毁,还会按照正常的额流程去释放资源,导致访问越界,这种现象被称为浅拷贝深拷贝如果一个类中涉及到资源的管理,其拷贝构造函数,赋值运算符重载,析构函数都需要显示定义。给每个对象分配独立的资源,保证多个对象之间不会因为共...

2019-08-23 10:26:38 127

原创 【c++】类与对象

C++类与对象空类:如果一个类中不存在任何成员,我们就称之为空类、class Date{};```但是空类不代表类中啥都没有,在一个类中,如果没有设置成员,会自动设置6个默认的成员函数```c1.初始化和清理 构造函数:完成初始化工作 析构函数:完成清理工作2.拷贝复制 拷贝构造是使用同类对象初始化创建对象 赋值运算符重载:把一个对象赋值给另一个对象3.取地址重载 主要...

2019-08-02 11:30:57 158

linux中断.rar

linux中断

2021-01-04

linux字符设备.rar

linux字符设备

2021-01-04

kernel启动过程和kernel核心结构.rar

kernel启动过程和kernel核心结构

2021-01-04

ARM中断编程.rar

ARM中断编程

2021-01-04

空空如也

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

TA关注的人

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