自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

落尘纷扰的专栏

在现实中守护程序员内心的一方净土

  • 博客(93)
  • 收藏
  • 关注

转载 USB Type-A/Type-B/Type-C/mini-AB/micro-AB接口简介

网站分享~

2017-08-13 00:39:04 29236

原创 OpenWrt netifd学习笔记

Netifd简介Netifd是OpenWrt中用于进行网络配置的守护进程,基本上所有网络接口设置以及内核的netlink事件都可以由netifd来处理完成。 在启动netifd之前用户需要将所需的配置写入uci配置文件/etc/config/network中,以告知netifd如何设置这些网络接口,如IP地址、上网类型等。如果在netifd运行过程中需要修改配置,则只需更新并保存/etc/c...

2017-07-11 18:08:33 28317

转载 ubuntu 14.04上Samba服务失败的问题

在ubuntu 14.04上配置好Samba后,在windows中可以看到samba中配置的共享文件夹,但是却打不开,被告知无法访问。您可能没有权限使用网络资源,请与这台服务器的管理员联系以查明您是否有访问权限,指定的网络名不再可用。

2017-06-24 22:31:32 1746

转载 理解APCS-- ARM过程调用标准

原文地址:http://blog.csdn.net/skyflying2012/article/details/37510171 介绍APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。它们可以编译自  C、 Pascal、也

2017-02-15 23:06:24 1288

转载 Linux上的Shebang符号(#!)

原文地址:http://smilejay.com/2012/03/linux_shebang/ 使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?本文了将给你简单介绍一下Shebang(”#!”)这个符号。 首先,这个符号(#!)的名称,叫做”Shebang”或者”Sha-bang”(还有其他一些名称,不过我一般就用这两个)。 She

2017-02-13 00:12:58 3589

原创 GNU/Linux awk命令用法详解

本来计划年前写完的,结果现在才搞定,手册的内容一边翻一边实验,还有awk版本问题,又参考Effective AWK Programming对语法和示例做了些补充。终于写完了,大家元宵节快乐!AWK简介AWK是一门解释型的编程语言,它的名字来源于它的三位作者的姓氏:Alfred Aho,Peter Weinberger和Brian Kernighan。AWK能够应用于广泛的计算和数据处理任务。所有的...

2017-02-11 21:34:54 10892 1

原创 Linux sed命令的用法介绍

sed命令简介sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处

2017-01-02 00:44:37 14477 3

转载 软件项目风险管理(Project Risk Management)

风险管理引言 风险管理概述 项目风险的管理规划 项目风险识别 项目风险分析 项目风险应对 项目风险监控 引言假如你是一个项目的负责人,有幸要在40天内为布朗先生建造一座坚固实用美观的别墅。你会发现哪些风险?第一组A、40天是40个工作日吗?还是包括节假日的40天?我如何保证按时完成?B、布朗先生的要求坚固实用,坚固要达到抗震几级?使用期限是多长?实用更麻烦,布朗先生觉得应该

2016-06-30 00:06:39 20460

原创 SMI(MDC/MDIO)总线接口介绍

SMI:串行管理接口(SerialManagement Interface),也被称作MII管理接口(MIIManagement Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:

2016-06-10 22:56:44 106041 3

原创 ARM Linux中的非对齐内存访问(Alignment trap警告的原因)

介绍ARM Linux中进行编程时非对齐内存地址访问时需要注意的问题,以及Alignment trap警告的原因。

2016-06-04 22:12:05 17063

原创 Linux 虚拟文件系统(VFS)介绍

1. 通用文件模型Linux内核支持装载不同的文件系统类型,不同的文件系统有各自管理文件的方式。Linux中标准的文件系统为Ext文件系统族,当然,开发者不能为他们使用的每种文件系统采用不同的文件存取方式,这与操作系统作为一种抽象机制背道而驰。为支持各种文件系统,Linux内核在用户进程(或C标准库)和具体的文件系统之间引入了一个抽象层,该抽象层称之为“虚拟文件系统(VFS)”。VFS一方面提供一...

2016-05-27 21:40:20 18181

原创 linux编程 - C/C++每线程(thread-local)变量的使用

在一个进程中定义的全局或静态变量都是所有线程可见的,即每个线程共同操作一块存储区域。而有时我们可能有这样的需求:对于一个全局变量,每个线程对其的修改只在本线程内有效,即每个线程虽然共享这个全局变量的名字,但这个变量的值就像只有在本线程内才会被修改和读取一样。线程局部存储和线程特有数据都可以实现上述需求。1. 线程局部存储线程局部存储提供了持久的每线程存储,每个线程都拥有一份对变量的拷贝

2016-05-12 01:10:45 34262 13

原创 linux编程 - 给线程起名字

通过prctl给线程起名为了能方便的区分一个进程中的每个线程,可以通过prctl()给每个线程取个名字。这样在会创建多个线程的程序执行过程中,就能知道一个pid或tid对应的是哪个线程。prctl是个系统调用,可以用来读取和更改一个线程的属性。其用户态接口定义如下:#include int prctl(int option, unsigned long arg2, unsigned

2016-05-09 01:09:23 19343

原创 [openwrt] ubus实现进程间通信举例

上一篇文章介绍了ubus的组件和实现原理,本文通过代码实例介绍使用ubus进行进程间通信的三种方式。1. invoke的方式实现端对端通信最简单的情景就是一个提供服务的server端,一个请求服务的client端,client请求server的服务。下面的例子中,server注册了一个名为“scan_prog”的对象,该对象中提供一个“scan”方法:ubus_invoke.h:

2015-09-16 22:16:22 38442 3

转载 sscanf的高级用法

原博地址:http://blog.csdn.net/noodies/article/details/4386570printf或者sprintf一定是任何一个C程序员最常见到的函数,与sprintf的作用相反,sscanf通常被用来解析并转换字符串,其格式定义灵活多变,可以实现很强大的字符串解析功能。 sscanf的原型很简单,定义如下:#include int

2015-08-20 08:34:31 1704

原创 [openwrt] 使用ubus实现进程通信

ubus为openwrt平台开发中的进程间通信提供了一个通用的框架。它让进程间通信的实现变得非常简单,并且ubus具有很强的可移植性,可以很方便的移植到其他linux平台上使用。本文描述了ubus的实现原理和整体框架。ubus源码可通过git库 git://nbd.name/luci2/ubus.git 获得,其依赖的ubox库的git库:git://nbd.name/luci2/ubox.git...

2015-05-10 22:55:47 54403 6

转载 本地socket(unix domain socket)

原博出处未知,故无法贴出,原作者烦请告知。socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号

2015-05-10 13:15:48 5130

转载 RTP协议全解(H264码流和PS流)

原博地址:http://blog.csdn.net/chen495810242/article/details/39207305写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析,其中借鉴了很多文章,我都列在了文章最后,在此表示感谢。互联网的发展离不开大家的无私奉献,我决定从我做起,希望大家支持。原创不易,转载请附上

2015-05-10 08:54:17 2255

原创 linux内核中打印栈回溯信息 - dump_stack()函数分析

当内核出现比较严重的错误时,例如发生Oops错误或者内核认为系统运行状态异常,内核就会打印出当前进程的栈回溯信息,其中包含当前执行代码的位置以及相邻的指令、产生错误的原因、关键寄存器的值以及函数调用关系等信息,这些信息对于调试内核错误非常有用。

2015-05-08 21:19:32 28996

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-05-01 11:20:57 831

原创 C语言中的二级指针(1) -- 值传递问题

先看一个我们非常熟悉的代码:#include void swap(int a, int b){ int tmp; tmp = a; a = b; b = tmp;}int main(){ int a = 3, b = 5; swap(a, b); printf("a = %d, b = %d\n", a, b); return 0;}我们都知道,这段代码中的s

2015-04-25 22:54:51 3212

原创 C语言中的二级指针(2) -- 链表操作

一个链表中所有元素通过指针串联起来,链表的插入、删除等操作都是对指针的操作。使用指针操作链表例如,下面的代码段实现了一个删除链表节点的函数,很多人都会采用类似的代码删除链表节点。/* 结构体定义 */struct testdata{ struct testdata * next; //指向链表下一个节点的指针 int id;};/* 链表头 */struct testd

2015-04-25 22:38:57 6122 2

原创 Linux内核模块的编写方法和技巧

内核模块可以在不重新编译内核的情况下添加到内核代码中运行,其可以动态加载和卸载,因此可以根据需要将内核某些功能独立出来作为模块,而不是编译到内核中,这样可以减少内核大小,并且可以按照实际需求选择裁剪或添加某些内核功能。1. 编写一个内核模块需要先强调一个最基本的知识,内核模块是要运行在内核态的代码,所以编写内核模块需要包含的头文件都是内核中的头文件,使用的函数都是内核的函数。编写一

2015-04-12 12:44:46 4371

转载 Linux Kernel Documentation kbuild modules

内核源码目录下的Documentation/kbuild/modules.txt文件,详细介绍了模块的编写和编译的方法技巧。In this document you will find information about:- how to build external modules- how to make your module use the kbuild infrastru

2015-04-12 12:41:17 1867

原创 linux内核中的likely()和unlikely()宏的作用

在看linux内核代码的时候,经常会看到likely(x)和unlikely(x)宏的使用。那这两个宏有什么作用呢?这两个宏在内核中的定义如下:# define likely(x) __builtin_expect(!!(x), 1)# define unlikely(x) __builtin_expect(!!(x), 0)可见这里使用了gcc的内建函数__builtin_exp

2015-04-10 00:16:17 19964

原创 gcc的__builtin_函数介绍

GCC提供了一系列的builtin函数,可以实现一些简单快捷的功能来方便程序编写,另外,很多builtin函数可用来优化编译结果。这些函数以“__builtin_”作为函数名前缀。很多C标准库函数都有与之对应的GCC builtin函数,例如strcpy()有对应的__builtin_strcpy()内建函数。下面就介绍一些builtin函数及其作用:__builtin

2015-04-08 23:02:19 48520 6

转载 linux下提示 -bash: ******* :command not found

原文地址:http://blog.csdn.net/chuanj1985/article/details/6873717如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么首先就要考虑root 的$PATH里是否已经包含了这些环境变量。主要是这四个:/bin ,/usr/bin,/sbin,

2015-04-04 23:49:41 15965

转载 vim显示行号、语法高亮、自动缩进的设置

原文地址:http://blog.csdn.net/chuanj1985/article/details/6873830在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc 在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc在Red Hat Linux 中vim的配置文件存放在/etc目录中,配置文件名为vimrc

2015-04-04 23:45:15 955

原创 Linux协议栈-netfilter(5)-iptables

iptables是用户态的配置工具,用于实现网络层的防火墙,用户可以通过iptables命令设置一系列的过滤规则,来截获特定的数据包并进行过滤或其他处理。iptables命令通过与内核中的netfilter交互来起作用。我们知道netfilter通过挂在每个hook点上的hook函数来过滤数据包,并且将过滤规则存放在几个表中供hook函数使用。相应的,iptables工具也定义了同样的几张规则

2015-04-04 22:36:15 5114

原创 Linux协议栈-netfilter(4)-期望连接

传统的conntrack和NAT处理只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令,在数据包载荷中需要包含地址信息,并且数据包如果需要做NAT,那应用层数据部分的地址也需

2015-04-04 22:18:18 5273

原创 Linux协议栈-netfilter(3)-NAT

本文对netfilter中NAT部分的源码进行分析,读者需要先对NAT的基本概念有一个大致了解。1. NAT模块的初始化NAT模块的初始化过程主要是初始化一些全局变量以及注册NAT相关的hook函数。在下面nf_nat_init()函数和nf_nat_standalone_init()函数的流程图中用红色标记了要初始化的全局数据结构。nf_nat_init()函数:nf_nat_standalon...

2015-04-04 18:45:22 3647 2

原创 Linux协议栈-netfilter(2)-conntrack

连接跟踪(conntrack)用来跟踪和记录一个连接的状态,它为经过协议栈的数据包记录状态,这为防火墙检测连接状态提供了参考,同时在数据包需要做NAT时也为转换工作提供便利。本文基于Linux内核2.6.31实现的conntrack进行源码分析。1. conntrack模块初始化1.1 conntrack模块入口conntrack模块的初始化主要就是为必要的全局数据结构进行初始化,代码流程如下:上...

2015-04-04 17:37:40 19685 2

原创 Linux协议栈-netfilter(1)-框架

1. netfilter框架Netfilter 是内核中进行数据包过滤,连接跟踪,地址转换等的主要实现框架。当我们希望过滤特定的数据包或者需要修改特定数据包的某些内容再发送出去,这些动作主要都在netfilter中完成。iptables工具就是用户空间和内核的Netfilter模块通信的手段,iptables命令提供很多选项来实现过滤数据包的各种操作,后面会讲到iptables命令如何

2015-04-04 14:52:30 16419 3

原创 中断下半部机制 - 软中断及tasklet

一个中断处理程序的一个或几个中断服务例程在执行结束之前,内核处于中断环境中,当前CPU不再响应同类型的中断,如果不允许中断嵌套,则CPU需要屏蔽掉所有中断。也就是说,一个CPU忙于服务于一个中断事件时,就不能处理其他中断,同时CPU不能执行其他进程,即不能被抢占,这种情况下,如果在中断服务例程中消耗的时间过多,就会对性能产生潜在的影响。一般情况下,一个中断事件所触发的动作可

2015-04-03 22:37:35 2810

原创 Linux的中断处理分析

MIPS中,中断被当作一种异常(第0号异常)来处理。中断由外部设备产生,可能发生在任何时刻,每个中断都有一个编号分配给一个外部设备,这样来区分不同设备产生的中断,如果硬件和内核支持共享中断,则可以由多个设备共享一个中断编号。        在CPU得知中断发生后,它将进一步的处理委托给一个软件例程,这个软件例程是体系结构相关的,然后根据中断号来识别中断源,并进入特定的中断处理程序来处理该中断。

2015-04-02 23:00:39 2380

转载 windows如何知道已经连接上Internet

原文地址:http://blog.superuser.com/2011/05/16/windows-7-network-awareness/

2015-03-30 22:27:37 2294

原创 diff/patch命令以及quilt工具的使用

quilt命令具有生成补丁和应用补丁的功能,但它的优势是还可以作为管理补丁的工具。一个比较大的项目可能由不同开发者共同维护,其中很多修改都以补丁的方式提供,这些补丁可能存在依赖关系。quilt工具在源代码目录中生成一个patches/目录,里面存放所有可用的补丁,记录了所有patches的先后顺序,并提供了一系列操作这些补丁的命令。quilt以栈的形式管理补丁,最先打上的补丁位于栈底,最后打上的补丁位于栈顶(top)。打patch的动作称为push,取消补丁的动作称为pop。

2015-03-09 23:02:55 12523

转载 Kernel编译和链接中的linker script语法详解

先要讲讲这个问题是怎么来的。(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么)。我在编译内核的时候,发现arch/arm/kernel目录下有一个这样的文件:vmlinux.lds.S。第一眼看上去,想想是不是汇编文件呢?打开一看,好像不是。那它是干嘛的?而且前面已经说过,make V=1的时候,发现这个文件的用处在ld命令中,即ld

2015-03-09 21:25:33 1903

原创 GCC的__attribute__ ((constructor))和__attribute__ ((destructor))

gcc允许为函数设置__attribute__ ((constructor))和__attribute__ ((destructor))两种属性,顾名思义,就是将被修饰的函数作为构造函数或析构函数。程序员可以通过类似下面的方式为函数设置这些属性: void funcBeforeMain() __attribute__ ((constructor)); void funcAfterMain() __attribute__ ((destructor));带有(constructor)属性的函数将在main

2015-03-08 22:21:24 6059

原创 backtrace函数的使用

backtrace()是glibc(>=2.1)提供的函数,用于跟踪函数的调用关系。以下对backtrace()函数的说明以及实例,都来自其man page。函数定义       #include        int backtrace(void **buffer, int size);       char **backtrace_symbols(void

2015-03-07 00:11:09 14607 1

空空如也

空空如也

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

TA关注的人

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