在以前的一篇博文《编译debian内核》已经提过了重新编译内核的方法,但是整个过程花费时间较长,并且生成deb包。

这里我采用稍微简单一些的方法,因为我并没有对内核或者驱动代码做任何修改,仅仅是在内核中选中一些未被选中的调试选项(以便于查看log信息)

先获取内核源码:

 sudo apt-get source linux-source-3.2

会在当前文件夹下得到几个文件:

$ ls
linux-3.2. linux_3.2.57-+deb7u2.debian.tar.xz linux_3.2.57-+deb7u2.dsc linux_3.2.57.orig.tar.xz

查看当前内核配置:

$ uname -a
Linux debian 3.2.---pae # SMP Debian 3.2.- i686 GNU/Linux

查看当前系统中存在的内核配置文件:

$ ls /boot/config-3.2.--*
/boot/config-3.2.-- /boot/config-3.2.---pae

当前采用的内核是3.2.0-4.686-pae,其配置文件是/boot/config-3.2.0-4-686-pae。

进入linux-3.2.57,拷贝内核配置文件:

sudo cp /boot/config-3.2.0-4-686-pae .config

然后使用make menuconfig对当前配置进行修改:

sudo make menuconfig

选择Enable dynamic printk() support(使用该选项可以进行控制代码中的pr_debug和dev_dbg信息输出):

 Kernel hacking --->
[*] Enable dynamic printk() support

然后选择Exit,再选择Exit,选择Yes保存即可。

然后进行编译内核和驱动:

sudo make

在编译过程中出现了一个编译错误,如下所示:

  Building modules, stage .
MODPOST modules
ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko] undefined!
WARNING: modpost: Found section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
make[]: *** [__modpost] 错误
make: *** [modules] 错误

重新编译:

sudo make CONFIG_DEBUG_SECTION_MISMATCH=y

但是编译过程中系统出现了死机现象(与内核代码无关,似乎是我的电脑其他部分出现问题,导致当cpu占用率长期过高时会死机)。

后来我又重新编译,但是多次出现了编译失败的现象,貌似是因为我同时打开了火狐狸,导致系统cpu利用率过低,从而引发了这个问题。

每次编译时使用sudo来进行编译有点怪异(因为默认解压后文件夹是root权限,对该文件夹下文件的操作都需要root权限),

先修改用户以及用户组(我的用户和用户组名称都是host,可以根据需要修改成自己的用户以及用户组名称):

chown -R host:host .

重新编译:

make CONFIG_DEBUG_SECTION_MISMATCH=y
sudo make modules_install
sudo make install

安装时默认会将内核镜像以及initrd文件还有驱动模块都安装到系统文件夹下,并自动在/boot/grub/grub.cfg中添加新的内核选项。

重启电脑后选择新的内核选项(我编译版本是linux-3.2.57,所以新选项是“Debian GNU/Linux,Linux 3.2.57”,默认光标也会停留在这个选项上),

按下回车键进入系统即可。

控制台下查看当前内核版本:

# uname -a
Linux debian 3.2. # SMP Fri Jun :: CST i686 GNU/Linux

当前内核版本是3.2.57了。

后注:

在家里的电脑上按照上面的步骤重新编译了linux内核,最后编译时忘记执行sudo make modules_install,

导致驱动程序没有安装到/lib/modules/linux-3.2.57下,使用新的菜单项进入系统时无法进入系统,

并且此时的/boot/initrd.img-3.2.57只有2M大小。

我重新执行了sudo make modules_install后再执行sudo make install,得到的/boot/initrd.img-3.2.57有100M大小。

最新文章

  1. 利用C#自带组件强壮程序日志
  2. 关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题)
  3. Android应用开发中半透明效果实现方案
  4. IE11下不能引入外部css的解决方法
  5. 【HDU4630 No Pain No Game】 dp思想+线段树的离线操作
  6. 【读书笔记】iOS-属性列表
  7. HTML5 文件API(一)
  8. [Javascript] Drawing Paths - Curves and Arcs
  9. javascritp第十课:面向对象
  10. enum 用法
  11. 201521145048《java程序设计》第10周学习总结
  12. PowerBI 第九篇:修改查询
  13. Mac OS X中开启或关闭显示隐藏文件命令
  14. Deep Reinforcement Learning for Dialogue Generation 论文阅读
  15. [Swift]LeetCode151. 翻转字符串里的单词 | Reverse Words in a String
  16. c/c++ 重载运算符 类型转换运算符
  17. 重置SQLSERVER表的自增列,让自增列重新计数
  18. layui(七)——rate组件常见用法总结
  19. N皇后问题hdu2553(dfs)
  20. label表单的关联性

热门文章

  1. Devops成功的八大炫酷工具
  2. SVN版本控制图标未显示或显示异常
  3. scikit-learn---PCA(Principle Component Analysis)---KNN(image classifier)
  4. FishiGUI系统架构分析 和层次结构 二
  5. Resharper快捷键及用法
  6. smarty模版使用php标签,如何获取模版变量
  7. 机器学习13—PCA学习笔记
  8. php跨域共享session
  9. centos7.0 activemq的安装
  10. c/c++的一些小知识点2