Linux
文章平均质量分 92
乱乱熊猫
这个作者很懒,什么都没留下…
展开
-
漫谈Linux内核哈希表(2)
对照前面介绍过的内核通知链、链表,本章我们将要介绍的哈希表的初始化和定义也是如出一辙的: 点击(此处)折叠或打开 定义并初始化一个名为name的哈希链表表头 #define HLIST_HEAD(name) struct hlist_head name = { .first = NULL原创 2016-07-24 11:00:49 · 1637 阅读 · 2 评论 -
一堂课玩转rpm包的制作
常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列,这里我们是以其软件包的格式来划分的,这两类系统分别提供了自己的软件包管理系统和相应的工具。类RedHat系统中软件包的后缀是rpm;类Debian系统中软件包的后缀是deb。另一方面,类RedHat系统提供了同名的rpm命令来安装、卸载、升级rpm软件包;类Debian系统同样提供了dpkg命令来对后缀是deb的软件原创 2016-07-24 10:59:51 · 1814 阅读 · 0 评论 -
实战X86寄存器
作为一个程序员,当白天和黑夜没有了界限,按照相对论的观点,这时候他就变成了一个“程序猿”。 ---------------佚名原创 2016-07-24 10:59:43 · 992 阅读 · 0 评论 -
寻访x86处理器“实模式”和“保护模式”的前世今生
还是把博文“CPU的内部架构和工作原理”里的这个表搬出来,祭奠那些不应该在岁月的洪荒中被淹埋的荣耀: 8086的诞生,标志着Intel 正式进入了x86时代,这是个多么具有纪念意义的日子:1978-6-8。同时,8086的诞生也是处理器内存寻址技术的第一次飞跃。 对于一根实际的、实实在在的、物理的、可看得见、摸得着的内存条而言,处理器把它当做8位一个原创 2016-07-24 10:59:32 · 696 阅读 · 0 评论 -
CPU的内部架构和工作原理
一直以来,总以为CPU内部真是如当年学习《计算机组成原理》时书上所介绍的那样,是各种逻辑门器件的组合。当看到纳米技术时就想,真的可以把那些器件做的那么小么?直到看了Intel CPU制作流程及AMD芯片的制作流程的介绍不禁感慨,原来科技是如此的发达。 本文我们以Intel为例对CPU的工作原理做简单介绍,仅仅是简单介绍,那么AMD,ARM,MIPS甚至PowerPC你应该会触类旁通才原创 2016-07-24 10:59:29 · 6515 阅读 · 0 评论 -
用户空间和内核空间通讯之【Netlink 下】
关于Netlink多播机制的用法 在上一篇博文中我们所遇到的情况都是用户空间作为消息进程的发起者,Netlink还支持内核作为消息的发送方的情况。这一般用于内核主动向用户空间报告一些内核状态,例如我们在用户空间看到的USB的热插拔事件的通告就是这样的应用。 先说一下我们的目标,内核线程每个一秒钟往一个多播组里发送一条消息,然后用户空间所以加入了该组的进程都原创 2016-07-24 10:59:10 · 668 阅读 · 0 评论 -
用户空间和内核空间通讯之【Netlink 中】
今天我们来动手演练一下Netlink的用法,看看它到底是如何实现用户-内核空间的数据通信的。我们依旧是在2.6.21的内核环境下进行开发。 在文件里包含了Netlink协议簇已经定义好的一些预定义协议: 点击(此处)折叠或打开#define NETLINK_ROUTE 0 /* Routing/device hook */#def原创 2016-07-24 10:59:08 · 766 阅读 · 0 评论 -
用户空间和内核空间通讯之【Netlink 上】
引言 Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接口的方式提供内核与用户空间的双向数据通信;随后,在2.1内核开发过程中,Alexey Kuznetsov将Netlink改写成一个更加灵活、且易于扩展的基于消息通信接口,并将其应用到高级路由子系统的基础框架里。自那时起,Netlink就成了Linux内核子系统和用户态的应用原创 2016-07-24 10:59:05 · 846 阅读 · 2 评论 -
用户空间和内核空间通讯之【proc文件系统】
今天我们介绍另一种用户内核空间通信的方法:proc文件系统。 proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失。proc文件系统最开始的设计主要是为满足内核向用户态进程报告其状态而设计,并没有为输入做规定和说明。随着发展,现在的proc文件系统已经演变成一个“用户-内核”空间半双工的通信方式了(虽然目前已经开始有点混乱了,但某些原创 2016-07-24 10:58:53 · 346 阅读 · 0 评论 -
用户空间和内核空间通讯之【系统调用】
现在,越来越多的应用程序需要编写内核和用户级代码的程序来一起协作完成具体的任务,而用户与空间和内核空间的通讯也就是一个不可回避的话题了。针对于需要和内核空间通信的具体应用而言,其开发模式和套路相对来说比较固定,主要概括起来有两大步骤: 第一步,编写内核服务程序利用内核空间提供的权限和服务来接收、缓存和处理数据;第二步,编写用户程序来和先前的内核服务程序进行交互。 具体来说,可以利用用户程序来配置内原创 2016-07-24 10:58:48 · 1061 阅读 · 0 评论 -
揭开网络编程常见API的面纱【下】
Linux网络编程数据收发的API流程分析 只要把数据在协议栈中的流动线路和脉络弄清楚了,关于协议栈的实现部分,理解起来就轻松多了。在网络编程章节的数据接收过程中,我们主要介绍过read()、recv()、recvfrom()还有一个recvmsg()没介绍到,今天我们就来看一下这几个API函数到底有什么差别。 数据接收 在接收数据的过程,主要分两个阶段:BOTTOM-HA原创 2016-07-24 10:58:43 · 281 阅读 · 0 评论 -
揭开网络编程常见API的面纱【上】
Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作。 1、socket(family,type,protocol) 当我们在开发网络应用程序时,使用该系统调用来创建一个套接字。该API所做的工作如下所示: 该系统调用主原创 2016-07-24 10:58:40 · 496 阅读 · 0 评论 -
Linux网络编程:原始套接字的魔力【续】
如何从链路层直接发送数据帧 本来以为这部分都弄完了,结果有朋友反映说看了半天还是没看到如何从链路层直接发送数据。因为上一篇里面提到的是从链路层“收发”数据,结果只“收”完,忘了“发”,实在抱歉,所以就有这篇续出来了。 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑定到本地一个接口上,然后该套接字就只接收从该接口收上来的对应的数据包。今天原创 2016-07-24 10:58:38 · 514 阅读 · 1 评论 -
Linux网络编程:原始套接字的魔力【下】
可以接收链路层MAC帧的原始套接字 前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收发。提醒一点,在用这种方式构造原始IP报文时,第三个参数protocol不能用IPPROTO_IP,这样会让系统疑惑,不知道该用什么协议来伺候你了。 今天我们介绍原始套接字的另原创 2016-07-24 10:58:35 · 735 阅读 · 0 评论 -
Linux网络编程:原始套接字的魔力【上】
基于原始套接字编程 在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证: 也就是说,对于TCP或UDP的程序开发,焦点在Data字段,我们没法直接对TCP或UDP头部字段进行赤裸裸的修改,当然还有IP头。换句话说,我们对它们头部操作的空间非常受限,只能使用它们已经开放给我们的诸如源、目的IP,原创 2016-07-24 10:58:32 · 742 阅读 · 0 评论 -
Segmentation fault到底是何方妖孽
前两天和阿彬扯淡的时候(注意不是扯蛋),他说自己一个礼拜解决了三个Core dump,华丽丽之极,让我对其敬仰、膜拜之情如滔滔之江水,绵绵不绝。今天我也来谈一下Linux环境下开发时经常遇到的“Segmetation fault”的一点点个人看法,也算是抛砖引玉了。 (备注:我的glibc版本是2.12,GCC版本4.4.6,内核版本2.6.32-279) Linux上开发时最恼火原创 2016-07-24 10:59:54 · 14660 阅读 · 0 评论 -
Segmetation fault你来的真不是时候
问题是这样的,今天一个简单的C程序,用gcc编译成汇编语言后,本来想在里面改点东西,结果运行时就报了“Segmetation fault”。它丫来的还真不是时候,刚好最近正好烦它呢,谁知自己倒送上门来了。OK,择日不如撞日,今儿就拿你开刀了。 源代码如下: 点击(此处)折叠或打开 /*littletrick.c*/原创 2016-07-24 10:59:57 · 1858 阅读 · 0 评论 -
漫谈Linux内核哈希表(1)
关于哈希表,在内核里设计两个很重要的数据结构: 哈希链表节点: 点击(此处)折叠或打开 /*Kernel Version : 3.4.x [include/linux/types.h]*/ struct hlist_node {原创 2016-07-24 11:00:46 · 2397 阅读 · 1 评论 -
刨一刨内核container_of()的设计精髓
新年第一帖,总得拿出点干货才行,虽然这篇水分还是有点大,大家可以晒干了温水冲服。这段时间一直在整理内核学习的基础知识点,期间又碰到了container_of()这个宏,当然还包括一个叫做offsetof()的家伙。在这两个宏定义里都出现将“零”地址强转成目标结构体类型,然后再访问其成员属性的情形。如果有童鞋看过我之前的博文《Segmentation fault到底是何方妖孽》的话,估计此时心里会犯原创 2016-07-24 11:00:44 · 1456 阅读 · 1 评论 -
Linux内核【链表】整理笔记(2)
关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比较常用的几个内核API接口,其入参全都是清一色的struct list_head{}类型。至于链表的遍历,内核也有一组基本的接口(其实都是宏定义的)供开发者调用。 首先是list_for_each(pos,head),参数pos是需要开发者在外部提供的一个临时struct list_he原创 2016-07-24 11:00:41 · 971 阅读 · 3 评论 -
Linux内核【链表】整理笔记(1)
我们都知道Linux内核里的双向链表和学校里教给我们的那种数据结构还是些不一样。Linux采用了一种更通用的设计,将链表以及其相关操作函数从数据本身进行剥离,这样我们在使用链表的时候就不用自己去实现诸如节点的插入、删除、遍历等操作了。当然,Linux也是从2.1.x内核开始才对链表进行了这样的统一,和我们目前看到的样子几乎差不多: 点击(此处)折叠或打开原创 2016-07-24 11:00:38 · 626 阅读 · 1 评论 -
Linux 内核通知链随笔【中】
关于内核通知链不像Netlink那样,既可以用于内核与用户空间的通信,还能用于内核不同子系统之间的通信,通知链只能用于内核不同子系统之间的通信。那么内核通知链到底是怎么工作的?我们如何才能用好通知链?内核源代码里随处可见的通知链身影,我们到底该如何理解呢?本片博文过后,您的这些疑问和顾虑将统统消除。 以前有个女神,超凡脱俗、出水芙蓉,不过在怎么滴也是人,是人就会有各种各样的需求,女神原创 2016-07-24 11:00:35 · 1032 阅读 · 0 评论 -
关于openssl几个API的一点小收获
今天心血来潮突然想搞搞openssl了,趁着端午小假,刚好有空可以鼓捣孤岛自己喜欢的东西,出去东奔西跑的实在太造孽了,还是宅起来给自己充充电吧。下载openssl最新代码1.0.1g,修复了“心血漏洞”那个版本。编译安装那些小儿科的东西就不再浪费笔墨了,如果出现头文件或者库文件之类的错误,请在本人博客里寻找相关文章,应该主要集中在动态库那几篇博文。反正我在自己虚拟机里安装的时候是妥妥滴。原创 2016-07-24 11:00:33 · 1763 阅读 · 0 评论 -
从新版本系统调用学习宏定义的用法
这段时间又碰到系统调用这个家伙,结果在我当前用的3.0.x内核里全变样了。为了将这个问题弄明白,还得自己动手才行,这里非常感谢CSDN的"海风林影"兄弟提供的博文和相关参考文献,还是那句话“成果和荣耀归于前辈”。 很多人也都发现,在2.6.28及其之后的内核源码里,系统调用的写法发生了比较大的变化,出现了大量宏定义的代码。在源代码里,以前的诸如open()系统调用的sys_open()原创 2016-07-24 11:00:22 · 1157 阅读 · 0 评论 -
多媒体技术基础之---色彩空间
上一篇博文里,我们已经了解到图像是如何数字化的,但是关于数字图像的存储和显示问题还没提到,但在了解数字图像的存储和显示之前,我们先得弄明白数字图像里一个让很多人迷糊的概念:色彩空间。有的技术文献里也将其表述为颜色模型、颜色空间等,说的都是同一个东西。 关于色彩空间,我们最熟悉的就是RGB了,即数字图像的每个像素点用3字节表示,每个字节分别表示该像素点红、绿和蓝色的分量原创 2016-07-24 11:00:19 · 862 阅读 · 0 评论 -
多媒体技术基础之---图像
2012年11月13日,83岁的柯达公司退休工程师布赖斯·拜尔(Bryce Bayer)离开了这个世界,永远离开了我们,离开了爱戴他的人们,而他在数字图像领域的杰出成就不应该就这样被淹没在历史的洪流里,所以,谨以2014年第一篇博文献给伟大的布赖斯·拜尔先生。 图像的历史 根据维基百科的记载,世界上的第一张照片是法国人约瑟夫·尼塞福尔·涅普斯于1826年拍摄完成。182原创 2016-07-24 11:00:16 · 1641 阅读 · 0 评论 -
谈谈Linux下动态库查找路径的问题
学习到了一个阶段之后,就需要不断的总结、沉淀、清零,然后才能继续“上路”。回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里那真叫一个难受。那时候脑袋里曾经也犯过嘀咕,为啥Linux不弄成windows那样呢,装个软件那个麻烦不说,连运行软件都这么恼火呢?如果那样的话就不叫Linux了。借用小米公司CEO雷军一句话:小米,为发烧而生。我认为:原创 2016-07-24 11:00:11 · 1167 阅读 · 0 评论 -
CentOS6.4完全安装FFmpeg手记
鼓捣媒体的人对FFmpeg应该不会陌生,它不仅功能强大,结构优美,灵活、易扩展,也是很其他多媒体播放器的基础,例如VLC,Mplayer等等,还有好多商业播放器都用了ffmpeg,但这些商业软件却没有遵守GPL公约,所以它们都被钉在了ffmpeg官网的“耻辱柱”上。关于ffmpeg还有一点题外话,那就是有一个叫做libav的开源项目。libav是从ffmpeg分化出来的一个项目,而这个项目诞生的原原创 2016-07-24 11:00:08 · 2121 阅读 · 0 评论 -
多媒体技术基础之---Come on!来点儿音乐吧
其实要说在Linux系统下播放音乐,确实是一件让人非常抓狂的事情,抛开各种音频格式的商业授权不说,即使提供给你相应的解码库,能玩儿得转的人那又是少之又少。可能有些盆友说ubuntu这方面确实做得不错,一旦默认安装好,几乎不用装任何其他东西,常见的是音频文件都可以正常播放了。因为我天生就有股喜欢折腾的劲儿,所以关于ubuntu确实不怎么感冒,只能说萝卜白菜各有所爱吧。今天我们以wav文件(也就是上一原创 2016-07-24 11:00:06 · 782 阅读 · 0 评论 -
多媒体技术基础之---重新认识声音
声音一个最基本的常识就是“它是一种能量”,初中物理课上我们也学过声音的三要素分别是音色、音调和响度。 音色:简单理解,就是一种声音的固有特征。比如,电子琴和小提琴发出的声音是有明显区别的,笛子和古筝也有各自的声音特征。有些声音模仿秀的选手可以通过训练,达到模仿不同人或者不同乐器的效果。 音调:也就是我们所说的频率,单位是赫兹Hz,频率越高听起来越刺耳、越尖锐,频率越低听起来越低沉原创 2016-07-24 11:00:03 · 1103 阅读 · 0 评论 -
深入理解C语言的函数调用过程
本文主要从进程栈空间的层面复习一下C语言中函数调用的具体过程,以加深对一些基础知识的理解。 先看一个最简单的程序: 点击(此处)折叠或打开 /*test.c*/ #include stdio.h>原创 2016-07-24 11:00:00 · 2282 阅读 · 0 评论 -
Linux网络编程:基于UDP的程序开发回顾篇
基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多。对比面向连接的TCP程序,服务端少了listen和accept函数。前面我们也说过listen函数最主要的作用就是将一个socket套接字描述符转为被动监听模式,然后调用accept主要是用于等待客户端(用c原创 2016-07-24 10:58:30 · 337 阅读 · 0 评论 -
Linux网络编程:基于TCP的程序开发回顾篇
面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有。可随着时间的推移,你会觉得这样子的开发毫无激情。为什么TCP的开发就要按照这样的流程来呢?而且一般出的问题几乎都不在这几个系统调用上,原因何在?当我们弄清网络开发的本质,协议栈的设计原理、原创 2016-07-24 10:58:27 · 288 阅读 · 0 评论 -
(二)洞悉linux下的Netfilter&iptables:内核中的ip_tables小觑
<span lang="EN-US" style="font-size:10.5pt;mso-bidi-font-size:11.0pt;font-family:" calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:="" 宋体;mso-fareast-theme-font:minor-原创 2016-07-24 10:57:33 · 497 阅读 · 0 评论 -
(一)洞悉linux下的Netfilter&iptables:什么是Netfilter?
本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之怕生熟了。趁有时间,好好把这方面的东西总结一番。一来是给自己做个沉淀,二来也欢迎这方面比较牛的前辈给小弟予以指点,共同学习,共同进步。 能在CU上混的人绝非等闲之辈。因此,小弟这里说明一下:本系列博文主要侧重于分析Netfilter的实现机制,原理和设计思想层面的东西,同时从用户态的iptables到内核原创 2016-07-24 10:57:30 · 914 阅读 · 1 评论 -
C++多态性机制初探
作为面向对象编程的四大特征(抽象、封装、继承和多态)之一的多态性,是考察开发人员对面向对象的基础掌握程度的有力知识点。面试中也经常被问到像这样的问题:请简述一下什么是多态?C++多态的实现机制是什么?等等之类。今天我们就来小谈一下C++的多态机制。 首先,我们先开宗明义:在C++中,多态性通过虚函数 (virtual function) 来实现。 那么什么又是虚函数呢?有些文章又说:虚原创 2016-07-24 10:57:27 · 277 阅读 · 0 评论 -
[原创]通过SSH登录Linux服务器很慢,且服务器提示Access Denied时的解决方案
最近Linux服务器不知道为什么,每次通过putty登录时,当输入用户名过后,要卡很久才会提示我输入密码;有时候在密码提示输入符出来之前屏幕会打印一个“Access Denied”的提示信息。很是郁闷,今天终于在网上找到了解决方案,和大家分享一下:解决方案如下:1、在/etc/ssh/sshd_config 中添加一项: UseDNS no如果每次当输入用户名时弹出Access Denied,原创 2016-07-24 10:57:24 · 3434 阅读 · 0 评论 -
[原创]CentOS6.0系统下安装配置openCV成功
开源界的图形图像处理项目openCV无疑是优秀的东西,无论对于专业的开发人员或是业余爱好者都非常具有魔力。网上很多教程都是VS2008下配置的,而我自打和VC6.0绝交后就再没怎么碰过Windows的相关开发平台了。本文是在CentOS6.0下OpenCV的安装配置手册,前段时间非了老半天劲儿,熬了N个不眠之夜,最终把所有问题均搞定了,最后运行出结果那一瞬间,那种心情是无法用语言形容的。今儿特此把原创 2016-07-24 10:57:06 · 437 阅读 · 0 评论 -
Writing Loadable Kernel Modules using netfilter hooks (in-depth HOWTO) – Part 1
http://fcns.eu/2010/02/netfilter-hooks/keyword:write new netfilter moduleNote: This article was inspired by the lack of updated documentation on how to write proper netfilter kernel modules. At the ti原创 2016-07-24 10:57:03 · 571 阅读 · 0 评论 -
Linux 网络协议栈纲要
Linux网络核心架构 Linux的网络架构从上往下可以分为三层,分别是 : 用户空间的应用层。 内核空间的网络协议栈层。 物理硬件层。 其中最重要最核心的当然是内核空间的协议栈层了。Linux网络协议栈结构 Linux的整个网络协议栈都构建与Linux Kernel中,整个栈也是严格原创 2016-07-24 10:57:00 · 541 阅读 · 0 评论