=== ldm@ldm-TOP2:/usr/src$ uname -a Linux ldm-TOP2 2.6.38-10-generic-pae #46-Ubuntu SMP Tue Jun 28 16:54:49 UTC 2011 i686 i686 i386 GNU/Linux ldm@ldm-TOP2:/usr/src$ === sudo cp /boot/config-2.6.38-10-generic-pae /usr/src/linux-headers-2.6.38-10-generic-pae/ sudo cp /boot/config-2.6.38-10-generic-pae /usr/src/linux-headers-2.6.38-10/ cd /usr/src/linux-headers-2.6.38-10-generic-pae/ sudo make menuconfig 这时会报错,Install ncurses (ncurses-devel) and try again. sudo apt-get install libncurses*
sudo make menuconfig 首先内核中支持tap/tuns设备:
Device Drivers --->
Networking support --->
[M] Universal TUN/TAP device driver support
ldm@ldm-TOP2:/usr/src/linux-headers-2.6.38-10-generic-pae$ sudo make modules make modules 时会报告没有规则可以创建“kernel/bounds.s”需要的目标“kernel/bounds.c”。 停止。 sudo apt-get install linux-source-2.6.38 sudo tar xvf linux-source-2.6.38.tar.bz2 sudo make menuconfig sudo make modules 要编很长时间1.5-2 小时 最后出现错误。 ld: cannot find /ubuntu/omnibook/sections.lds: No such file or directory 可以参考 https://bugs.launchpad.net/ubuntu/ source/linux/ bug/505420 https://launchpadlibrarian.net/37672643/patch 修改一下PWD,再重新编译模块 然后就编译成功 sudo cp drivers/net/tun.ko /lib/modules/`uname -r`/kernel/drivers/net sudo depmod sudo modprobe tun 报错 FATAL: Error inserting tun (/lib/modules/2.6.38-10-generic-pae/kernel/drivers/net/tun.ko): Invalid module format 用dmsg,可以看到tun: no symbol version for module_layout 这应该是当前编译的版本(2.6.38)和内核版本(uname -r ==2.6.38-10-generic-pae)不一致。 解决办法参考 http://blank-dic.blog.163.com/blog/static/310186222011221112425351/
用类似于make -C /lib/modules/`uname -r`/build M=`pwd` modules的命令编了无数次也没搞定这个tun.ko,只好换个kernel了。 在apt-get install linux-source获得的源代码基础上,参考这篇文档。 https://help.ubuntu.com/community/Kernel/Compile 使用的命令大约为 sudo su - cp -vi /boot/config-`uname -r` .config make oldconfig make menuconfig (图形界面里似乎应该先把老的.config load进来,这步忘了做,不知到make oldconfig是否有同样的效果 选择上tun的模块) make-kpkg --initrd --append-to-version=-some-string-here kernel-image kernel-headers echo vesafb | sudo tee -a /etc/initramfs-tools/modules echo fbcon | sudo tee -a /etc/initramfs-tools/modules cd .. dpkg -i linux-image-2.6.38.7-some-string-here_2.6.38.7-some-string-here-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.38.7-some-string-here_2.6.38.7-some-string-here-10.00.Custom_i386.deb 这时我也要重启计算机了,上帝保佑我吧!
重启后,我的内核已经变成了 ldm@ldm-TOP2:~$ uname -r 2.6.38.7-some-string-here 安装tun.ko也很顺利 === ldm@ldm-TOP2:/lib/modules/2.6.38.7-some-string-here/kernel/drivers/net$ lsmod | grep tun ldm@ldm-TOP2:/lib/modules/2.6.38.7-some-string-here/kernel/drivers/net$ sudo modprobe tun [sudo] password for ldm: ldm@ldm-TOP2:/lib/modules/2.6.38.7-some-string-here/kernel/drivers/net$ lsmod | grep tun tun 21677 0 ldm@ldm-TOP2:/lib/modules/2.6.38.7-some-string-here/kernel/drivers/net$ ===