- 博客(441)
- 资源 (121)
- 问答 (1)
- 收藏
- 关注
原创 彻底搞懂自动驾驶中间件
彻底搞懂自动驾驶中间件“调度”①:从哪里开始着手设计彻底搞懂自动驾驶中间件的“调度”②: 由浅入深,五张图勾绘一套完整调度系统
2024-03-07 17:02:21
780
原创 RTI connext 初级入门
RTI® Connext® DDS是一个连接框架,用于构建具有高性能和可扩展性要求的分布式应用程序。它包括以下组件:为您提供 API 的SDK,可帮助您使用本文档中描述的通信模式发送和接收数据(请参阅后续步骤)。这些 API 允许您将自己的应用程序连接到数据总线上的其他应用程序。帮助您可视化数据和调试分布式系统的工具。可以在系统中执行专用功能的基础设施服务,例如记录、桥接和持久数据。
2023-09-07 14:30:13
510
原创 深入分析 RTPS协议
在我们上网时难免会因为这样那样的问题对通信产生疑问。当我们产生了疑问之后,这里推荐使用wireshark进行抓包分析。不是吹牛,wireshark真的是一款实用有效的必备“良药”。wireshark是最流行的网络嗅探器之一,能在多种平台上抓取和分析网络包,windows/Linux/Mac等,拥有非常友好的界面。追溯大学期间的《计算机网络》,就是下面这本书。全靠死记硬背才把OSI七层模型,TCP/IP五层模型(也有说是四层模型,没关系)记下来,考完试然后就又忘记了。
2023-03-24 20:03:36
1922
1
原创 linux c setsockopt 设置ttl
TTLTTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段.在IPv4包头中TTL是一个8 bit字段,它位于IPv4包的第9个字节。如下图所示,每一行表示 32 bit(4字节),位从0开始编号,即0~31。TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64.虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网..
2021-12-21 09:54:28
3078
原创 ubuntu 解压deb
ar -x libstdc++6_4.7.2-5_i386.deb这种压缩包是两层压缩,外面是xz压缩方式,里层是tar压缩方式:$xz -d ***.tar.xz$tar -xvf ***.tartar -zxvf data.tar.gz
2021-11-05 14:44:06
1240
原创 ipfrag_low_thresh,ipfrag_high_thresh
没有正确重组的包都需要存在reassembly buffer里面,存的数据包数量超过reassembly buffer的上限后自然会被丢弃。所以当使用 netstat -s 命令发现很多 reassembles failed ,则需要调整 reassembly buffer 的大小,该大小由下面两个系统参数控制:/proc/sys/net/ipv4/ipfrag_low_thresh15728640/proc/sys/net/ipv4/ipfrag_high_th...
2021-10-30 08:41:28
1517
原创 IP 分片重组三重奏
linux内核协议栈 IPv4分片重组Ⅰ之相关数据结构https://wangquan.blog.youkuaiyun.com/article/details/109228044linux内核协议栈 IPv4分片重组Ⅱ之 ip_defrag() 接口https://wangquan.blog.youkuaiyun.com/article/details/109235276linux内核协议栈 IPv4分片重组Ⅲ之分片回收和重组https://wangquan.blog.youkuaiyun.com/articl..
2021-09-03 17:43:35
285
转载 iptables -A INPUT -f -j DROP 丢弃碎片规则无效
参考网址:https://ask.youkuaiyun.com/questions/1059469练习iptables的攻击规则,发现如下的命令无效。iptabled -A INPUT -f -j DROP测试win10: 192.168.0.2linux: 192.168.0.5测试1:无分片的报文win10# ping 192.168.0.5 -->可以ping通 测试2:带分片的报文win10# ping 192.168.0.5 -l 3000 -->可以ping通 测试3:
2021-09-01 19:32:42
1781
原创 车载以太网三连篇
AVB简介--第一篇:概述http://blog.coderhuo.tech/2020/03/22/AVB_summury/AVB简介--第二篇:gPTP简介http://blog.coderhuo.tech/2020/04/05/gptp_summury/AVB简介--第三篇:AVTP简介http://blog.coderhuo.tech/2020/04/12/avtp_summury/...
2021-08-31 11:31:13
230
原创 使用send ip 构建icmp一个 分片包
发送任意IP数据包的命令行工具:SendIPhttps://www.open-open.com/lib/view/open1429781017854.htmlsendip发包https://www.cnblogs.com/jeasonrun/p/4206427.htmlsendip工具详解https://www.cnblogs.com/lldxz/p/11738702.html【工具】ubuntu16安装sendip发包工具,模拟发送tcp/udp/icmp报文https:/..
2021-08-26 17:47:23
761
转载 Linux中arp表的老化机制
转发网址:https://www.cnblogs.com/lsgxeva/p/13749751.htmlLinux内核网络协议栈中自动维护着一堆网络协议,这堆网络协议在内核中也是不同的存在,对于arp,Linux内核就提供了一种缓存机制来维护这张表。实际的使用场景是,网络设备维护的arp表与内核维护的arp表相同步,一旦有变化,便通过钩子通知到上层的arp模块。但对于网络设备的arp模块来说,还需要实现一个arp老化时间的功能,这个功能的实现便也依靠了linux内核的arp表老化。内核是如何维护
2021-08-20 10:05:58
4253
原创 为什么tcp的TIME_WAIT状态要维持2MSL
https://cloud.tencent.com/developer/article/1450264?from=14588
2021-08-15 09:40:45
144
转载 CMake使用总结(一)
参考https://www.cnblogs.com/hackcode/p/6050159.html当我们在写CMakeLists.txt文件时,常常会搞不明白link_directories, LINK_LIBRARIES, target_link_libraries这3者的区别,下面就其详细介绍:INCLUDE_DIRECTORIES(添加头文件目录) 它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用(这里特指c++。c和Java
2021-08-09 20:51:13
169
原创 Cmake 比较好的博客
https://www.cnblogs.com/coderfenghc/archive/2012/07/08/2581734.htmlhttps://www.cnblogs.com/coderfenghc/archive/2012/07/11/2585616.htmlhttps://www.cnblogs.com/coderfenghc/archive/2012/07/14/2591135.html
2021-08-08 11:26:37
125
原创 docker常用操作
启动dockersudo service docker start查看启动的docker镜像sudo docker images查看启动的docker实例化对象sudo docker ps -a删除docker实例化对象sudo docker rm tag值sudo docker ps -aCONTAINER ID IMAGE COMM...
2021-08-03 14:30:27
234
原创 多线程程序设计的常见坑
i++大致分为三个步骤:1、从内存读出i的值到寄存器2、操作寄存器加13、将寄存器值写到i内存多个线程去操作同一个全局变量的时候,可能某个线程在第二步的时候切换到另一个线程,这样就导致少加了。比如线程A 在i=1 的时候在第二步,这个时候寄存器加1值为2,在这个时候切换到线程B ,由于线程A还没有把2写到i里面,使用B读出来还是1,自增写到i里面,i为2,在切换到线程A,线程A将寄存器里面的2写到i,这样就少加了一次。...
2021-08-03 14:24:42
125
转载 TCP/IP详解 第七章 防火墙和网络地址转换(4) iptables防火墙的raw表
mangle-->nat-->filter举例来说:如果PRROUTING链上,即有mangle表,也有nat表,那么先由mangle处理,然后由nat表处理RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的we
2021-06-24 08:52:05
651
原创 多线程程序设计的常见坑
i++大致分为三个步骤:1、从内存读出i的值到寄存器2、操作寄存器加13、将寄存器值写到i内存多个线程去操作同一个全局变量的时候,可能某个线程在第二步的时候切换到另一个线程,这样就导致少加了。比如线程A 在i=1 的时候在第二步,这个时候寄存器加1值为2,在这个时候切换到线程B ,由于线程A还没有把2写到i里面,使用B读出来还是1,自增写到i里面,i为2,在切换到线程A,线程A将寄存器里面的2写到i,这样就少加了一次。...
2021-06-02 18:04:18
161
转载 Linux内存管理十五 CMA
什么是CMACMA是reserved的一块内存,用于分配连续的大块内存。当设备驱动不用时,内存管理系统将该区域用于分配和管理可移动类型页面;当设备驱动使用时,此时已经分配的页面需要进行迁移,又用于连续内存分配;其用法与DMA子系统结合在一起充当DMA的后端,具体可参考《没有IOMMU的DMA操作》。数据结构...
2021-05-28 10:50:42
341
转载 Linux内存管理十四 vmalloc
走进vmalloc根据前面的系列文章,我们知道了buddy system是基于页框分配器,kmalloc是基于slab分配器,而且这些分配的地址都是物理内存连续的。但是随着碎片化的积累,连续物理内存的分配就会变得困难,对于那些非DMA访问,不一定非要连续物理内存的话完全可以像malloc那样,将不连续的物理内存页框映射到连续的虚拟地址空间中,这就是vmap的来源)(提供把离散的page映射到连续的虚拟地址空间),vmalloc的分配就是基于这个机制来实现的...
2021-05-28 10:43:17
370
转载 Linux内存管理十三 Linux slab分配器
在Linux中,伙伴系统是以页为单位分配内存。但是现实中很多时候却以字节为单位,不然申请10Bytes内存还要给1页的话就太浪费了。slab分配器就是为小内存分配而生的。slab分配器分配内存以Byte为单位。但是slab分配器并没有脱离伙伴系统,而是基于伙伴系统分配的大内存进一步细分成小内存分配。走进slub...
2021-05-28 10:34:55
637
转载 Linux内存管理十二 Linux进程的内存管理之缺页异常
通过《Linux进程的内存管理之malloc和mmap》我们知道,这两个函数只是建立了进程的vma,但还没有建立虚拟地址和物理地址的映射关系。当进程访问这些还没建立映射关系的虚拟地址时,处理器会自动触发缺页异常。ARM64把异常分为同步异常和异步异常,通常异步异常指的是中断(可看《上帝视角看中断》),同步异常指的是异常。关于ARM异常处理的文章可参考《ARMv8异常处理简介》。...
2021-05-28 10:06:29
705
转载 Linux内存管理十一 malloc和mmap
通过《Linxu进程的内存管理》,我们知道了进程内存的最小单位是vma,根据不同的用处又划分了不同类型的vma,比如 heap: 动态分配和释放的内存 stack: 存放局部变量和实现函数调用 mmap:文件区间映射到虚拟地址空间的内存映射 text,data,bss 这篇我们就看下进程动态申请的内存,我们知道进程动态申请内存的函数是malloc,这篇讲下其涉及到的vma,即heap和mmap。malloc在linux标准libc库种,malloc函数的...
2021-05-28 09:24:56
851
转载 Linux内存管理十 如何让Linux进程在固定堆运行
我们知道程序在每次运行的时候地址都是不一样的,linux之所以有这样的设计也许是为了安全性考虑,不利于黑客的攻击。我们看一个简单的程序:#include <stdio.h>#include <stdlib.h>int main(int argc, char* argv[]){ int first = 0; int *p = malloc(1024); printf("p=%p\n", p); return 0;}显然程序每
2021-05-27 17:27:33
213
转载 Linux内存管理之九 内存管理
几个关键的数据结构一个进程的虚拟地址空间主要由两个数据结来描述,一个是 mm_struct,一个是 vm_area_structs。 mm_struct结构描述了一个进程的整个虚拟地址空间,vm_area_truct描述了虚拟地址空间的一个区间(简称虚拟区)。下图就是我们所说的由task_struct到mm_struct,进程的地址空间的分布。 每一个进程都会有自己独立的mm_struct,这样每一个进程都会有自己独立的地址空间,这样才能互不干扰。当进程之间的地址空间被共享的时候,我们可以
2021-05-27 17:23:17
149
转载 Linux内存管理之八 Linux页框分配器之内存碎片化整理
页框分配器在慢速分配中包括内存碎片化整理和内存回收,代码如下:static inline struct page *__alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, struct alloc_context *ac){ page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags, ac, INIT_COMPACT_PRI
2021-05-27 17:12:06
331
转载 Linux内存管理之七 Linux分区页框分配器之水位
我们讲页框分配器的时候讲到了快速分配和慢速分配,其中伙伴算法是在快速分配里做的,忘记的小伙伴我们再看下:static struct page *get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags,const struct alloc_context *ac){ for_next_zone_zonelist_nodemask(zone, z, ac->zonelist, ac->high
2021-05-27 16:56:38
680
转载 Linux内存管理之六 Linux页框分配器之伙伴算法
上文我们讲到快速分配和慢速分配,接下来会详细讲解这两种分配情况,我们先来看下快速分配:static struct page *get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags, const struct alloc_context *ac){ for_next_zone_zonelist_nodemask(zone, z, ac->zonelist, ac->high_z
2021-05-27 16:20:50
371
转载 Linux内存管理之五 Linux分区页框分配器
我们现在知道物理内存是以页框为最小单位存在的,那么内核中分配页框的方法是什么呢?分区页框分配器页框分配在内核里的机制我们叫做分区页框分配器(zoned page frame allocator),在linux系统中,分区页框分配器管理着所有物理内存,无论你是内核还是进程,都需要请求分区页框分配器,这时才会分配给你应该获得的物理内存页框。当你所拥有的页框不再使用时,你必须释放这些页框,让这些页框回到管理区页框分配器当中。有时候目标管理区不一定有足够的页框去满足分配,这时候系统会从另外两个管理区中获
2021-05-27 13:48:39
386
转载 Linux内存管理之四 数据结构
学习内存管理之前我们先了解几个重要的结构体,这些结构体理解了,基本对内存管理也就理解了一半。我说的。struct zone { unsigned long watermark[NR_WMARK]; struct pglist_data *zone_pgdat; struct per_cpu_pageset __percpu *pageset; struct free_area free_area[MAX_ORDER]; ......}enum zone_watermarks
2021-05-27 11:29:39
239
转载 Linux内存管理之三 Linux内存初始化
有了armv8架构访问内存的理解,我们来看下linux在内存这块的初始化就更容易理解了。创建启动页表:在汇编代码阶段的head.S文件中,负责创建映射关系的函数是create_page_tables。create_page_tables函数负责identity mapping和kernel image mapping。 identity map:是指把idmap_text区域的物理地址映射到相等的虚拟地址上,这种映射完成后,其虚拟地址等于物理地址。idmap_text区域都是一些打开MMU相关
2021-05-27 11:25:26
594
转载 Linux内存管理之二 MMU的过程
之前写过一篇《CPU是如何访问内存的?https://mp.weixin.qq.com/s?__biz=MzIxMjE1MzU4OA==&mid=2648919485&idx=1&sn=5b9281e427829634373a638bf0be1c89&chksm=8f5d8826b82a0130fb7e604c344de9d17436ccf51c1ab35a6c32c5b4dd80db7ea6ac7b534594&scene=21#wechat_redirect》的文
2021-05-27 10:28:29
296
转载 Linux内存管理之一 CPU是如何访问内存的?
内存管理可以说是一个比较难学的模块,之所以比较难学。一是内存管理涉及到硬件的实现原理和软件的复杂算法,二是网上关于内存管理的解释有太多错误的解释。希望可以做个内存管理的系列,从硬件实现到底层内存分配算法,再从内核分配算法到应用程序内存划分,一直到内存和硬盘如何交互等,彻底理解内存管理的整个脉络框架。本节主要讲解硬件原理和分页管理。CPU通过MMU访问内存我们先来看一张图:从图中可以清晰地看出,CPU、MMU、DDR 这三部分在硬件上是如何分布的。首先 CPU 在访问内存的时候都需要通过 MM
2021-05-27 10:06:11
828
原创 linux IIC 驱动
I2C驱动https://www.jianshu.com/p/40a178ff48f5Linux IIC 驱动分析(1) — 框架分析https://blog.youkuaiyun.com/zhoutaopower/article/details/100113002Linux驱动开发(十八):I2C驱动https://blog.youkuaiyun.com/a568713197/article/details/103280647...
2021-05-25 10:21:24
110
无锁队列测试.rar
2020-08-18
2019蚂蚁金服面试题.zip
2020-06-30
23种最新设计模式知识要点整理.zip
2020-06-30
1.分布式架构面试题汇总.zip
2020-06-30
GSM相关资料.zip
2020-06-17
SIM800系列_IP_应用文档_V1.02 HTTP FTP使用.pdf
2020-06-17
IAR开发环境搭建.zip
2020-06-10
物联网教程_55_数据可视化.zip
2020-06-05
物联网教程_54_物联网组件.zip
2020-06-05
物联网教程_53_《MQTT_JX》例程.zip
2020-06-05
物联网教程_52_云下设备上云_百度云.zip
2020-06-05
物联网教程_51_创建云端设备_百度云.zip
2020-06-05
物联网教程_50_天工物接入介绍_百度云.zip
2020-06-05
物联网教程_49_mqtt.fx客户端.zip
2020-06-05
NordicSemiconductor::Device:Startup:8.27.0
2021-03-12
ffmpeg学习资料.rar
2020-07-08
微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud.zip
2020-06-30
openwrt 怎么支持 gobi2000啊,哪位大侠做过啊
2015-01-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人