linux
鹰击丶长空
无名之辈
展开
-
小白怎么使用git
最近在学习linux内核,就想顺便搞一下git,虽然日常工作使用的是svn,不过svn这种集中式版本控制工具在局域网内比较强悍,毕竟带宽可以刚住,每次都要先update一下,如果是在互联网上,大家分布式开发,网速显然并不能满足条件(50Kb路过)。 刚刚百度了一波git使用教程,并且亲自试验了一下,发现网上虽然说得比较详细,但是新手刚刚接触git,很容易就会GG,遇到一些奇怪问题也被...原创 2018-04-11 23:48:17 · 339 阅读 · 1 评论 -
linux-IPC-消息队列
消息队列消息队列是消息的链接表,存储在内核中,由消息队列标志符标识。每个消息都包含一个正的长整型类型的字段、一个非负的长度以及实际的数据字节数,这些都在消息添加到队列时,传送给msgsnd。msgrcv用于在队列中取消息,消息并不一定需要先进先出,可以根据消息类型字段来取。特点1.生命周期随内核,消息队列会一直存在,需要调用接口显式删除或使用命令删除2.消息队列可以双向通信...原创 2019-07-01 22:10:54 · 209 阅读 · 0 评论 -
linux-系统调用过程
调用过程:用户空间->内核空间INT 0x80(封装在C库函数中) -->system_call(系统调用处理程序)-->系统调用服务例程 -->内核程序系统调用时通过软中断指令INT 0x80实现的,这条指令会让系统跳转到一个预先设置好的内核地址,指向系统调用处理程序system_call。系统调用服务例程是对一个具体的系统调用的内核实现函数。执行任何系统...原创 2019-06-23 23:15:46 · 787 阅读 · 0 评论 -
linux-IPC -PIPE
进程间通信 (InterProcess Communication,IPC)原因:由于不同进程地址空间也不同,A进程无法访问B进程的地址空间。任何一个进程的全局变量也无法被其他进程所见,因此,进程间通信必须通过内核。在内核中开辟一块缓冲区,A进程把数据从用户空间拷贝到内核缓冲区,B进程从内核缓冲区把数据读走,这便是IPC。管道(PIPE)1.PIPE是UNIX系统IPC最古老的形...原创 2019-06-26 23:41:38 · 180 阅读 · 0 评论 -
linux-IPC-Semaphore
信号量semaphore信号量是一个计数器,用于为多个进程提供对共享数据对象的访问。常用的信号量形式为二元信号量(Binary semaphore)。它控制单个资源,初始值为1。但是,一般而言,信号量的初值可以是任意正数,该值表明有多少个共享资源单位可供共享应用。数据结构#include <sem.h>struct ipc_perm{ __kernel_key_t...原创 2019-07-02 22:17:12 · 257 阅读 · 0 评论 -
linux-IPC-ShareMemory
共享内存(ShareMemory)共享内存允许两个或多个进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,因此,这是最快的一种IPC方式。使用共享内存的关键点在于:多个进程同步访问一个给定的存储区,若服务器进程正在把数据放入共享内存区,则它在做完这一操作之间,客户进程不能取这些数据。可以使用信号量、记录锁或者互斥量来完成同步过程。数据结构#include &...原创 2019-07-03 00:18:34 · 171 阅读 · 0 评论 -
linux-socket
socket系统调用socket函数族在系统调用时,同样遵循我上篇博客的 用户态->内核态,但是,我在寻找sys_socket定义时,只有函数声明asmlinkage long sys_socket(int, int, int);那么它的实现在哪儿呢?这里就需要有技巧了!这样实现都在net/socket.c文件。以socket函数为例,SYSCALL_DEFINE3(so...原创 2019-06-24 23:17:55 · 185 阅读 · 0 评论 -
linux-启动过程-systemd
操作系统的启动分为两个过程:boot(引导)和startup(启动)。boot阶段开始于打开电源开关,结束于内核初始化完成和systemd进程成功。启动阶段接管了剩余工作,直到操作系统进入可操作状态。因此,linux系统的启动过程如下:POST(BIOS上电自检)->GRUB(引导装载程序)->kernel init(内核初始化)->startsystemd(启动s...原创 2019-07-05 00:09:56 · 899 阅读 · 0 评论 -
linux-内存寻址-内存地址
内存地址1.逻辑地址包含在机器语言指令中用来指定一个操作数或一条指令的地址。每个逻辑地址都由一个段(segment)和偏移量(offset)组成,偏移量指明了从段开始的地方到实际地址之间的距离。2.线性地址是一个32位无符号整数,可以用来表示4GB的地址,也就是高达4294967296个内存单元。线性地址通常用十六进制数字表示,范围从0x00000000到0xffffffff。...原创 2019-07-10 23:38:17 · 332 阅读 · 0 评论 -
linux-asmlinkage
asmlinkage限定词(/linux 2.6/arch/x86/include/asm)#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))__attribute__是关键字,是GCC的C语言扩展,regparm(0)表示0个寄存器传递参数,即不从寄存器传送参数,强迫从栈中提取。如果regparm(3),那么...原创 2019-06-22 23:57:03 · 198 阅读 · 0 评论 -
linux-UNIX socket
UNIX域套接字域套接字作为进程间通信的一种手段,值得我们研究一下。域套接字实现本地进程间通信,同样有服务端和客户端之分。一个进程作为客户端,另一个进程作为服务端。这个和TCP socket类似,但是不一样。域套接字不经过底层网络。数据结构使用的是struct sockaddr_un。对于这个结构,重点便是填充sun_family和sun_path,sun_path是文件路径。调用的so...原创 2019-06-25 20:05:45 · 1043 阅读 · 0 评论 -
linux 内存分配
进程内存分配:每个进程所分配的内存由很多“段”组成:(地址递增方向)1.文本段:包含了进程运行的程序机器语言指令2.初始化数据段:包含了显式初始化的全局变量和静态变量3.未初始化数据段:包含了未进行显式初始化的全局变量和静态变量4.堆:向上增长5.栈:向下增长虚拟内存管理1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址2.虚拟地址可以通...原创 2019-06-15 10:22:37 · 267 阅读 · 0 评论 -
列车实时数据通信协议(TRDP)探索之路【一】
前记:最近在开发TRDP协议项目,需求是在三层交换机上支持TRDP协议,故踏入不断研读协议深入源码之路。源码svn:https://svn.code.sf.net/p/tcnopen/trdp/ 可以下载最新的版本。编译:windows下可以使用VS工具直接编译相应代码 ;linux编译:cd trdp/configchmod a+x *mv buildsettings_posi...原创 2018-11-28 23:35:32 · 9493 阅读 · 10 评论 -
列车实时数据通信协议(TRDP)探索之路【三】
TRDP协议中传输的PD(Process-Data)和MD(Message-Data)。PD主要用于列车控制,传输命令和状态信息,数据量大,要求高可靠性、实时性和确定性,一般为周期性传送。MD主要用于故障和诊断信息,数据量长短不一,一般都是按需传送,需要确保实时性。PD和MD通信方式都是基于了生产者/消费者模型,包含了PUSH和PULL操作,设备角色有publisher、subscri...原创 2018-12-03 01:29:59 · 12791 阅读 · 1 评论 -
列车实时数据通信协议(TRDP)探索之路【二】
在【一】中已经对TRDP协议有了基本的了解,现在开始进行源码的深入了解。我checkout的是1.4.0.0的发布版,通过目录可以基本先了解大致结构。源码位于src目录下,/api提供了基本对外的API接口,/common包含了协议处理的核心代码,/vos包含了与操作系统对接的代码,支持了linux、VxWorks、Windows,操作系统接口大致为socket网络通信处理、内存管理以及任...原创 2018-12-01 11:40:54 · 7190 阅读 · 1 评论 -
列车实时数据通信协议(TRDP)探索之路【四】
经过一段时间的学习,基于以太网交换机的TRDP PD开发调试结果已经正常了,故此,记录一下。TRDP基于生产者、消费者模型。TRDP PD 通信模式有两种,push和pull。在这两种模式中,网络设备又可以分为三种角色:publisher、subscriber、requester.publisher是数据的提供者,在push和pull模式中负责发送注册的comId的数据,即所谓的生产者...原创 2018-12-07 01:04:45 · 9548 阅读 · 11 评论 -
【转】跟我一起写 Makefile
Makefile得好好学啊!RT,转自大佬的【跟我一起写 Makefile】目录:Makefile学习教程: 跟我一起写 Makefile0 Makefile概述 0.1 关于程序的编译和链接 1 Makefile 介绍 1.1 Makefile的规则 1.2 一个示例 1.3 make是如何工作的 1.4 makefile中使用变量 1.5 让make自动...转载 2019-04-14 14:39:40 · 215 阅读 · 0 评论 -
列车实时数据通信协议(TRDP)探索之路【五】
时隔N久,才发现TRDP中的MD一直没有更新。距离项目已经好几个月了,大致已经忘光啦。何时能达到张无忌学习太极拳剑的地步QAQ。不过还是稍微总结一下吧 。MD大致也就是caller和replier的交互。需要做的工作便是加入监听的comId,然后发送call请求,剩下的便是在收包时做处理了。关于MD的类型也是有好几种,不同类型的处理流程也是不一样的。EXT_DECL TRDP_ERR...原创 2019-04-14 14:57:01 · 4340 阅读 · 11 评论 -
【APUE】linux信号机制
【信号】软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信...原创 2019-04-23 20:01:14 · 171 阅读 · 0 评论 -
【APUE】线程-pthread
【线程标识】每个进程都有一个进程ID,每个线程也有一个线程ID。进程ID在整个系统中都是唯一的,但是线程ID不同,线程ID只有在它所属的进程的上下文中才有意义。#include <pthread.h>/*不同系统对于pthread_t结构定义不同,因此不能直接比较*/int pthread_equal(pthread_t tid1, pthread_t tid2);/...原创 2019-05-19 21:02:11 · 175 阅读 · 0 评论 -
linux-文件权限
chmod#include <sys/stat.h>int chmod (const char* filename, int mode);filename是文件名mode文件权限,八进制数返回值:成功 返回0,失败返回-1。chown#include <unistd.h>int chown(const char *path, uid_t...原创 2019-08-02 00:21:12 · 184 阅读 · 0 评论