Chinaunix

标题: 急切等待高手回答,非常的迫切 [打印本页]

作者: 古红亮    时间: 2010-11-26 11:13
标题: 急切等待高手回答,非常的迫切
我现在正在着手研究linux内核,所以是一个新手。
一切都是从零开始,我想在内核源码中添加一些printk,
然后调用测试程序,看看输出的日志。
但是日志没有输出来,我不知道是系统没有调用我修改后的模块还是什么原因?
我先说说具体情况。
我使用的是ubuntu10.4 linux内核是2.6.32-21 刚给他更新到2.6.36,这内核编译更新也让我花了不少时间。
我现在修改源码net部分下的tcp部分源码,也不是修改啦就是加一些printk日志。
但是make modules,make modules_install后,在调用我的测试程序,发现日志没有输出。
在/var/log/目录下grep也没有发现我需要的字符。有人说系统中如果klogd,和syslogd都在运行的话,那内核中的
所有日志都能输出,但是我发现并不是他们说的那样。
#cat /proc/sys/kernel/printk 输出是 4417,
好心的朋友推荐我改成6417,
我echo 6 > /proc/sys/kernel/printk 之后还是没有看到我想要的日志。
不过reboot之后发现 #cat /proc/sys/kernel/printk 仍然输出是 4417,
所以我不知道原因出在什么地方了,急切盼望高手帮小弟解决这个问题

高手帮忙解决,感激不尽。
作者: dreamice    时间: 2010-11-26 11:56
你是否能确认,你加的printk信息的代码能被执行到
作者: L_kernel    时间: 2010-11-26 12:20
对,printk添加的代码能否执行是一个问题。
作者: 古红亮    时间: 2010-11-26 12:48
我调用socket接口,走sys_socketcall接口是肯定的吧?
我在这个函数里面加了个printk都没有输出!!!!
这段代码在socket.c的2203行附近,难道有什么问题么???
期待高手
作者: 烟雾弹下的真实    时间: 2010-11-26 15:45
回复 4# 古红亮


    过程正确啊,你调用了listen吗?
作者: 古红亮    时间: 2010-11-26 16:12
回复  古红亮


    过程正确啊,你调用了listen吗?
烟雾弹下的真实 发表于 2010-11-26 15:45



    楼上感谢您的回复
这个sys_socketcall接口不是listen一个函数可以进来的
是socket
listen
shutdown等都可以进来的。
这几个接口我都掉了
user layer的程序一个client一个Server都连接成功了
但是printk都没有打出来
有人怀疑系统没有调用我新编译安装的模块,
那有没有办法保证系统一定调用我编译安装的模块呢?

我关键是想测试一下 shutdown 这个接口
函数里面写了,如果(!(how & 2))的话接口直接返回
我就是想通过日志确认一下.
以前一直以为shutdown 0, 1 都可以的,看代码才发现只有2才可以。
一直卡在这里了,郁闷,灰常的郁闷
作者: 论坛ID    时间: 2010-11-26 16:42
你用dmesg看下
作者: 烟雾弹下的真实    时间: 2010-11-26 17:02
回复 6# 古红亮


    在sys_listen里面能打印出来,但是在sys_socketcall中打不出,你在sys_shutdown函数里面操作吧。
作者: 古红亮    时间: 2010-11-26 17:49
回复  古红亮


    在sys_listen里面能打印出来,但是在sys_socketcall中打不出,你在sys_shutdown函数 ...
烟雾弹下的真实 发表于 2010-11-26 17:02

     哥哥 两个函数都在同一个文件中,怎么可能会一个函数中可以输出日志,一个不可以呢?,你给说说理由么?
    我也没看见类似#ifdef XXX #undef XX之类的语句
作者: 古红亮    时间: 2010-11-26 17:59
找到问题了
我修改了文件,
但是发现每次make modules(带上subdir一样)后 对应的.o根本就没有更新。
也就是根本就没有重新编译我修改的文件。

高手们 如何重新编译和安装内核子模块。
期待。。。。
作者: dreamice    时间: 2010-11-26 18:06
回复 8# 烟雾弹下的真实


    如果一个可以打印,一个不能打印,那说明你没打印这个的确没有被执行到
作者: 古红亮    时间: 2010-11-28 20:36
问题已经解决了
make modules, // 这个根本就没什么用于
真正要编译源码还是得make
我现在是把整个内核全部重新编译,后就好用了
日志也输出来了
不过这样要是以后每次修改内核都得重新编译一下整个内核源码太费时间了。
高手么 难道都是只看代码不动手测试么?
有没有单独模块的重新编译安装的方法。
比如说net这个子目录。
作者: Godbach    时间: 2010-11-29 12:34
如果你只是修改了某个文件的一部分代码,那么 make 一下就可以了,不用再执行 make modules 等等。

因为你修改的代码本身就是要编译到内核镜像中的,那么确实你每次修改之后就要需要重新编译。所以依赖你修改这个文件的代码,也要被重新编译。
作者: anhongkui    时间: 2010-11-29 13:10
网络那部分 不是以模块方式存在的吧? 默认应该是编译在内核中的
作者: 古红亮    时间: 2010-11-29 21:08
网络那部分 不是以模块方式存在的吧? 默认应该是编译在内核中的
anhongkui 发表于 2010-11-29 13:10

最新版本的内核是把tcp编译到内核当中去了。
我主观认为,他应当还是以module形式存在的吧?
否则如果开发相对tcp内核代码进行优化的话,还必须的编译整个内核代码?
这个效率是不是存在问题,而且移植的时候是不是也存在很多问题?
作者: 古红亮    时间: 2010-11-29 21:09
不过现在有点蛋疼的就是 我那个地方加了日志接口后,在开启syslogd和klogd
cpu利用率飙升。99%.
吓死人的。
作者: hritian    时间: 2010-11-29 21:23
把klogd停掉

自己去/proc/kmsg 里面采
作者: 古红亮    时间: 2010-11-30 22:17
把klogd停掉

自己去/proc/kmsg 里面采
hritian 发表于 2010-11-29 21:23



  晚上说法太多了
你说停klogd别人都说停syslogd
我查了半天也没有人说过个道道,如何停syslogd
所以我想请教一下如何停klogd.
感激不经




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2