
kernel
文章平均质量分 80
sahusoft
Coding4Fun
展开
-
LFS、BLFS、ALFS、HLFS的区别
Linux From Scratch (LFS) 及其后代代表一种新方法,向用户揭示 Linux 操作系统是如何工作的。LFS 基于这样的假设,即一部分一部分地编译完整的操作系统不仅能够揭示操作系统是如何工作的,也允许独立的操作人员为速度、内存占用或安全性而构建系统。许多作家已经编写了有关 UNIX 风格的书籍,深入研究了调度、内存管理、多进程和线程、文件系统,以及用户与内核之间的交互。写作 Li原创 2013-05-14 19:19:59 · 2675 阅读 · 0 评论 -
使用 /proc 文件系统来访问 Linux 内核的内容
参见:http://www.ibm.com/developerworks/cn/linux/l-proc.html使用 /proc 文件系统来访问 Linux 内核的内容这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口文档选项<trv转载 2010-03-16 15:19:00 · 926 阅读 · 0 评论 -
Linux Kernel Linked List Explained
参见:http://isis.poly.edu/kulesh/stuff/src/klist/Introduction:Linux kernel is mostly written in the C language. Unlike many other languages C does not havea good collection of data structures转载 2010-03-13 15:30:00 · 1588 阅读 · 0 评论 -
Linux Kernel Module编程,多个源文件编译成一个模块的解决方案
陆陆续续也写了几个Linux内核模块了,但每次都是把代码写在一个源文件中,上次尝试了写在两个.c文件中,结果没有编译通过。无奈之下,将其中一个.c文件重命名成.h文件,再include当另一个当中。但是,在.h文件中写函数的实现总感觉怪怪的。今天查看了以下Kbuild的文档,有如下描述: If a kernel module is built from several sou原创 2010-03-11 01:51:00 · 4690 阅读 · 1 评论 -
我的负载均衡模块:simpLB
2010年03月01日 星期一 13时30分44秒 捣鼓了好几天,终于做出了一个负载均衡模块的雏形:simpLB。具体功能就是把发送到LoadBalaner上数据包“无条件”调度到Server_1上。目前经测试,可以支持ICMP(ping)、UDP,但是如果是TCP包,当前只支持80端口的应用(Http)。下面要作的是 把所用到ip_vs.h中的两个函数自定义一下,以“解耦合”; 支持TCP协议的原创 2010-03-05 14:06:00 · 1247 阅读 · 0 评论 -
openSuSE中的内核模块编程
2010年02月23日 星期二 16时13分12秒 近几日一直在openSuSE上做内核模块编程。以前在fedora上写过一些例子,比较顺手。刚接触openSuSE,走了一些弯路,记录下来。1、在安装openSuSE时,我在“开发”选择了“Linux内核开发”。所以,有了当前内核的源代码,和内核开发的一些文档。如果一开始没有选择,则要下载和当前内核版本一致的内核源代码(或者可以选择其他版本的源代原创 2010-03-05 13:50:00 · 1648 阅读 · 0 评论 -
我的负载均衡模块:simpLB_3_0
2010年03月02日 星期二 15时55分20秒 在simpLB_2_6的基础上,加入了连接跟踪机制。现在可以用TCP协议的应用测试了 。依然存在的缺陷:用于连接跟踪的定时器1、simpLB.c/*简单的轮询调度算法,添加了连接跟踪,可测试HTTP,但不稳定*//*用于连接跟踪的定时器,还不能释放超时连接*/#include #include /* for t原创 2010-03-05 14:09:00 · 1534 阅读 · 0 评论 -
Linux2.6内核Netfilter的简单例子、八(simpNat)
在openSuSE上搭建好实验环境之后,继续内核模块的实验。这次做的是一个简单的网络地址转换(NAT)。在负载均衡器(LB)上,将目的地址是192.168.99.102的数据包(skb)的目的地址改为192.168.99.101。没有做连接跟踪、没有将192.168.99.101返回的原地址改成192.168.99.102,一切从简!只能拿ping做实验。1、源代码:simpNat.c#inc原创 2010-03-05 13:48:00 · 2652 阅读 · 0 评论 -
我的负载均衡模块:simpLB_2_6
2010年03月01日 星期一 19时57分02秒 在simpLB的基础上已加入了简单的轮询调度算法,因没有加入连接跟踪机制,目前只能用ping命令测试。 1、simpLB.c/*简单的轮询调度算法,因没有连接跟踪,目前只能用ping测试*/#include #include /* for tcphdr */#include #include原创 2010-03-05 14:08:00 · 5136 阅读 · 0 评论 -
Linux2.6内核Netfilter的简单例子、七(netMonitor)
2010年02月26日 星期五 17时48分02秒 升级whoVisit的功能,监视5个hook点的网络信息,以便调试我的其他netfilter模块。1、netMonitor.c#include #include /* for tcphdr */#include #include /* for csum_tcpudp_ma原创 2010-03-05 13:36:00 · 2303 阅读 · 0 评论 -
我的负载均衡模块:simpLB_3_2
2010年03月03日 星期三 10时02分56秒 取得一个阶段性成果,该版本的simpLB可以完全实现“轮询调度” 。连接管理中加入了超时机制,如果timeout时间内某个连接上没有数据包则删除该连接。HTTP完美测试!SSH测试存在一些问题:首先,调度的目的服务器可能和本地存储的known_hosts冲突,Clinet端删除~/.ssh/known_hosts中相应条目或删除该文件以解决; 其原创 2010-03-05 14:10:00 · 1313 阅读 · 0 评论 -
OpenSUSE11.2下的Linux Kernel Development包
1、cscope2、diffstat3、git-core4、git-email5、gitk6、indent7、kernel-docs8、kernel-source9、kernel-syms10、patchutils11、patterns-opensuse-devel_kernel12、quit有空的话逐一了解一下,貌似挺有用的。原创 2010-01-16 19:07:00 · 1226 阅读 · 0 评论 -
sk_buffer 详细分析 (下)
6. Sk_buffer 的秘密当调用 alloc_skb() 构造 SKB 和 data buffer时,需要的 buffer 大小是这样计算的: data = kmalloc(size + sizeof(struct skb_shared_info), gfp_mask); 除了指定的 size 以外,还包括一个 struct skb_shared_info 结构的空转载 2009-09-13 11:19:00 · 2321 阅读 · 0 评论 -
sk_buffer 详细分析(上)
1. 定义Packet: 通过网卡收发的报文,包括链路层、网络层、传输层的协议头和携带的数据Data Buffer:用于存储 packet 的内存空间SKB: struct sk_buffer 的简写2. 概述Struct sk_buffer 是 linux TCP/IP stack 中,用于管理Data Buff转载 2009-09-13 11:18:00 · 3612 阅读 · 0 评论 -
2.6.30内核Netfilter的简单例子、六(filterPort)
这篇文章分析一下如何利用Netfilter过滤指定的端口,如TCP的80端口。1、源代码:filterPort.c#include #include #include #include #include #include #include #include MODULE_LICENSE("GPL");/* This is the structure we shall use to re原创 2009-09-12 11:10:00 · 1901 阅读 · 0 评论 -
grsecurity 总结
GRSecurity 为ACL系统提供了内核模块的支持,另外,在用户空间,还需要有gradm这个工具。ACL是 Access Control List的简写,支持ACL的系统可以对系统及系统文件,系统资源进行细力度的访问控制。GRSecurity 还没有集成到linux内核中,如原创 2011-10-13 22:48:14 · 4405 阅读 · 0 评论 -
浅谈MAC、MII、PHY
以太网(Ethernet)是一种计算机局域网组网技术,该技术基于IEEE制定的IEEE 802.3标准,它规定了包括物理层的连线、电信号和介质访问层协议的内容。以太网是当前应用最普遍的局域网技术。它很大程度上取代了其他局域网标准,如令牌环、FDDI和ARCNET。历经100M以太网在上世纪末的飞速发展后,目前千兆以太网甚至10G以太网正在国际组织和领导企业的推动下不断拓展应用范围。基于以太网的应用转载 2011-10-26 22:00:48 · 2145 阅读 · 0 评论 -
对netlink无法检测到dellink事件和探测网卡是否插网线方法的简单分析
看了一下相关的实现,总结一下,有不对的请各位指正。我看的source是kernel 2.6.27,ifplugd-0.28。问题1:为啥用netlink检测网线插拔只能得到RTM_NEWLINK?问题2:如何能检测到网卡插拔的信息。netlink实现主要是在在net/netlink/af_netlink.c下面,但是rtnetlink.c在net/core下面。还有一个netlin原创 2011-10-26 22:56:42 · 6447 阅读 · 1 评论 -
IPv4、TCP和UDP的校验和计算
分组头的校验和(checksum)算法是16位累加和后的反码,TCP和UDP数据报头也使用相同的校验算法,但参与运算的数据与IP分组头不一样。IPv4分组头的结构如下所示:0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 01 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-原创 2009-09-23 16:16:00 · 7368 阅读 · 2 评论 -
编译最小内核
最小的Linux系统制作过程详解一,什么是BabyLinux 二,为什么要做这样一个linux 三,什么人适合读这篇文档 四,应该具备的知识 五,linux系统引导过程简介 六,编译内核 七,编译busybox 八,制作根文件系统 九,制作ramdisk映象文件 十,内核与busybox的整合 十一,安装测试和内容调整 十二,baby原创 2011-03-12 16:40:00 · 3253 阅读 · 0 评论 -
Linux内核简介、版本号与发布历史
一.Linux内核简介 Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,这里有一份Linus Torvalds当时在Usenet新闻组comp.os.minix所登载的贴子,这份著名的贴子标原创 2011-01-12 07:31:00 · 2740 阅读 · 2 评论 -
教你修改以及重构skb
测试环境: CentOS5.3 2.6.18工具: sendip和wireshark sendip可以发送各种数据包,确实方便.wireshark图形化的显示对于分析整个数据包还是相当不错的... 一:内核态基于Netfilter构造数据包主要有两种方式:1. alloc_skb申请一个skb结构体,然后根据实际的应用填充不同的成员,或者基于当前数据原创 2011-07-13 22:13:32 · 2773 阅读 · 0 评论 -
Tasklet机制
一、tasklet使用Tasklet的使用比较简单,只需要定义tasklet及其处理函数并将两者关联例子:Void my_tasklet_func(unsigned long)DECLARE_TASKLET(my_tasklet.my_tasklet_func,data)代码DECLARE_TASKLET实现了定义名称为my_tasklet的tasklet并将其与my_task原创 2011-10-27 21:54:16 · 3372 阅读 · 0 评论 -
Linux 系统内核空间与用户空间通信的实现与分析
多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 Linux 内核态无法对传统的 Linux 进程间同步和通信的方法提供足够的支持。本文总结并比较了几种内核态与用户态进程通信的实现方法,并推荐使用 netlink 套接字实现中断环境与用户态进程通信。1 引言Linux 是一个源码开放的操作系统,无论是普通用户还是企业用户都可以编写自己的内核代码,再加上对标准内核的裁剪从而制原创 2012-02-28 21:12:52 · 975 阅读 · 0 评论 -
Linux HPET Support
Linux HPET SupportIA-PC HPET (High Precision Event Timer) is a specification which was jointly developed by Intel and Microsoft in the early part of this decade.. The latest version is dated Oct原创 2012-08-14 23:04:21 · 14627 阅读 · 0 评论 -
Linux Kernel中list解读
Sam之前看2.4kernel时,常看到List.也仔细看了一下,但现在长期没有看kernel,没有写程序,已经忘记了很多。今天又看一看并记录下来。 LinuxKernel中,常常需要使用双向链表。在~/include/linux/list.h中,就定义了双向链表和常用的function. 链表头如下:struct list_head { struct list_head原创 2010-03-12 01:50:00 · 5469 阅读 · 2 评论 -
Linux内核里的延时API
7.3. 延后执行设备驱动常常需要延后一段时间执行一个特定片段的代码, 常常允许硬件完成某个任务. 在这一节我们涉及许多不同的技术来获得延后. 每种情况的环境决定了使用哪种技术最好; 我们全都仔细检查它们, 并且指出每一个的长处和缺点.一件要考虑的重要的事情是你需要的延时如何与时钟嘀哒比较, 考虑到 HZ 的跨各种平台的范围. 那种可靠地比时钟嘀哒长并且不会受损于它的粗粒度的延时, 可以利原创 2010-11-29 09:37:00 · 2044 阅读 · 0 评论 -
linux icotl函数解析
ioctl函数: 网络程序(一般是服务器程序)中ioctl常用于在程序启动时获得主机上所有接口的信息: 接口的地址、接口是否支持广播、是否支持多播等等。#include or #include int ioctl(int fd, int request, …/*void *arg */); 返回:成功返回0,出错返回-1;下表列出了网络相关ioctl 请求的r原创 2011-10-26 22:09:43 · 1741 阅读 · 0 评论 -
IP、TCP校验和
在网上看了半天,没看明白,现在总算明白了。下面是一条最简单的指令,没有数据45 0 0 34 4D C5 40 0 72 6 20 E1 D3 93 4 CC C0 A8 1 16 4E 23 6 8F 36 CA 45 A3 EC 73 CB FB 80 10 1E E8 D0 2A 0 0 1 1 8 A 15 F AC FE 0 0 A1 EF第一行是IP包头,原创 2009-09-23 20:44:00 · 4748 阅读 · 3 评论 -
Linux内核的加密函数框架
Linux内核支持很多加密算法,包括对称加密算法,如AES;摘要算法,如sha1,md5;压缩算法,如deflate。不过内核好像不支持非对称加密算法。这些算法作为加密函数框架的最底层,提供加密和解密的实际操作。这些函数可以在内核crypto文件夹下,相应的文件中找到。不过内核模块不能直接调用这些函数,因为它们并没有export。内核提供一个统一的框架,来管理这些算法。加密算法通过crypto_r原创 2011-10-13 21:05:46 · 4022 阅读 · 0 评论 -
XFRM Programming
Linux IPsec overviewIPsec is a group of protocols used on top of IP for the purpose of authentication, encryption and secure exchange of encryption keys. These three activities correspond to three d原创 2013-04-19 23:15:40 · 7439 阅读 · 0 评论 -
Openswan系列教程1:安装并尝试
<!--@page {margin:2cm}h2 {margin-bottom:0.21cm}h2.western {font-family:"Liberation Sans",sans-serif; font-size:14pt; font-style:italic}h2.cjk {font-family:"Droid Sans Fallback";原创 2013-01-08 22:55:36 · 5239 阅读 · 0 评论 -
2.6.30内核Netfilter的简单例子、五(filterProtocol)
如名字所示,这个例子是过滤指定协议的数据包,如TCP数据包。国际惯例,贴上代码:1、源代码:filterProtocol.c#include #include #include #include #include #include #include #include MODULE_LICENSE("GPL");/* This is the structure we shall use原创 2009-09-12 00:39:00 · 1799 阅读 · 0 评论 -
2.6.30内核Netfilter的简单例子、四(filterIp)
将革命进行到底,再来一个netfilter例子,这次是过滤指定IP地址的数据包。1、源代码:filterIp.c#include #include #include #include #include #include #include MODULE_LICENSE("GPL");/* This is the structure we shall use to register our原创 2009-09-11 19:16:00 · 2376 阅读 · 2 评论 -
sk_buff结构详解
struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。 这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。L4向L3传递前会添加一个L4的头部,同样,L3向L2传递转载 2009-09-11 00:45:00 · 1614 阅读 · 0 评论 -
2.6内核源码netfilter中NF_INET_PRE_ROUTING跟NF_IP_PRE_ROUTING啥关系?
认真看头文件,头文件上面有说明。两者的值是一样的。NF_IP_*和NF_IP6_*都不能用在新的内核,内核/内核模块要用NF_INET_*。我记得没错的话,这种转变是从2.6.25的内核开始,当时还没有NF_INET_*,全部都用NF_IP系列的。现在,NF_IP_*只是为了兼容用户程序而保留的,一般应该用NF_INET_*。你可以理解成变量换了个名字。 我知道转载 2009-09-10 17:18:00 · 3364 阅读 · 0 评论 -
使用 /proc 文件系统来访问 Linux 内核的内容
这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口文档选项打印本页将此页作为电子邮件发送样例代码级别: 初级M. T转载 2009-04-04 21:33:00 · 850 阅读 · 0 评论 -
IPVS代码阅读笔记(三):调度算法
调度算法就是,当新连接到来时,负载均衡器如何选择真实服务器的一种算法。它是负载均衡器的重要组成部分。IPVS中实现的负载均衡算法主要有轮询-rr、加权轮询-wrr、最少连接-lc、加权最少连接-wlc。1、ip_vs_scheduler结构/* * The scheduler object */struct ip_vs_scheduler { struct转载 2009-03-27 15:00:00 · 1699 阅读 · 0 评论 -
modprobe加载自定义模块
将mymodule.ko文件拷贝到/lib/modules/`uname -r`/kernel/下面, 运行depmod -amodprobe mymoduleOK!原创 2009-03-27 10:59:00 · 1679 阅读 · 0 评论 -
Linux如何在系统启动时自动加载模块
下面是以前学习Linux时写的,后来仔细研究rc.sysinit后发现,只需要修改下列地方就可以了,不必这么麻烦的:rc.sysinit中有这样的一段代码:# Load other user-defined modulesfor file in /etc/sysconfig/modules/*.modules ; do[ -x $file ] && $filedone#转载 2009-03-27 10:32:00 · 1043 阅读 · 0 评论