之:内核编译(众多前人的结晶)

       引导grub学习了,然后开始进行内核编译这一块了,目前打算先升级一次内核升级。

1,准备材料(验证进行)

       要升级的内核版本linux-3.10.35.tar.xz,这个是从官网下载的,慢慢的才清楚,这个是内核源码文件,73M.之后编译好的有2M左右的内核,当然通过筛选,可能更小。

       这一步没什么,只是对内核学习向前了一步。恩说android内核是linux内核,我在想手机内存那么小,怎么和电脑内核一样呢?额,原来内核就是那么小。装系统时说,系统多大多大,额,内核只是其中很小一部分、系统最常用的部分。

2,解压内核(验证进行)

     很多习惯上放到usr/src下进行,不是必须的,恩但第一次,我也放在此文件夹下进行了。对于这一步,不同的压缩格式解压方式不同:

tarxvf linux-3.10.35.tar.xz

3,编译前的清除(验证进行)

      在解压后的目录下残留.config.o文件

makemrproper

      如果是第一次解压编译,则不用清除。我这第一次,但也运行了这个命令,只是为了尝试一下命令。

4,内核配置(验证进行)

      (引用)为操作系统的内核,其内容和功能必然非常繁杂,包括处理器调度,内存管理,文件系统管理,进程通讯以及设备管理等等,而对于不同的硬件,其配置选项也不相同,所以在编译源代码之前必须设置编译选项。要根据自己的需要正确选择yesorno需要对计算机方方面面的知识都有所了解。但是这里的选项实在是太多了,大概有几百项之多。金步国先生翻译的资料:Linux2.6.19.x 内核编译配置选项。

      整体想想,就这一步很复杂,要精简则必须认识哪些配置选项必须选,哪些可以不选。怎么解决呢?还得进一步的学习,我现在得先让自己的系统跑起来再说,所以现在解决方案是将原系统的配置文件.config拷贝一下。

4.1一个博客上写具体的配置方式有:

     makeconfig是基于文本的传统配置界面

     makemenuconfig是基于文本的选单式配置界面,是最为灵活的内核配置工具

     makexconfig是基于图形窗口模式的配置界面,需要xWindow图形环境的支持

     makeoldconfig用于在原来内核配置的基础上作修改

     查看别人经验帖子,用makemenuconfig的多,这个做起来应该简单,这次我也用的这种方式:

      makemenuconfig

      当然有些简便的方法,那就是makemenuconfig 或者makexconfig。我使用的是makemenuconfig,但是前提条件是要装ncurse

       进行这项工作之前,可以先看看解压出来的内核源代码目录下的README文件。在这份文件中,对怎样进行内核的解压,配置,安装都进行了详细的讲解。

makemenuconfig过程中也会有一些选项需要你来设置*,y, n 或者m,选择*表示选项中的内容被直接编入内核中,选择m表示选项中的内容不编入内核,而只是编成独立的module,用到时才调用

       4.2把正在使用中的内核配置文件/usr/src/linux-headers-版本-generic/.config拷到/usr/src/linux-版本目录下 cp/usr/src/linux-headers-3.5.0-17-generic/.config /usr/src/linux-*

       这一步也不是必须的,但在一些配置不能确定的情况下,用原来的系统配置是较为合理的选择。这次我就是这样做的。

       注:.config文件在boot下或者src下某个linux-文件里,带点的文件不显示,这个知识使自己也走

了弯路,linux基础还不咋地。

       4.2据查资料,在执行命令makemenuconfig是需要安装ncurses,由于那个设备不能联网,我下载拷进去了,可是没有安装成功,就没有安装,但是将系统原来配置文件拷过来了,最终也升级通过了,具体原有还得学习:

安装:sudoapt-get install libncurses*

4.3新生成配置文件

    执行:

    cd/usr/src/linux-*

    makemenuconfig

    终端会弹出一个配置界面

    菜单最后有两项:load save.先选第一项load,意思是,利用当前的内核配置详单来设置将要编译的内核,然后选save这一项保存,最后退出配置界面。

如果没有4.1步的话,则接下来需要一步一步去配置。我第一次把配置文件拷贝进来以为就不用执行这一步了,但后来出现很多选项,不清楚就全部yes了,编译时出故障停止了。我再次进行的时候就好好执行这一步了。

