1.从已经打好补丁的机器上下载linux-2.6.28内核,与linux-3.4.35内核对照,做相应的修改。之前修改补丁之后编译内核一直未通过是因为没有修改3,原因在于我一开始source insight建立的工程只有内核下的net\,我天真的以为只需要修改net下的代码就够了。后来把整个内核代码都塞进去了后才看到还有另外一处调用的地方。修改内核最大的问题是修改之后每次编译都要20分钟左右,然后错误提示信息不够详细。
2.Sysctl_net_ipv4.c(net\ipv4)定义了新的结构后,需要对成员data进行定义和声明
{
//.ctl_name = NET_TCP_RTO_MIN,
.procname = "tcp_rto_min",
.data = &sysctl_tcp_rto_min,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec
},
3.Tcp.h(include\net) extern int sysctl_tcp_rto_min;
4.Tcp_input.c(net\ipv4) int sysctl_tcp_rto_min __read_mostly = TCP_RTO_MIN;
EXPORT_SYMBOL(sysctl_tcp_rto_min);
5.sysctl.h(include\linux) NET_TCP_RTO_MIN=126, 这个不是必要的,因为3.4.35在static struct ctl_table ipv4_table[]{}中定义成员结构的时候都没有.ctl_name
注:proc_handle:指针,指向对data成员实际进行读取和写入操作的一个函数;它在通过/proc文件系统读写数据时被使用。以这种方法,任何类型的数据都可以通过data来进行指向,而且proc_handler函数会正确的处理对它的工作。data:一个指向与此表项关联的数据的指针。它通常指向一个int或者一个char。