关于驱动开发第一篇 内核编译(上)

入手了一本《驱动开发入门与实战》 貌似书版有点老了 还在用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

关于驱动开发第一篇 内核编译(上)_第1张图片

3.cd linux-2.6.34.1/ 进入解压的源码包目录执行菜单选项 sudo make menuconfig

关于驱动开发第一篇 内核编译(上)_第2张图片

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 注释掉

关于驱动开发第一篇 内核编译(上)_第3张图片

5.sudo make modules 编译内核模块结果如下:

关于驱动开发第一篇 内核编译(上)_第4张图片

6.sudo make modules_install

关于驱动开发第一篇 内核编译(上)_第5张图片

7.sudo make install 安装内核完成 后  sudo reboot

系统开始重启后 按下ESC键 找到安装版本的2.6.34.1 内核回车

启动后 uname -r 结果:

关于驱动开发第一篇 内核编译(上)_第6张图片

至此 内核降级安装完毕 这里友情提醒:新手不要去改默认启动内核选项,很容易炸。

还有就是编译问题 一般源码包文件编写是没有问题的 

重点是Gcc的版本号 出现版本不兼容 

一 查看README找适配gcc,

二 更改MAKEFILE文件有什么错就跟着博客解决方案走

三 如果发现错误无法搜到解决方案,不用怀疑,删了重来

四 一步一步的小心谨慎,必要时弄清这么做的原因

以上是我内核降级的经验 贴出来希望对像我这种小白有所帮助。

 

你可能感兴趣的:(驱动开发)