LINUX内核编程
siasjack
分享!热情!积极!希望能和技术网友共同进步....
展开
-
一个参考实现 netfilter中注册钩子函数
在netfilter中注册钩子函数即可,一个参考实现 #include #include #include #include #include #include #include #include #include #include #include #include #原创 2012-04-24 12:06:54 · 3880 阅读 · 0 评论 -
linux C判断内核版本号
当设备驱动需要同时支持不同版本内核时,在编译阶段,内核模块需要知道当前使用的内核源码的版本,从而使用相应的内核 API。 头文件 linux/version.h : **LINUX_VERSION_CODE 内核版本的二进制表示,主、从、修订版本号各对应一个字节; KERNEL_VERSION(major, minor, release) - 由主、从、修订版本号构造二进制版本号。** 在原创 2015-09-02 17:49:25 · 12081 阅读 · 0 评论 -
linux内核中的__read_mostly变量
linux内核中的__read_mostly变量 内核版本:2.6.14在阅读socket源码的时候,有如下一句(net/socket.c):[plain] static struct vfsmount *sock_mnt __read_mostly; 感觉__read_mostly很奇怪,就深入分析了一下。__read_mostly原语将转载 2015-03-12 10:39:35 · 1933 阅读 · 0 评论 -
linux scsi sd设备文件名的生成
scsi sd设备的设备文件名,如sda等,是在sd驱动加载时自动生成的。他在生成设备文件时,有一套文件名的生成规则。具体生成算法总的来说就是首先向系统申请一个ida,也就是唯一id。然后把id映射成设备文件名sdxxx。在设备释放时,该ida会被释放,以便以后使用。由于ida是由系统维护的全局量,所以可以保证生成的设备名的唯一性。具体生成是在scsi sd设备被探测到后,调用sd_probe转载 2014-11-13 20:39:07 · 3043 阅读 · 0 评论 -
linux下netlink详解
Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUTE),1-wire 子系统(NETLINK_W1),用户态 socket 协议(NETLINK_USERSOCK),防火转载 2014-09-16 10:42:39 · 2980 阅读 · 0 评论 -
warning: function declaration isn’t a prototype的解决方法
今天写内核态程序遇见个问题,在一个很简单的函数上编译时提示了这个警告warning: function declaration isn’t a prototype百度了下,有人说是参数传参的问题,在内核态不应该是空的,应该加上voidint flashid_check()改为int flashid_check(void)这样就可以解决了!看样子内核态程序要比原创 2014-03-14 15:10:10 · 2218 阅读 · 0 评论 -
linux内核中常用函数API
转载自:http://blog.chinaunix.net/uid-20321537-id-1966892.html当编写驱动程序时,一般情况下不能使用C标准库的函数。Linux内核也提供了与标准库函数功能相同的一些函数,但二者还是稍有差别。 类别函数名功能函数形成参数描述字符串转换转载 2014-03-14 13:57:04 · 4542 阅读 · 0 评论 -
netfilter内核态与用户态 通信 之 sockopt
用户态与内核态交互通信的方法不止一种,sockopt是比较方便的一个,写法也简单.缺点就是使用 copy_from_user()/copy_to_user()完成内核和用户的通信, 效率其实不高, 多用在传递控制 选项 信息,不适合做大量的数据传输用户态函数:发送:int setsockopt ( int sockfd, int proto, int cmd, void *da原创 2013-03-06 14:40:28 · 5053 阅读 · 0 评论 -
netlink socket 用户态和内核态的通信
原文地址:http://blog.csdn.net/lovekatherine/article/details/1539267Why and How to Use Netlink Socket作者:Kevin He,2005-01-05原文地址:http://www.linuxjournal.com/article/7356 译者:Love. Katherine,2007-转载 2012-06-26 17:04:05 · 11143 阅读 · 0 评论 -
struct--iphdr -- IP头部
sk_buff->iphdr/usr/src/linux-2.6.19/include/linux/ip.hstruct iphdr {#if defined(__LITTLE_ENDIAN_BITFIELD)__u8 ihl:4,version:4;#elif defined (__BIG_ENDIAN_BITFIELD)__u8 version:4,ih转载 2012-12-24 16:01:50 · 1322 阅读 · 0 评论 -
jiffies溢出与时间先后比较-time_after,time_before
注:本文并非原创,我只是在原来的基础上稍微修改了点东西,原网址:http://decimal.blog.51cto.com/1484476/410673,但是想让更多的朋友们看到这篇文章,所以用了原创,很不错的!1. 概述在Linux内核中,TCP/IP协议栈在很多用到时间比较的地方都使用了jiffies?本文介绍了什么是jiffies,jiffies溢出可能造成的问题,使用time_af原创 2012-11-13 10:00:02 · 22205 阅读 · 5 评论 -
谈EXPORT_SYMBOL使用
谈EXPORT_SYMBOL使用EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义转载 2012-09-05 16:51:33 · 1065 阅读 · 0 评论 -
大端小端转换,le32_to_cpu 和cpu_to_le32
大端小端转换,le32_to_cpu 和cpu_to_le32 字节序http://oss.org.cn/kernel-book/ldd3/ch11s04.html 小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在乎它操作的数据的字节序.原创 2012-08-16 11:58:32 · 29820 阅读 · 0 评论 -
in_aton和in4_pton的内核编程用法
in_aton和in4_pton用法http://biancheng.dnbcw.info/linux/303366.html#includelinux/netfilter.h>#include linux/netfilter_ipv4.h>#include#include#include#include#include#define err(msg)pri转载 2012-04-26 17:35:03 · 6165 阅读 · 0 评论 -
sk_buff详解
1.sk_buff sk_buff是linux内核TCP/IP协议栈最重要的结构,它是网络数据报在内核中的表现形式。sk_buff的定义在$KERN_DIR/incude/linux/skbuff.h中。 1.1 sk_buff最重要的几个成员: 1.sk_buff sk_buff是linux内核TCP/IP协议栈最重要的结构,它是网络数据报在内核中的表现形式。sk_buf原创 2012-04-24 10:50:30 · 12131 阅读 · 1 评论 -
Linux spinlock_t
Linux spinlock_t我的经验: 如果出现死锁的情况,检查:1. lock 和 unlock是否成对出现了,检查所有的程序分支。2.是否有同时需要2个和2个以上的锁的情况,避免掉这种情况。3.如果在timer等软中断中出现死锁,可能是没有使用spin_lock_bh这一类的锁。reference: http://www.chinaitpower.原创 2012-04-24 12:04:31 · 2554 阅读 · 0 评论