您的位置:首页 > 运维架构 > Linux

Linux V3.10 内核的变化…

2017-02-18 14:58 411 查看
把一个在3.8内核运行的内核模块源码放到3.10内核编译失败,编译显示在kernel 3.8 下调用的
create_proc_entry() 函数未定义。总结一下这个内核模块源码在3.10与3.8编译通过的区别。1. create_proc_entry() 函数

1
static
 
inline
 
struct
 
proc_dir_entry
*create_proc_entry(
const
 
char
 
*name,
2
                
umode_t
mode, 
struct
 
proc_dir_entry
*parent)
3.8 内核有这个API,3.10 内核没有3.10 可以使用:proc_create() 函数

1
static
 
inline
 
struct
 
proc_dir_entry
*proc_create(
const
 
char
 
*name,
umode_t mode,
2
    
struct
 
proc_dir_entry
*parent,
3
    
const
 
struct
 
file_operations
*proc_fops)
这个函数在 3.8与 3.10 内核都有。

比较可以看出 proc_create() 比create_proc_entry() 多了一个file_operations参数

调用create_proc_entry()代码:

1
ipf_stats = create_proc_entry(
"stats"
,
0, proc_ipf);
2
if
 
(ipf_stats)
3
{
4
    
ipf_stats->proc_fops
= &stats_file_ops;
5
}
使用proc_create() 代码:

1
ipf_stats = proc_create(
"stats"
,
0, proc_ipf, &stats_file_ops);
2. struct proc_dir_entry 变化3.10内核去掉了:write_proc_t *write_proc
函数指针。那么如何实现相同功能的写函数呢?答案是通过proc_create()最后一个参数。

1
static
 
struct
 
file_operations
cmd_file_ops = {
2
    
.write
= ipf_cmd_write,
3
};
1
ipf_cmd = proc_create(
"cmd"
,
S_IFREG | S_IRUGO | S_IWUSR, proc_ipf,
&cmd_file_ops);
ipf_cmd_write 是自定义的写函数,其内容可以自己实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: