ubuntu内核升级

(一)给本机更新内核
ubuntu12.04    内核   3.11.0-15    编译内核之后内核为   4.0.1    
1、上官网   www.kernel.org  下载linux内核代码,如linux-4.0.1.tar.xz 
2、解压成linux-4.0.1.tar包

     xz -d linux-4.0.1.tar.xz

3、复制到指定文件夹/usr/src

     cp /mnt/hgfs/share/ linux-4.0.1.tar  /usr/src

4、进入/usr/src解压tar包

     tar -xvf linux-4.0.1.tar

5、清理内核源码中的残渣(多次编译留下的)
     cd /usr/src/linux-4.0.1
     make mrproper   每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译
6、安装图形界面配置工具ncurses
     sudo apt-get install libncurses5-dev
7、打开配置的图形界面,使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。
     make menuconfig
内核配置可参考

8、配置界面如下:

#make menuconfig        //基于ncurse库编制的图形工具界面

#make config                 //基于文本命令行工具,不推荐使用

#make xconfig               //基于X11图形工具界面

#make gconfig               //基于gtk+的图形工具界面




<*>[*]------将该功能编译进内核

[]----------------不将该功能编译进内核

[M]--------------将该功能编译成可以在需要时动态插入到内核中的代码


save之后会生成一个  .config 文件,这个文件才是真正的编译内核配置文件


9、编译准备
#make dep               //建立编译时所需的从属文件   已经不再需要了
#make clean             // 清除内核编译的目标文件 

10、编译内核和模块
make -j4              //j4  使用了加速编译

生成内核模块和vmlinuz,initrd.img,Symtem.map文件

注意:#make相当于分别执行#make bzImage 和#make modules,由于是本机替换内核,所以无需分开执行。


11、然后是安 装内核模块和 内核
     make modules_install     //装内核模块,编译成功后,系统会在/lib/modules目录下生成一个4.0.1子目录,里面存放着新内核的所有可加载模块(即将编译好的modules拷贝到/lib/modules
     make install                    //装内核,即复制.config,vmlinuz,initrd.img,System.map文件到/boot目录、自动更新grub

12、重启,然后查看内核版本
      reboot
      unname -r

13、发现没有安装ssh
      apt-get install openssh-server


一些必要的解释
1、.config   文件
     使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。

2、vmlinuz 和 vmlinux    
     vmlinuz是可引导的、压缩的内核,vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件,

vmlinuz的建立有两种方式:

一是编译内核时通过“make zImage”创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性;

二是内核编译时通过命令make bzImage创建,bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”,bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码,所以你不能用gunzip 或 gzip –dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。 


3、initrd.img
     initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如initrd- 2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。如果你使用的是scsi硬盘,而内核vmlinuz中并没有这个 scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统
的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题,initrd-2.4.7-10.img是用gzip压缩的文件。

4、System.map
     System.map是一个特定内核的内核符号表,由“nm vmlinux”产生并且不相关的符号被滤出。


(二)给非本机替换内核

1、从上述第10步开始不一 样, 编译内核使用

#make bzImage            //内核编译成功后,会在源码树根目录即linux-4.0.1/arch/x86_64/boot/目录中生成一个新内核
的映像文件bzImage。
注意:对于大内核(比如需要SCSI支持),make bzImage (推荐),

2、编译模块

#make modules   //编译可加载模块(即内核选项中选择为M的选项),以便将来使用insmod命令进行加载。编译时间跟M选项的数量有关。 

3、安装模块
#make modules_install   // 即将编译好的modules拷贝到/lib/modules下。

4、安装内核
 由于不是本机替换内核,所以我们需要将新生成的内核文件拷贝到要替换内核的机器上。需要拷贝的内核文件为主要有4个,分别是:.config,bzImage,System.map 和系统/lib/modules/linux-4.0.1目录。

具体操作如下:

(1)将生成的linux-4.0.1/.config 拷贝到要替换内核系统的/boot下,并重命名为config-4.0.1

