2014年12月10日

What is martian source / martian packets

摘要: Martian source / Martian packetsIn Linux, by default, packets are considered individually for routing purposes. Thus, all the routing algorithm determ... 阅读全文

posted @ 2014-12-10 17:09 SuperKing 阅读(2289) 评论(0) 推荐(0) 编辑

2014年3月13日

学习kernel编程的建议

摘要: 我把我学习kernel编程的过程介绍给大家,希望大家有个参考。学习kernel编程需要阅读大量的kernel方面的书籍,在此我列举一下我读过的kernel书籍(按时间先后顺序),并给一些建议。1. LDDv3(Linux Device Driver Program)linux设备驱动编程2. Linux内核情景分析,上,下3. ULK(Understanding Linux Kernel)v2, v34. Linux 0.11内核完全注释5. ULN(Understanding Linux Networking)以上是我阅读过的算是大部头的Linux Kernel编程方面的书籍。当然如果你刚开 阅读全文

posted @ 2014-03-13 17:38 SuperKing 阅读(531) 评论(0) 推荐(0) 编辑

2014年2月24日

oprofile使用方法

摘要: 安装oprofile,然后加载内核模块。#modprobe oprofile,模块加载后开始使用oprofile。1. 首先设置监视内核,使用debuginfo提供的内核,/boot下面的内核无法使用#opcontrol --vmlinux=/usr/lib/debug/boot/vmlinux-xxxxx如果不需要监视内核#opcontrol --no-vmlinux2. 启动oprofile#opcontrol --start3. 运行被监视的应用# program run4. dump监视数据#opcontrol --dump5. 关闭 oprofile#opcontrol --shut 阅读全文

posted @ 2014-02-24 10:01 SuperKing 阅读(808) 评论(0) 推荐(0) 编辑

2013年9月6日

发现啦

摘要: 终于找到个可以把代码插入到博客的博客啦,真不错。以前都是写在google docs上,现在可好了。如果你想学习kernel编程,希望可以帮助你,但是要记住代码需要慢慢的啃,先了解概念在阅读会更好理解一些。打开kernel代码,看你需要的部分,同时打开我写的内核阅读注释(如果写的不好请见谅),enjo... 阅读全文

posted @ 2013-09-06 11:31 SuperKing 阅读(213) 评论(0) 推荐(0) 编辑

2013年9月2日

virsh console使用方法

摘要: How to use virsh consolevirsh 是libvirt 开源函数库中的一个命令行工具,用来在命令行下通过libvirt发布管理虚拟机的各种命令,现在介绍一下其中一个命令的使用方法。命令:#virsh console首先在虚拟机(kvm技术)中的linux操作系统执行如下操作步骤:1. add below to inittabecho "T0:123:respawn:/sbin/agetty -L ttyS0 9600 vt100" >> /etc/inittab2. add ttyS0 to securettyecho "ttyS 阅读全文

posted @ 2013-09-02 13:53 SuperKing 阅读(4555) 评论(0) 推荐(0) 编辑

绕过kernel模块版本校验检测

摘要: kernel module version check bypass1、 举例说明2、 内核是怎么实现的3、 怎样去突破4、 总结1、 举例说明Linux内核版本很多,升级很快,2个小内核版本中内核函数的定义可能都不一样,为了确保不一致的驱动程序导致kernel oops, 开发者加入了模块验证机制。它在加载内核模块的时候对模块进行校验, 如果模块与主机的一些环境不一致,就会加载不成功。看下面一个例子,它简单的输出当期系统中的模块列表:-------------------------------------------------------------------#include #inc 阅读全文

posted @ 2013-09-02 13:42 SuperKing 阅读(4274) 评论(1) 推荐(0) 编辑

Linux 启动参数介绍

