入手了一本《驱动开发入门与实战》 貌似书版有点老了 还在用2.6的稳定内核,这里也秉承了韦东山老师的经典语句:越老的学到的就更多,现在还不太懂驱动开发所以跟着书本走了,中间肯定会遇到这样或者那样的问题,精力去解决就好了,其实本人的英语也比较烂。要求还是尽量的看懂打印的提示就好吧,别的废话就不多说了,希望对驱动开发的同僚有所帮助。
环境: ubuntu 14 ,这里干净的一丝不挂,新安装的系统 gcc-4.8
内核包下载 http://www.kernel.org/pub/linux/kernel/
这里我选择 2.6.34.1的版本
1. sudo mkdir /linux-2.6.34.1
2.下载好的内核包(网址给了自己找找) 拷贝到新建文件夹并解压到创建文件夹tar jxvf /linux-2.6.34
3.cd linux-2.6.34.1/ 进入解压的源码包目录执行菜单选项 sudo make menuconfig
4.什么都不做然后保存退出
这里可能有一些小插曲 出现menuconfig的报错 一般是库的安装不完整 或者gcc的版本不匹配
menuconfig的界面库安装:
sudo apt-get install build-essential
sudo apt-get install libncurses5
sudo apt-get install libncurses5-dev
对应版本gcc编译时会有提示 参考gcc的切换参考博客: http://blog.csdn.net/d5224/article/details/52261529
5.sudo make 开始编译 这里等大概几分钟,出现 "elf_x86"&“-m”的错误解决办法:
这个问题是由于 gcc 4.8 不再支持 linker-style 架构。将arch/x86/vdso/Makefile中以
"-m elf_x86_64" 替换为 "-m64"。
"-m elf_x86" 替换为 "-m32"。
错误 drivers/net/igbvf/igbvf.h:129:15: error: duplicate member ‘page’
struct page *page;
解决办法:
查看README 发现的需求为 3.2版本的gcc 现已不适用
sudo vim drivers/net/igbvf/igbvf.h 错误文件 命令模式下找到 ?struct page *page 注释掉
5.sudo make modules 编译内核模块结果如下:
6.sudo make modules_install
7.sudo make install 安装内核完成 后 sudo reboot
系统开始重启后 按下ESC键 找到安装版本的2.6.34.1 内核回车
启动后 uname -r 结果:
至此 内核降级安装完毕 这里友情提醒:新手不要去改默认启动内核选项,很容易炸。
还有就是编译问题 一般源码包文件编写是没有问题的
重点是Gcc的版本号 出现版本不兼容
一 查看README找适配gcc,
二 更改MAKEFILE文件有什么错就跟着博客解决方案走
三 如果发现错误无法搜到解决方案,不用怀疑,删了重来
四 一步一步的小心谨慎,必要时弄清这么做的原因
以上是我内核降级的经验 贴出来希望对像我这种小白有所帮助。