(2)将生成的linux-4.0.1/arch/x86-64/boot/bzImage 拷贝到要替换内核系统的/boot下,并重命名为vmlinuz-4.0.1(注:这里需特别注意拷贝后的文件名变为vmlinuz-x.x.x)。

(3)将生成的linux-4.0.1/System.map 拷贝到要替换内核系统的/boot下,并重命名为System.map-4.0.1

(4)将make modules_install生成的系统目录/lib/modules/linux-4.0.1拷贝到要替换内核系统的/lib/modules下。

(5)在要替换新内核的系统的/lib/modules目录下执行以下命令:

       #update-initramfs -c -k 4.0.1,生成/boot/initrd.img-4.0.1

  #update-grub(或#update-grub2), 更新启动加载文件。


5、 重启系统
 
#reboot



其他
1、 指定安装内核目录和内核模块目录
make modules_install INSTALL_MOD_PATH=/home/xiaohong/boot
make install  INSTALL_PATH=/home/xiaohong/3.18.10-gfx

2、 编译最小系统的配置
配置内核先make defconfig,再make nconfig(基于ncurse库编制的图形工具界面)进行配置一下就好了,这样编译出来的内核已经很精简了

3、make menuconfig的解析

#make menuconfig        //基于ncurse库编制的图形工具界面

#make config                 //基于文本命令行工具,不推荐使用

#make xconfig               //基于X11(qt)图形工具界面

#make gconfig               //基于gtk+的图形工具界面

------------------------这些都是 创建.config这个内核的配置文件,但用make menuconfig是利用新内核所固有的默认配置基础上所进行的调整,如果说要在原来系统内核的基础上进行修改的话,那么就需要用到make oldconfig这个命令
例如  为了能在原来的基础上快速的来配置参数,我们可以直接用系统中的,然后在其上面进行少量的修改
# cp /boot/config-2.6.32-131.0.15.el6.x86_64 .config
# make oldconfig

再了解一下make menuconfig与make oldconfig的区别,他们都是针对.config这个文件来讲的。

(1). 如果.config不存在,运行make menuconfig时的缺省设置由固化在各个Kconfig文件中各项目的缺省值决定。

(2). 如果.config存在,运行make menuconfig时的缺省设置即是当前.config的设置,若对设置进行了修改,.config将被更新。

(3). arch/arm/defconfig是一个缺省的配置文件,make defconfig时会根据这个文件生成当前的.config。

(4). arch/arm/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。

(5). make oldconfig的作用是备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config。

(6).如果是不同的内核版本配置,则cp /boot/config-2.6.32-131.0.15.el6.x86_64 .config不会被make menuconfig所读入。

所以说,根据上面的内容,可以得出这样一个结论。为了使用新的内核功能,当然是用make menuconfig根据新内核默认的配置。如果说,你是在原来内核基础上,增加内核的某个功能的话,就可以用make oldconfig来进行局部的配置了。


注意:1、make defconfig 调用默认的配置。

其和上面三个:make config,make menuconfig,make xconfig,不是一伙的。

其不是另外一种配置的方式。

而是(直接去)使用某个默认的配置,即和配置内容相关。

和使用何种配置方式(命令行,还是图形界面等等)无关。

           2、make oldconfig 其使用old,旧的配置。

目的在于:尽量使用之前的配置(去用都当前的,新的,后者是别的内核或某软件的配置),以达到节省时间的目的


或者别的用法:

make oldconfig的用法:

  4. cd <some-dir>/buildroot

  5. cp configs/i486-defconfig-4.3.3 .config

  6. make oldconfig

  7. make

很明显,其逻辑就是:

    - 把旧的配置拷贝过来
    - 然后使用make oldconfig实现(加载)使用当前.config这个旧的配置。


参看
ubuntu 12.04内核编译步骤
linux系统替换新内核(编译安装替换与打包替换) Linux 删除旧内核
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值