2015-11-29 12:17:43
来 源
中存储网
Ubuntu
网上好多文章,他大爷的都是转来转去,每一篇中用的。索性还是自己整理一篇吧。 网上牛人多,但是小白问题更多,更何况咱们这号不入门的,因为最近学内核,要写模块,模块要在源码树下编译安装,又习惯了Ubuntu的OS,不忍转向他方,还是好好摆置摆置它吧,找

网上好多文章,他大爷的都是转来转去,每一篇中用的。索性还是自己整理一篇吧。

网上牛人多,但是小白问题更多,更何况咱们这号不入门的,因为最近学内核,要写模块,模块要在源码树下编译安装,又习惯了Ubuntu的OS,不忍转向他方,还是好好摆置摆置它吧,找的几篇文章不怎么好用,下边开始吧。

PS:当前系统是上一篇配置SSH里Jun从Ubuntu 9.04更新到Ubuntu 10.04的系统。

这个网上都这么装,就这样来吧。

1.安装编译内核所需要的软件 build-essential、autoconf、automake、cvs、subversion

$ sudo apt-getinstall build-essential kernel-package libncurses5-dev

libncurses5这个软件包在使用menuconfig配置内核的时候会用到。

2.进入/usr/src ,在这里构建源码树,大家用接下来指令查看可用的源码包:

$ sudo apt-cache search linux-source

我的提示是:

linux-source -Linux kernel source with Ubuntu patches

linux-source-2.6.32- Linux kernel source for version 2.6.32 with Ubuntu patches

3.那么就让大家来下载2.6.32版的kernel,通过下边命令:

$ sudo apt-get install linux-source-2.6.32

等待下载完成。

4.下载完成后,大家进入/usr/src ,默认会在这里,看看他的目录结构:(ls 一下)

我的显示可以看到有两对儿Linux-header-2.6.* 的目录,你的应该是只有一对儿,之所以这样是以为我的是从9.04更新到10.4,Ubuntu会保留历史版本,不用管它,记住,这里linux-headers-2.6.32-34-generic 、linux-headers-2.6.32-34、linux-source-2.6.32.tar.bz2 ,这才是大家用到的。linux-source-2.6.32.tar.bz2这个就是刚刚下载好的源码,大家来解压一下:

$ sudo tar –xjvf linux-source-2.6.32.tar.bz2

然后为了操作方便,大家给源码目录建立一个软连接:

$ sudo ln –s linux-source-2.6.32 linux

这样大家就可以通过linux来操作linux-source-2.6.32目录了。

$ cd linux

5.进入源码树内,然后导入原来内核的配置相关文件:

$ sudo  cp  ../linux-headers-2.6.32-34-generic/.config  ./.config

(注意:在linux-headers-2.6.32-34-generic 目录下查看文件列表时,可能看不到.config文件,因为  .开头的文件是隐藏的,要用 $ ls –a 才能看到);

记住当前在源码树中。大家执行一下 $ make menuconfig ,把原来的.config导进来。终端会弹出一个配置界面

最后有两项:load akernel configuration...

save a kernel configuration...

选择load a kernel configuration保存,然后在选择save akernel configuration再保存退出,并退出配置环境。

6.好的,接下来就是激动人心的make时代了,能不能通过呢?我也在期待,因为之前几次都没成功哎,悲催。

$ make –j4

(ps:这里-j4是用4个job来完成整个make过程,并发一下,比较快么,不过一旦你的机器比较卡,还是老老实实的不加这个选项make吧,毕竟make内核的时间还是比较长的,大家可以边看电影,边等待他的完成。让我打开一集死神或者海贼王先看着吧,待它编译ing)。

编译还在持续,真是漫长。一会儿还要去打球呢,赶紧。

果然,还有报错,报的是omnibook ,看名字估计是针对笔记本或者上网本的优化吧,在配置中把它去除了试试。我感觉是个bug。因为看图,Ubuntu目录下明明有sections.lds文件,仔细一看,他ld后的目录是绝对路径/ubuntu/omnibook……根目录下怎么会有这东西呢?是吧。哈哈,现在要么把这个编译项给去除了,要么在根目录下建立同样的路径把sections.lds文件放进去,或者在源代码中找到出错的语句改过来,我看看能不能找到啊。

网上Search一下,果然是个bug,是2.6.32的bug,仿照网上的解决方法,您一旦出现了同样的问题,借鉴一下:

即:

在/usr/src/linux-source-2.6.32/ubuntu/omnibook/Makefile 中

ifeq ($(KERNELRELEASE),)

# Support for directMakefile invocation

的前面增加:

PWD=$(shell pwd)

让大家 Try again。经过漫长的等待,你猜怎么着?成了!希望你的也很顺利。

看到了,内核镜像有了。OK,算是了结一桩心事,可以进行下一步Ubuntu下的驱动和模块开发了。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。