- 博客(18)
- 资源 (4)
- 收藏
- 关注
原创 从罗马帝国精英军团/秦帝国军制谈iOS/Android
<br />下文有时将iPhone/iPad成为iX<br />如今,iPhone/iPad和Android如火如荼,看着这一现象,没什么好让人惊讶的,阿诺德·汤因比曾经说,任何历史都是当代史,既然是个等价代换,那么也可以说,当代史同时在任何时间段都有体现!在谈论移动终端市场的两强相争之前,我想先说说罗马帝国和秦帝国。<br /> 实际上,很多好奇的中国人都希望这两个帝国打上一仗,当然是想让秦胜利,然而祖籍非陕西的人就不会觉得自己是被侵略的吗?一般不会的,这是因为秦帝国在各方面统一了标准
2011-05-29 14:31:00 8525 2
原创 linux内核中符号地址的获取
<br />有些内核函数或者内核变量是不导出的,但是确实需要用,那该怎么办?因此寻找内核符号地址就有必要进行一下总结,更有甚,如果想找一条特定的指令,比如movl的指令地址,那更需要投入一些精力!总的来说,我总结了下面五种方式:<br />1.通过procfs中的kallsym文件或者System.map文件直接查找<br />这种方式借助于文件,依赖于文件的存在,不需要什么编程能力,只要会在文件中查找信息即可<br />2.google一下<br />这种方式借助于互联网,依赖你对信息的筛
2011-05-29 13:40:00 4636
原创 杀死linux的僵尸进程
linux并不把进程的树形结构导出给普通用户,然而在内核中,它却使用树形结构来管理进程。linux内核使用“子进程退出,父进程收尸,父进程退出,子进程被过继”这种方式来管理进程的死亡,然而却少了一种,那就是父进程不给子进程收尸的情况,这就是僵尸进程的原因。 既然知道了僵尸进程为何产生,那么想干掉它们就简单了。记住:任何没有人为因素的纯技术问题都是可以解决的!如何操作呢?很简单,就三步:1.将僵尸进程从树形进程组织中摘除;2.将僵尸进程过继给一个特定的进程;3.该特定进程调用wai
2011-05-28 16:24:00 6531 1
原创 多种方法获取sys_call_table(linux系统调用表)的地址
<br />一.方法一:常用方式,也是一google一堆的方式<br />我们首先需要找到call table-with-offset的特征,先看下面的代码<br />syscall_call:<br /> call *sys_call_table(,%eax,4)<br />假设我们没有vmlinux可供gdb反汇编,那也只有采用模拟的方式了,模拟出一个call *sys_call_table(,%eax,4),然后看其机器码,然后在system_call的附近基于这个特征进行寻找
2011-05-28 14:06:00 17283
原创 linux内核hack-运行中动态添加系统调用
LINUX中每次添加一个系统调用都要完成重新编译内核,然后制作initrd等工作,不得不说这是一件繁重的工作,很多人本来已经构思好了自己的一个系统调用,要添加到内核,然后却被这些工作所中断,毫不夸张的说,制作initrd就很麻烦,虽然基于cpio的initrd可以利用几条命令完成,然而只要有一个错误,你就不得不重启系统。 我们都知道,内核模块运行在内核态,可以访问所有的内存空间,那么能不能在系统运行期间,不用重新编译内核,而运用内核模块机制实现添加系统调用呢?答案是肯定的,因为一个基本原理:内核
2011-05-25 23:10:00 7277 1
原创 傅立叶变换的实质-正交之美
引:最近在搞一个音频解码器,将随意录制好的声音按照不同的频率分离出不同的音频流,然后推到不同的音箱中,如果再考虑一下音场的谐性,那就是一个N.1声道的解码系统了。我只是想在女儿(或者儿子)出生之前为她做点事情,以便能最终做出个东西送给她(或者他)。 在实践的过程中,遇到了傅里叶变换,作文以记之。最终我会导出一个很常用的变换-傅里叶变换参考:信号:信号是一个很广义的概念,它可以是一种波,也可以是一个阵列,它还可以是一个函数,它甚至是整个世界,总之只要能运载信息,它就可以被称为信
2011-05-21 22:47:00 15777 6
原创 linux内核模块的强制删除-结束rmmod这类disk sleep进程
一.问题:前些日子在工作中遇到一个文件,当rmmod一个模块的时候,在模块的exit函数中阻塞了,rmmod进程杀也杀不掉,永远呆在那里,发现它已经是D(disk sleep)状态了,真的无能为力了吗?我不相信这个事实,所以今天在稍微闲暇的时候换换脑子,终于有了解决办法。二.分析:解铃还须系铃人,既然是在内核中出了问题,还是需要在内核中寻找办法,解决这类问题的前提是对内核卸载模块的精确理解,流程都理解透了,害怕找不到原因吗?原因都找到了,办法肯定是有的!(这也是我从公司学习到的最重要的东西!),
2011-05-18 22:52:00 14703 2
原创 netlink机制-总结
<br />1.为何我认为netlink要比procfs和sysfs更好?<br />答曰:基于文件系统的方案好处在于文件系统是“设置即所见”,缺点也正在于这种所见即所得的特性,由于文件系统的管理目前是基于用户的,就算为sysfs/procfs设置了了内核访问策略,这种策略也会复杂的让人望而却步!管理员A希望为内核增加1000个配置,她使用了sysfs,管理员B希望在sysfs中查一个信息,他ls了一下,这要比xxx --help好用很多,然而“我的天啊,1000多个个文件,哪个是我想要的啊!?”,
2011-05-18 22:44:00 8893
原创 netlink机制-实现系统调用
<br />上篇文章《linux的配置接口-netlink原理和设计》展示了netlink如何完成kill系统调用,然而这个例子不足以说明netlink的强大,如果我不实现一个netlink式的系统调用,很多人是不会信服的,本文就展示一个netlink实现的read调用。<br /> 在展示代码之前,我还是要不厌其烦的说一下netlink的优点,总的来说,netlink有以下三个优点:<br />1.netlink便于提供统一的入口,它的作用类似于socketcall。<br />2.net
2011-05-17 22:02:00 7944
原创 linux的配置接口-netlink原理和设计
<br />站在雨里泪水在眼底....<br />linux内核是可配置的,配置的方式有好多种呢!对于linux平台上上的开发者和管理员来讲,这几种配置方式可困扰了不少人儿。这里的配置不是指运行中的内核动态的配置,而是指当有新的设备或者内核特性添加进内核的时候,用户需要进行的配置。本文主要列举三种配置方式,最终落实于netlink方式的配置。<br />1.传统方式<br />传统方式一般认为是使用ioctl或者系统调用的方式,如果使用ioctl,当我们为设备驱动或者内核本身增加一个新的配置
2011-05-16 23:01:00 11266 2
原创 今天照了大肚照
今天陪老婆去照了大肚照,本来累了一周了好不容易盼到周六想睡个懒觉,结果比平时起床还早!要去照相!然而一想到俺家小小,我就很激动,为了俺家小小,我一定加倍努力,做一个好爸爸。 照相的人比较多,都是婚纱照,心里想着说不定明年他们一对对的就也要来照大肚照了,哈哈!...我们的运气总是这么好,上次照婚纱照时是店里的摄影总监给我们照的,而且那天很凉快,照相的人也不多,今天那个总监出去拍外景了,剩下一个长发男人,眼睛挺小,但是很有艺术感,照的很不错。 最近由于缺乏运行和过度喝啤酒,肚子有点大,我
2011-05-14 22:51:00 4924
原创 码分多址(CDMA)的本质-正交之美
引子:CDMA是个很重要的通信概念,很多的大学教科书上都会提到它,甚至我们今天可能都在使用它。然而提到cdma,很少有资料提到它的思想是多么的有创意,教科书上关于cdma的章节都过于复杂,过于数学化,虽然也有一些简便的描述方式,但是却几乎没有资料揭示cdma是多么的简单,实际上它比其他很多的概念都要更简单。 如果仅仅希望理解诸如cdma的概念而不得不去学习一大堆数学是很悲哀的事情!如果最终你费了九牛二虎之力把数学推理过程搞明白了,你对数学本身的理解将超过你对cdma的理解,本来数学仅仅是
2011-05-14 22:26:00 89777 75
原创 从《黑客和画家》中证实的观点
<br />曾经写过一篇《多级指针和链表》中描述了数组和链表其实是一回事,数组只是链表的一种链表具有一般性,数组仅仅是一种优化。字符串类型其实是字符数组的一种优化。实际上,数组也好,字符串也好,在语言的语义上都不应该存在,链表可以表示他们,数组只是链表的一种特殊情况,所有元素所在内存相邻而已,字符串又是一种数组,因此它也是一种链表。事实上,在编程语言的层次上,语言的语义并不明白内存的布局,因此设计数组这种数据结构本身就是不合理的。<br /> 最近在地铁上,看了《黑客和画家》这本书,证实了上面的
2011-05-10 22:08:00 4191 3
原创 LVrrp的设计过程-基于链路的vrrp
<br />引:<br />近期工作上安排我做一个双链路热备系统,沿着这个轨迹,从vrrp开始,我设计了一个LVrrp的协议,它完全适用于非交叉非全互联的多链路热备和负载均衡的情况,所谓的非交叉和非全互联指的是链路两端是固定的,并且任意两条链路之间在两端不存在交叉情况。<br /> 事后得知,有时候不是我们不想做某件事,而是因为我们做不好!事后还得知,其实RSVP的设计过程不过如此。还有一个收获,诸如ospf协议并不能解决所有的问题,有的时候,在特定的环境,自己设计一个协议解决问题要比使用标
2011-05-10 21:56:00 4414
原创 动物和计算机-自组织是悬空的钢丝
<br />0.任何时候,零和游戏都是富有刺激性和挑战性的,然而零和游戏是危险的,不仅仅对于失败者,因为失败者会萎缩到无,而此时胜利者也没有存在的意义,因此零和本身并不是稳态!<br />1.任何运行中的可对刺激进行反应的物体都需要两个前提,一个是能量持续供给,另一个是反射机制。这是由物理学定律左右的,任何人都无法更改。 <br />2.动物本身的能量来自食物,然而却是通过心脏这个泵供给到全身各个细胞,其大脑来控制反射。我们看到,心脏在不断的心跳中运输能量,同时,我们可以把心脏的周期跳动也看做反射之一,
2011-05-07 17:54:00 3981 1
原创 凌晨有点想法
<br />1.DMA的性能<br />DMA性能高吗?如果DMA仅仅是使用芯片传输数据,那么它和cpu相比,优势在哪呢?芯片的能力很可能没有cpu强,加上外设芯片还要占据总线等,问题不在这里,问题在于DMA的优势在于外设芯片dma策略的设计,很多dma设计了DMA环形描述符,外设芯片根据环形描述符的引导,使用流水线技术完成数据的传输。<br /> 注意,环形描述符是流水线得以实现的本质原因,因为一个环形的描述符(使用环形的原因在于复位简单和索引简单)可以引导多个存储器域的地址区间,因此如果
2011-05-02 00:24:00 3839 2
原创 操作系统内核子系统的协调工作
<br />第一部分、内务子系统<br />操作系统内核的管理功能以及执行最终也要归于cpu的执行流,因此最简单的设计就是将内核的内务也设计成进程,但是对于一些特别的内务这个办法就不适用了,因为这些内务的特殊性恰恰在于它们是依赖cpu的,或者说是和cpu进行接口的。如果我们把计算机视为一台人类发明的智能的机器,那么很自然的,类似上帝造人那样,我们会把计算机设计成人的模样,计算机应该有心跳和反射。<br /> 到底什么是内核的内务呢?其实举个例子就明白了。餐厅是顾客吃饭的地方,然而餐厅服务
2011-05-02 00:11:00 4457 1
一个iptables的stateless NAT模块实现
2014-12-27
模块化的nf-HiPAC
2014-11-21
关于linux内核以及其他个人体会的文集
2009-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人