摘要: Linux 启动参数介绍取自2.6.18 kernelDocumentation/i386/boot.txt 文件中介绍vga=这里的不是一个整数(在C语言表示法中,应是十进制,八进制或者十六进制其中之一),就是“normal”(0xFFFF),“ext”(0xFFFE),“ask”(0xFFFD)中的一个。这个值应被填入vid_mode(视频模式控制)域,因为他会在命令行被解析前被内核使用。mem=是用C语言表示法定义的整形,后面可以追加(大小写不敏感的)K,M,G,T,P或者E(代表,...如果启用了irq_balance则将列出的中断号标记为已经被PCI子系统使用,可用于屏蔽某些中断。a 阅读全文

posted @ 2013-09-02 13:37 SuperKing 阅读(2544) 评论(0) 推荐(0) 编辑

proc 文件系统调节参数介绍

摘要: /proc/net/*snmp文件Ip: ip项Forwarding : 是否开启ip_forward,1开启,2关闭DefaultTTL : IP默认ttl.InReceives : IP协议处理的数据包.InHdrErrors : IP头错误而丢弃的数据包.InAddrErrors : IP地址... 阅读全文

posted @ 2013-09-02 13:32 SuperKing 阅读(9155) 评论(1) 推荐(0) 编辑

free 命令解释

摘要: free 命令 buffers and cached 解释N多人总是询问,当在linux在输入free时内存总数怎么加起来不一样啊,下面我来解释一下free命令的输出。我们运行free命令时都会看到如下的信息:#freetotal used free shared buffers cachedMem: 1025236 1002324 22912 0 26900 228140-/+ buffers/cache: 747284 277952Swap: ... 阅读全文

posted @ 2013-09-02 11:51 SuperKing 阅读(1071) 评论(0) 推荐(0) 编辑

硬中断的完整处理过程

摘要: 一个硬中断的完整处理过程★ CPU做的工作:CPU收到中断/异常信号;CPU判断当前CPL级别如果等于3,则导致堆栈切换3->0,堆栈切换过程:a. CPU从当前TR指向的TSS中读取SS0和ESP0;b. CPU将当前的【SS:ESP】寄存器内容临时保存起来,假设为SSt和ESPt;c. CPU将SS0和ESP0恢复到【SS:ESP】寄存器中;d. CPU将临时保存的SSt和ESPt压入当前的堆栈【SS:ESP】中(其实就是SS0和ESP0指向的堆栈);CPU判断当前CPL级别如果等于0,则不会有2中的步骤;CPU将EFLAGS、CS、EIP依次压入当前的堆栈【SS:ESP】中;如果当 阅读全文

posted @ 2013-09-02 11:46 SuperKing 阅读(3794) 评论(0) 推荐(0) 编辑

Linux IP 路由实现

摘要: 以下代码取自 kernel 2.6.24.[数据结构]该结构被基于路由表的classifier使用,用于跟踪与一个标签(tag)相关联的路由流量的统计信息,该统计信息中包含字节数和报文数两类信息。这个结构包含一个counters数组,每个处理器有256个元素。*大小为256是因为路由标签的取值范围为0到255。IPv4中是由ip_rt_init接口为该向量分配空间,IPv6中没有为该向量分配空间。ip_rt_acct结构中的四个字段是在ip_rcv_finish接口中更新。struct ip_rt_acct {};路由表hash项struct rt_hash_bucket { struc... 阅读全文

posted @ 2013-09-02 11:05 SuperKing 阅读(5234) 评论(0) 推荐(0) 编辑

2013年8月30日

Linux内存初始化

摘要: start_kernel -> setup_arch 在这个函数中我们主要看这几个函数.machine_specific_memory_setupmax_low_pfn = setup_memory();paging_initzone_sizes_init然后我们还要看build_all_zonelists();mem_init();//处理内存图,最后保存在e820中char * __init machine_specific_memory_setup(void){ ...... who = "BIOS-e820"; // #define E820_MAP_NR ( 阅读全文

posted @ 2013-08-30 11:46 SuperKing 阅读(1762) 评论(0) 推荐(0) 编辑

linux PCI设备初始化过程

摘要: linux PCI设备初始化过程start_kernel->rest_init 这个函数会启动一个核心线程0, 核心线程然后调用init -> do_basic_setup.然后我们开始看下面的过程void __init driver_init(void){ devices_init(); buses_init(); classes_init(); ...... platform_bus_init(); system_bus_init(); ......}//在drivers/base/core.cint __init devices_init... 阅读全文

posted @ 2013-08-30 11:35 SuperKing 阅读(3962) 评论(0) 推荐(0) 编辑

Linux网络地址转换分析

摘要: Linux网络地址转换分析地址转换用来改变源/目的端口,是netfilter的一部分,也是通过hook点上注册相应的结构来工作.Nat注册的hook点和conntrack相同,只是优先级不同,数据包进入netfilter之后先经过conntrack,再经过nat.而在数据包离开netfilter之前先经过nat,再经过conntrack.在ip_conntrack结构中有为nat定义的一个nat结构,为什么把这个结构放在ip_conntrack里呢。简单的说,对于非初始化连接的数据包,即后续的数据包,一旦确定它属于某个连接,则可以直接利用连接状态里的nat信息来进行地址转换;而对于初始数据包, 阅读全文

posted @ 2013-08-30 10:40 SuperKing 阅读(1454) 评论(0) 推荐(0) 编辑

Linux内核中流量控制

摘要: linux内核中提供了流量控制的相关处理功能,相关代码在net/sched目录下;而应用层上的控制是通过iproute2软件包中的tc来实现,tc和sched的关系就好象iptables和netfilter的关系一样,一个是用户层接口,一个是具体实现.流控包括几个部分: 流控算法, 通常在net/sched/sch_*.c中实现, 缺省的是FIFO, 是比较典型的黑盒模式, 对外只看到入队和出对两个操作;流控结构的操作处理; 和用户空间的控制接口, 是通过rtnetlink实现的。以下内核代码版本为2.6.24.[数据结构]流控处理对外表现是一个黑盒,外部只能看到数据入队和出队,但内部队列是如 阅读全文

posted @ 2013-08-30 10:28 SuperKing 阅读(5082) 评论(0) 推荐(0) 编辑

IPSEC实现

摘要: IPSEC介绍与实现一、介绍IPSec 协议不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构,包括网络认证协议 Authentication Header(AH)、封装安全载荷协议Encapsulating Security Payload(ESP)、密钥管理协议Internet Key Exchange (IKE)和用于网络认证及加密的一些算法等。IPSec 规定了如何在对等层之间选择安全协议、确定安全算法和密钥交换,向上提供了访问控制、数据源认证、数据加密等网络安全服务。1、安全特性IPSec的安全特性主要有:·不可否认性 "不可否认性" 阅读全文

posted @ 2013-08-30 10:05 SuperKing 阅读(6372) 评论(0) 推荐(0) 编辑

ip_conntrack 实现

摘要: 启动时首先在ip_conntrack_standalone.c中调用static int __init ip_conntrack_standalone_init(void) //proc相关部分省略{ ...... int ret = 0; ret = ip_conntrack_init(); //大部分初始化工作 if (ret (1024 * 1024 * 1024 / PAGE_SIZE)) //内存大于1G ip_conntrack_htable_size = 8192; if (ip_conntrack_htable_si... 阅读全文

posted @ 2013-08-30 09:49 SuperKing 阅读(1942) 评论(0) 推荐(0) 编辑

2013年8月28日

module_init宏解析

摘要: 在init.h中我们看到#define module_init(x) __initcall(x);还看到#define __initcall(fn) device_initcall(fn)还有#define __define_initcall(level,fn) \ static initcall_t __initcall_##fn __attribute_used__ \__attribute__((__section__(".initcall" level ".init"))) = fn__define_initcall 作用宏定义__define_ 阅读全文

posted @ 2013-08-28 11:11 SuperKing 阅读(738) 评论(0) 推荐(0) 编辑

IP隧道基础研究

摘要: static char banner[] __initdata = KERN_INFO "IPv4 over IPv4 tunneling driver\n";static struct xfrm_tunnel ipip_handler = { .handler = ipip_rcv, //看下面接收处理函数实现 .err_handler = ipip_err, .priority = 1,};static int __init ipip_init(void) // net/ipv4/ipip.c{ i... 阅读全文

posted @ 2013-08-28 11:07 SuperKing 阅读(983) 评论(0) 推荐(1) 编辑

IPV6介绍

摘要: IPV6介绍下面这个介绍肯定是我从哪里看来的,然后做了些修改,具体从哪看来的真记不住了,所以我无法写出引用自哪的,非常抱歉。看ipv6实现前一定要先看此篇内容,ipv6的原理介绍。定义 IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。 IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。 目前的全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议,是... 阅读全文

posted @ 2013-08-28 11:00 SuperKing 阅读(2589) 评论(0) 推荐(0) 编辑

导航