5,确定依赖关系(验证进行)

     这一步有时候不是必须的,我编译这两次提示出错,表示现在不需要这个

    makedep

6,清除编译中间文件(验证进行)

    输入命令:makeclean 。恩还不太理解作用和效果。

7,编译内核和模块(验证进行)

    7.1了解到的这里有3个命令可供选择:

    make编译内核和模块,相当于makebzImage makemodules3个多小时

    makezImage 编译长生压缩形式的内核文件,30分钟左右

    makebzImage 编译产生高压缩形式的内核文件,30分钟左右

    如果执行了make,就没必要执行makemodules,前一个在30分钟,后一个在3小时时间,如果行makebzImage则需要makemodules,前者编译内核,后者编译模块,如果是第一次编译内核则通常两个都需要,但如果是后来编程需要,只是修改了内核源码,则重新编译内核时并不需要重新编译内核。

    在编译内核时,可以添加-j选项,来加快内核编译速度,单核使用-j2,双核使用-j4如:make-j2bzImage

     7.2生成新内核,这个过程大概二十分钟吧

就是把配置过程中,我们选中编入内核中的程序编译链接生产linux内核

makebzImage

     7.2生成modules,也不知到怎么回事,用了三个半小时,等得很着急,再长了,回家就更晚了。

makemodules

 就是把配置过程中,我们选中编成modules的程序编译链接成modules

8,建立要载入ramdisk的映像文件(验证进行)

    mkinitramfs-o /boot/initrd-linux*.img  版本*

    如果你的linux不是ubuntu,而是其他的发行版本,那么使用的命令可能不是mkinitramfs,而是mkinitrd,但功能和用法类似。如果linux系统按照在scsi磁盘上,这部是必须的,否则可以跳过。

   在之前的内核和模块编译完成后,会在/lib/modules/目录下生成版本的模块文件(包括内核头文件等),我们需要将它与/boot目录下关联,生成initrd映像,到/lib/modules/目录下(不在该目录下也行),执行命令:

   sudomkinitramfs 版本* -o /boot/initrd.img-*

9,安装内核和模块(验证进行)

   9.1,安装modules,就是把刚才编译生产的modules拷到系统文件夹下,以供新内核调用。输入命令:

makemodules_install

   9.2,按装内核,把内核映象和System.map拷贝到/boot/,然后会自动生成引导菜单。

输入命令:makeinstall

该步骤,它执行了下列命令:

#sudocp /usr/src/linux-*/arch/i386/boot/bzImage/boot/vmlinuz-*

#sudocp System.map /boot/System.map-*

#sudoln -s /boot/System.map-* /boot/System.map

同时,建立内核的config文件config-*。对于安装内核和模块,我只是执行了两个命令:makemodules_installmakeinstall 。别的都自动生成好了,越来越智能了。

10,配置grub引导程序(验证进行)

     既然新的内核编译并安装好了,那么我们要配置系统的引导程序用新内核正确引导.

一开是没有安装内核,就手动更改了,怕出错就吧内核镜像换成还是原来的,开机试了一下有那个启动项,接下来安装内核(在刚刚才那个系统文件下makeinstall,然后发现自动生成了grub.cfg文件,而且把我刚才手动配置的给删除了(肯能我的不合理?),而原来那个版本内核还保留着。

完事reboot,系统启动后,从grub启动菜单可以查看启动菜单,进入后用uname-a看看是否新内核。

升级内核一次成功,整个过程很纠结的。

11,删除旧内核文件(未进行)

   删除旧版本这一步没有进行,毕竟这个系统以后还不知道怎么样。在此想前人学习一下。
   1.
删除内核文件:
sudoapt-get remove linux-image-*

sudoapt-get remove linux-headers-*

或(删除当前版本之外的所有内核)sudoapt-get purge ~ilinux-image-.*\(\!`uname -r`\)
   2.
另外一条命令:
sudoaptitude purge ~ilinux-image-*\(\!'uname -r'\)
这样就成功删除了.
                                                                                                                              12,可能出现的问题(未进行)

       中间可能会出现问题,大都是重启后不能进入系统,kernelpanic或者没有grub选项。这一步骤没有进行,因为第一次升级内核后就成功跑起来了,很兴奋,呵呵。但是这一快肯定得注意的,升级后跑不起来怎么办?学习!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值