日期:2014-05-16  浏览次数:20702 次

100分,100分,linux ppp内核驱动
哪位兄弟,小弟有个问题不解,我在现在要编译linux-2.6.29下面drivers/net下的pppoe.ko,pppox.ko,这是ppp驱动

之前编译的pppoe.ko,pppox.ko能正常使用(就是make modules)

而后我觉得全部编译太久了,于是
make modules SUBDIRS=driver/net
也编译出来了pppoe.ko,pppox.ko,
但是pppox.ko,pppoe.ko变小了,也不能正常使用,求高手指点是什么原因呢?
dmesg 
 83.569987] kobject: 'pppoe' (ffffffffa02182f0): kobject_uevent_env
[ 83.570006] kobject: 'pppoe' (ffffffffa02182f0): fill_kobj_path: path = '/module/pppoe'
[ 83.576395] BUG: unable to handle kernel NULL pointer dereference at (null)
[ 83.576401] IP: [<ffffffffa0215a4f>] pppoe_init_net+0x1f/0x70 [pppoe]
[ 83.576406] PGD 36fbc067 PUD 1c39b067 PMD 0 
[ 83.576409] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
[ 83.576412] last sysfs file: /sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/uevent
[ 83.576415] CPU 0 

源码版本都是2.6.39啊
只不过第一次是通过make modules产生(等了两个小时)
第二次make modules SUBDIRS=driver/net产生
net下有pppoe.c,pppox.c
求支教什么原因呢?

------解决方案--------------------
是否跟其他模块有关联,看一下Kconfig跟Makefile
新旧的ko加载后lsmod对比下,是不是有其他模块也加载了。

慢编译慢,安装ccache,第一次编译后,以后编译就会相当快了。

------解决方案--------------------
2.6内核与2.4不同,
编译过程
1、首先会到内核源码目录下,读取顶层的Makefile文件,需要链接一个vermagic.o,其中包含目标内核版本信息、编译器版本信息、及一些配置变量的设置。模块版本号的确定
2、然后再返回模块源码所在目录。

modinfo drivers/net/pppox.ko
查看vermagic是否与`uname -r`一致?如果不一致说明没有连接vermagic.o
编译时,指定版本号,试试
make prepare
cp /boot/config-2.6.xx .config
make modules_prepare
make -C /lib/modules/`uname -r`/build SUBDIRS=drivers/net modules

不过你的dmesg给出的信息似乎并不是由两种不同的编译引起的,是引用 NULL 指针引起的。