linux
文章平均质量分 90
小志1989
嵌入式 软件
展开
-
第一章 设备驱动程序简介
unix内核功能划分:内核功能划分如上图:进程管理:进程管理功能负责创建和销毁进程,并处理它们和外部世界之间的连接。不同进程之间的通信是整个系统的基本功能,因此也由内核处理。除此之外,控制进程如何共享cpu的调度器也是进程管理的一部分。概括来说,内核进程管理活动就是在单个或多个cpu上实现多个进程的抽象。内存管理:内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关...原创 2019-11-25 23:08:49 · 285 阅读 · 0 评论 -
第二章 构造和运行模块(1)
本章将介绍所有关于模块编程和内核编程的必要概念设置测试系统原创 2019-11-26 22:21:36 · 100 阅读 · 0 评论 -
NVMe的Linux内核驱动分析
NVMe的Linux驱动是如何实现的。首先NVMe本身是一个块设备,因此NVMe的驱动也是遵循块设备的驱动架构。本文通过两部分介绍NVMe的驱动程序,一部分是操作系统如何创建NVMe块设备,另外一部分是分析一下NVMe的主要流程,包括读写流程和管理流程等。创建NVMe块设备对于Linux的块设备来说,其主要的是通过device_add_disk或者add_disk函数(后者是对前者的简单包...原创 2019-12-06 09:07:19 · 1030 阅读 · 0 评论 -
pcie随笔记录(仅供参考)
硬盘是大家都很熟悉的设备,从HDD到SSD,从SATA到NVMe,作为NVMe SSD的前端接口,PCIe再次进入我们的视野。作为x86体系关键的一环,PCIe标准历经PCI,PCI-X和PCIe,走过近30年时光。其中Host发现与查找设备的方式却一脉沿袭,今天我们先来聊一聊PCIe设备在一个系统中是如何发现与访问的。首先我们来看一下在x86系统中,PCIe是什么样的一个体系架构。下图是一个...原创 2019-12-05 16:24:38 · 1169 阅读 · 0 评论 -
tcp/ip协议概述(2)----udp
udp是用户数据报文协议,属于osi模型中的传输层。它是一种无连接的协议,也就是说上一个报文和下一个报文在协议层没有任何联系,同时提供了简单的不可靠的传输服务。也就是说udp是不可靠的,如果要想让数据可靠,就需要在业务层做纠错和检错功能。比如:tftp。为什么不直接使用ip协议呢?还要重新新增协议udp?一个重要原因是ip协议中没有端口(port)的概念,它只是规定了两台之间的通信,并没有...原创 2019-12-05 15:49:19 · 342 阅读 · 0 评论 -
tcp/ip协议概述(4)----udp编程
什么是UDP?UDP是User Datagram Protocol(用户数据报协议)的缩写,它是一个简单的协议,简单到UDP规范RFC0768只有区区3页。UDP是工作在IP层之上的传输层协议,UDP对IP主要有两个扩展:扩展出端口号使得IP数据报可以多路分发到用户进程。 扩展出校验和提供网络传输过程中数据差错的检验。IP提供了一种尽力而为、无连接的数据报交付服务。IP基于IP地址...转载 2019-12-05 16:30:08 · 393 阅读 · 0 评论 -
tcp/ip协议概述(7)----tcp流量控制与拥塞控制
MSS:Maximum Segment Size,TCP一次传输发送的最大数据段长度。RTT:Round-Trip Time,往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。TCP传输大块数据时,肯定需要进行数据分段,而每个分段所能携带的最大数据就是1个MSS,假设大块数据为100个MSS,那么发送方发送的方式大概有如...原创 2019-12-07 11:07:22 · 454 阅读 · 0 评论 -
tcp/ip协议概述(1)--综述
一.计算机网络体系结构计算机网络体系结构,我们先通过下面几个图认识下:上面三幅结构图能够清晰的看出tcp osi参考模型及tcp/ip框架二,tcp/ip基础1.tcp/ip的具体含义从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的...原创 2019-12-05 14:48:12 · 914 阅读 · 0 评论 -
tcp/ip协议概述(8)----TCP/IP加速原理详解
对某一个key value应用,从网卡接收数据包到应用层处理,再把数据发送出去,整个系统资源消耗情况如下:可以看出,Sockets接口+TCP是系统瓶颈。根据下图模型,瓶颈在于TCP(包括sockets接口)。要想提升系统吞吐量,必须要优化TCP。由于网络延迟的存在,对用户体验影响更大的是如何快速传递数据到客户端,而这属于流量优化的范畴。本文讲述如何优化TC...转载 2019-12-07 11:10:53 · 1799 阅读 · 0 评论 -
关于网络通信中数据,段,包,帧,比特概念概述
关于网络通信中数据,段,包,帧,比特概念概述,是基于osa七层模型概念,参考下图:如上图,数据,段,包,帧,比特是针对不同层数据封装的概念如上图,在最上层的数据,data是应用层协议产生的数据,例如访问网页,看视频等这些都可以称为应用层数据,os将这些应用数据传递给传输层;在传输层,数据被称为segment(段)。在这层,数据会被加上tcp或者udp头,变成一个应用程序特有的数...原创 2019-12-05 11:27:39 · 8561 阅读 · 0 评论 -
tcp/ip协议概述(3)----tcp流量控制
tcp是一种可靠的,面向连接的传输层协议。我们总是希望tcp能够传输数据越快越好,如果存在一种情况,发送方数据发送的非常快,而且接收方耗尽自己的资源也根本来不及接受,那这些多于的数据就会丢弃,这就违背了tcp可靠的宗旨。所以就需要引入一种流量控制的手段;让发送方不要发送太快,既让接收方能够顺利接受数据,而且也不会造成网络链路的阻塞。问题关键就是让发送方不要发送的太快,那就让接收方控制发送的数据...原创 2019-12-05 16:16:40 · 316 阅读 · 0 评论 -
Linux网络编程--tcp和udp的区别整理
(1)TCP是基于连接的,UDP是基于无连接的.(2)TCP的数据是可靠的,UDP的数据是不可靠的.(3)TCP的数据是有序的,UDP的数据是无序的.(4)TCP不保存用户边界,UDP保存用户边界.(5)TCP速度较慢,UDP速度较快.(6)TCP是重量级的开销,UDP是轻量级的.(7)TCP比UDP的头大.(8)TCP可以进行流控,UDP不能.(9)TCP和UDP...原创 2019-12-27 11:15:27 · 360 阅读 · 0 评论 -
tcp/ip协议概述(6)----TCP传输协议中如何解决丢包问题
一.根据定位问题到解决问题的思路:1.确认网络链路问题,ping测和traceroute确认链路是否健康。如果链路有问题,找对应网络管理员排查网络。2.确认系统问题,通过wireshark或者tcpdump在应用系统两端抓包,定位问题所在,排查是发送或者接受系统网卡、性能问题3.从tcp应用本身排查,通过在程序上添加调试代码,核查是否应用逻辑处理问题二.考虑TCP协议为什么会丢包,...原创 2019-12-07 09:02:25 · 2938 阅读 · 1 评论 -
tcp/ip协议概述(5)----tcp详述
TCP 是传输层的协议,全称是叫做Transmission Control Protocol,这个协议在 IETFRFC 793进行了定义。 在互联网产生之前,我们的电脑都是相互独立的,每台机器都有着自己的操作系统并保持着自己的运行。 于是,为了将这些电脑连接起来,并能够基于一种"通道"的形式进行数据、资源的传输及交互,IETF 制定了 TCP 协议。那么,IETF又是什么? 这是一个令...原创 2019-12-07 09:02:41 · 188 阅读 · 0 评论 -
检查Linux内存的几种方法
一.在linux下查看内存使用情况的最简单方法是使用free命令,free命令可以显示系统中物理内存和交换内存的总量,还可以显示内核所用的buffer和caches总量。在我的系统中运行linux命令,显示结果在下面图中所示。其中第一行显示系统物理内存的使用情况,第二行显示的是swap交换内存的使用情况。total列表示系统中内存的总量,used列表示已用内存总量,该列的值可通过如下公...原创 2019-12-08 21:27:13 · 1610 阅读 · 1 评论 -
Linux 内存相关问题
本文主要介绍 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。一、走进 linux 内存1、内存是什么?1)内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成2)内存的特点是存取速率快2、内...原创 2019-12-07 11:20:54 · 166 阅读 · 0 评论 -
Linux启动分析
今天我们讲一下X86Linux的启动。一个计算机的启动,最主要就是CPU的启动。CPU启动就是把这个CPU的里边的各个寄存器设置到一个已知的、固定的状态,并且从这里开始执行。01 指针启动如下图的右边这有几个就是 X86 的话的一些比较清晰可见的寄存器,其中最重要的是 EIP,即指令指针。指令指针就表示它要执行的下一个指令,当我们 CPU 一发生 Reset ...转载 2019-12-07 09:02:15 · 185 阅读 · 0 评论 -
Linux多进程和多线程的一次gdb调试实例
1 原文整理默认设置下,在调试多进程程序时gdb只会调试主进程。gdb7以上的版本(gdb --version)支持多进程调试,只需要设置好follow-fork-mode(fork追踪模式)以及detach-on-fork(指示GDB在fork之后是否断开某个进程的调试)即可。这两个参数的设置命令分别是:set follow-fork-mode [parent|child],set de...转载 2019-12-06 16:18:17 · 225 阅读 · 0 评论 -
linux kernel code 目录说明
Linux目录结构特点一切从根开始 ——"/"/etc/sysconfig/network/etc/sysconfig/network-scripts/ifcfg-eth0Linux中每个设备(例:磁盘分区 光盘),必须要有一个入口才能使用——Linux下面的设备必须挂载后才能使用挂载——相当于给设备开一个入口设备的入口——相当于挂载点 例:目录/mntdf...原创 2019-12-06 15:39:58 · 698 阅读 · 0 评论 -
Linux --tcpdump
tcpdump host #IP地址# //获取主机192.168.1.99接收或发出的telnet包tcpdump参数的主要选项-i :指定网卡 默认是 eth0-n :线上ip,而不是hostname-c :指定抓到多个包后推出-A:以ASCII方式线上包的内容,这个选项对文本格式的协议包很有用-x:以16进制显示包的内容-vvv:显示详细信息-s :按包长截取...原创 2019-12-06 15:37:50 · 123 阅读 · 0 评论 -
Linux僵尸进程
僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程。一个进程在调用了exit命令之后结束了自己的生命时候,你以为是真的被彻底销毁了吗?其实不然,它只是变成了我们称之为“僵尸进程”状态。在用户态程序调用系统调用exit时,也仅仅限于将一个正常的进程变成了一个僵尸进程,并没有完全的销...原创 2019-12-06 15:36:02 · 310 阅读 · 0 评论 -
Linux系统——iptables网络安全服务
Iptables网络安全服务iptables哲学使用iptables的最高境界,永远都不使用哲学1) 不给外网IP。2) 大并发场景不开Iptables,硬件防火墙。网站访问效率,网站安全性,永远是相悖部署安全要把基础网络都弄明白尤其是基础网络知识这块网络安全基础学习条件:基础知识:网络基础 osi,tcp/ip,http,icmp协议。三次握手,四次断开,11...转载 2019-12-06 15:33:11 · 427 阅读 · 0 评论 -
linux定位消耗CPU最多的线程思路参考
top -c,显示系统运行的进程信息,输入大写P,进程便按照使用率排序,可以看到第一列即为进程Id,假如最耗CPU的进程Id为5986: top -Hp 5986,显示该进程的线程运行信息列表,继续输入大写P使其按照CPU使用率排序,可以看到第一行,进程5986内最耗CPU的线程Id是6021: 接下来看你的应用程序是做什么的,如果是java应用程序,想获得更多的线程相关信...原创 2019-12-06 15:30:46 · 248 阅读 · 1 评论 -
为何Cortex-M处理器运行不了linux?
1 . Cortex-M的定位处理器的体系结构定义了指令集(ISA)和基于这一体系结构下处理器的程序员模型,通俗来讲就是相同的ARM体系结构下的应用软件是兼容的。从ARMv1到ARMv8,每一次体系结构的修改都会添加实用技术。在ARMv7版本中,内核架构首次从单一款式变成3种款式。Cortex-M系列属于ARMv7结构下的一个款式:款式M。款式M包含的处理器有Cortex-M0、Corte...转载 2020-01-09 09:09:02 · 1478 阅读 · 0 评论 -
如何在Linux启动时显示开机进度条?
本文基于ZLG ARM9开发套件,主要介绍了如何实现在Linux操作系统启动时显示开机进度条,其方法适用于其他产品。开发主机环境:Ubuntu 12.04(64位)、arm-none-linux-gnueabi-gcc系列交叉工具链硬件清单:EasyARM-i.MX257开发套件或EasyARM-i.MX283A/287A开发套件或EPC-28xC-L工控板 等软件资源:产品光盘...转载 2020-01-09 09:09:05 · 1124 阅读 · 1 评论 -
Linux内核开发工具介绍2
通过make menuconfig(make xconfig或者make gconfig)命令配置内核的时候,从Kconfig文件读取菜单,配置完毕保存到文件名为.config的内核配置文件中,供Makefile文件在编译内核时使用。1.1.1 Kconfig基本语法如程序清单.1所示代码摘自文件,是一个比较典型的Kconfig文件片段,包含了Kconfig的基本语法。程序清单1dri...转载 2020-01-09 09:09:23 · 329 阅读 · 0 评论 -
浅析linux权限管理
在Windows下,可以通过鼠标右击文件,在属性栏查看文件的权限。Linux下的文件“哲学”是否与Windows相同呢?我们从以下几点分析。1 . 文件权限设定的作用文件权限的设定是为了保护系统及用户数据的安全性。对于用户来说,最重要的事情就是数据、文件的私密性及安全性。从系统管理员到普通用户,从文件属性到文件特殊加密 ,无不围绕着一个主题:权限管理。若一个关键文件被意外写入,轻则数据丢失...转载 2020-01-09 09:09:31 · 202 阅读 · 0 评论 -
Linux内核开发工具介绍1
尽管她是一个复杂的系统,但对绝大部分内核开发者来说只需要知道如何使用,而无需了解其中的细节。她对绝大部分内核开发者基本上是透明的,隐藏了大部分实现细节,有效地降低了开发者的负担,能使其能专注于内核开发,而不至于花费时间和精力在编译过程上。1.1 Linux内核中的Makefile文件1.1.1 顶层Makefile源码目录树顶层Makefile是整个内核源码管理的入口,对整个内核的源码...转载 2020-01-09 09:10:08 · 124 阅读 · 0 评论