Linux内核编译与安装:4.4.0-21→4.14.0

本文链接:https://blog.csdn.net/zhaogang1993/article/details/79514344

1.     背景

从事Linux环境下开发工作,一直想自己玩,纯属好奇,没撒背景。

2.     编译环境

zg-Linux etc # uname–a(查看内核)

Linux zg-Linux 4.4.0-21-generic #37-UbuntuSMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linux

zg-Linux etc # lsb_release–a(查看发布版本)

No LSB modules are available.

Distributor ID:   LinuxMint

Description:    Linux Mint 18 Sarah

Release:        18

Codename:       sarah

3.     编译步骤

1)  下载内核源代码

https://www.kernel.org/pub/linux/kernel/网站上下载最新的Linux内核***(我下载的是linux-4.14.tar.xz,也就是4.14稳定版内核的第一个版本,不是最新)。

2)    部署内核源代码

打开终端,更改用户权限为root。

输入mv linux-4.14.tar.gz  /usr/src  ------> 目的是把下载的内核源代码文件移到/usr/src目录;

输入cd /usr/src切换到该目录下;

输入tar zxvf linux-4.14.tar.gz ------> 目的是解压内核包,生成的源代码放在linux-4.14目录下;

说明:如果下载的是的.tar.xz文件:先用 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvfxxx.tar来解包。

参考:http://blog.csdn.net/rheostat/article/details/7614451

输入cd linux-4.14,切换到该目录下;

输入cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config  ------>  目的是使用在boot目录下的原配置文件。

简单说明:

1.      操作可能需要root权限;

2.      将下载的内核源代码拷贝到/usr/src目录并解压;

3.      将当前系统的配置拷贝至待编译的源代码目录,也就是以当前系统的配置编译源代码。

3)    配置内核

配置内核的方法很多,主要有如下几种:

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

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

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

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

由于对Linux还处在初学阶段,所以选择了简单的配置内核方法,即make menuconfig。在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。

对每一个配置选项,用户有三种选择,它们分别代表的含义如下:

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

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

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

说明:笔者输入make menuconfig  后并没有配置其他内核编译配置(因为还不是特别懂),只是试了下此流程,是可用的。

4)    编译内核

这步是时间最长的一个步骤,一般在2个小时左右。
编译内核只需在终端(目录:/usr/src/linux-4.14) 输入:

make

(或者make –jN 以多线程编译,N代表线程数,我的电脑是双核4线程,N填了4),然后等待编译的完成。

5)    编译和安装内核模块

make –j4  modules_install

6)    安装内核

make –j4 install

7)    生成启动

1.   产生initramfs image映像

zglinux src # mkinitramfs-o /boot/initrd.img-4.14.0

Warning: No support for locale: en_US.utf8

man解释:

The mkinitramfs  script  generates an initramfs image.  The initramfs is a compressed cpio archive.The archive can be used on a different box of the  same arch  with  the corresponding  Linux kernel.   mkinitramfs is meant foradvanced usage. On your local box update-initramfs calls mkinitramfs with therelevant parameters.  update-initramfs keepssha1sum of generated initramfs. It takes care to generate backups andeventually runs the bootloader.

翻译:产生initramfs映像文件,它是一个压缩了cpio包。

2.    更新initramfs

zglinux src # update-initramfs-c -k 4.14.0

update-initramfs: Generating/boot/initrd.img-4.14.0

W: Possible missing firmware/lib/firmware/radeon/si58_mc.bin for module radeon

Warning: No support for locale: en_US.utf8

man解释:

The update-initramfs script manages your initramfs images on your local box.  Itkeeps track of(记录、追踪) the existing initramfs archives in /boot.  There are three modes of operation create,update or delete.  You must at leastspecify one of those modes.

3.   产生(更新)启动配置

zglinux src # update-grub2

Generating grub configuration file ...

Warning: Setting GRUB_TIMEOUT to a non-zerovalue when GRUB_HIDDEN_TIMEOUT is set is no longer supported.

Found linux image: /boot/vmlinuz-4.14.0

Found initrd image: /boot/initrd.img-4.14.0

Found linux image:/boot/vmlinuz-4.4.0-21-generic

Found initrd image:/boot/initrd.img-4.4.0-21-generic

Found memtest86+ image: /memtest86+.elf

Found memtest86+ image: /memtest86+.bin

done

man解释:

update-grub is  a stub for runninggrub-mkconfig -o /boot/grub/grub.cfg to generate a grub2 config file.

4.   查看启动配置文件:/boot/grub/grub.cfg

用vim搜索出有4.14.0的启动项,到目前为止应该都成功了。

说明:以上步骤涉及到linux的启动流程,请参阅其他文章:

https://www.linuxidc.com/Linux/2017-08/146494.htm

4.     重启

1)    重启前:

zglinux grub # uname -a

Linux zglinux 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 1818:34:49 UTC 2016 i686 i686 i686 GNU/Linux

2)    重启后

zhaogang@zglinux ~ $ uname -a

Linux zglinux 4.14.0 #1 SMP Sun Mar 11 00:22:41 CST 2018 i686i686 i686 GNU/Linux

5.     结果:

实验成功,之前安装的ssh、smb等都不受影响。整个过程断断续续花费5个小时左右,包括第一次/usr目录爆满导致重新分区装系统。

6.     可能出错点:

1)    #make menuconfig(配置内核阶段)

报错1(重装系统前):

In file included fromscripts/kconfig/mconf.c:23:0:

  scripts/kconfig/lxdialog/dialog.h:38:20:fatal error: curses.h: No such file or directory

报错2(装系统后):

zglinux linux-4.14 # make menuconfig

HOSTCC scripts/basic/fixdep

*** Unable to find the ncurses libraries orthe

*** required header files.

*** 'make menuconfig' requires the ncurseslibraries.

***

*** Install ncurses (ncurses-devel) and tryagain.

***

scripts/kconfig/Makefile:202: recipe fortarget 'scripts/kconfig/dochecklxdialog' failed

make[1]: ***[scripts/kconfig/dochecklxdialog] Error 1

Makefile:548: recipe for target'menuconfig' failed

make: *** [menuconfig] Error 2

原因:

两个错误原因相同,因为make menuconfig是基于ncurse库编制的图形工具界面来配置内核,其依赖ncurses库,所以需要安装ncurses包:

apt-get installlibncurses5-dev

2)    make编译内核阶段(步骤4)

报错:

scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h: No suchfile or directory

原因:

编译环境没有openssl库,所以需要安装ssl包:

apt-get installlibssl-dev

3)    装系统后make编译报错

报错:

scripts/basic/fixdep.c:105:23:fatal error: sys/types.h: No such file or directory

原因:

没有安装libc的库:

apt-get installlibc6-dev

4)    编译告警(可忽略,重装之后的好像没有了,也不太清楚,因为重装系统后的编译过程我没看,直接洗漱去了)

WARNING: modpost: Found 1 sectionmismatch(es).

To see full details build your kernel with:

'make CONFIG_DEBUG_SECTION_MISMATCH=y'

5)    zg-Linux etc # df -h

Filesystem       Size Used Avail Use% Mounted on

udev             1.9G     0 1.9G   0% /dev

tmpfs            392M   22M 371M   6% /run

/dev/sda1        14G   13G  623M  96% /                                     ----快用爆了,最后还是用爆了

最后---确实把/目录用爆了,编译终止,看来要重新换系统了

ld: final link failed: No space left ondevice

scripts/Makefile.modpost:125: recipe fortarget 'drivers/net/wireless/p54/p54common.ko' failed

make[1]: ***[drivers/net/wireless/p54/p54common.ko] Error 1

此问题导致我重新分区重新装了一次系统,具体分区、重装linux系统请参考其他文章。此处只贴上我重装的分区:

zhaogang@zglinux ~ $ df -h

Filesystem      Size Used Avail Use% Mounted on

udev            1.8G     0 1.8G   0% /dev

tmpfs           392M 6.5M  386M   2% /run

/dev/sda1        19G 3.0G   15G  18% /

/dev/sda7      138G   14G 118G  11% /usr

tmpfs           2.0G 876K  2.0G   1% /dev/shm

tmpfs           5.0M 4.0K  5.0M   1% /run/lock

tmpfs           2.0G     0 2.0G   0% /sys/fs/cgroup

/dev/sda6       9.1G 411M  8.2G   5% /boot

/dev/sda8       290G  82M  275G   1% /home

cgmfs           100K     0 100K   0% /run/cgmanager/fs

tmpfs           392M   16K 392M   1% /run/user/1000

7.     参考:

1)    bug解决

http://blog.csdn.net/chengwei920412/article/details/39379499

http://blog.csdn.net/MingLLu/article/details/50960576

2)    编译流程

http://blog.csdn.net/fjt19900921/article/details/8316481

http://blog.csdn.net/qq_34247099/article/details/50949720

8.     附图几张:

1)    内核编译配置页面(网上抄来,我的也一样,忘记截图了)

2)    重启后的系统内核---没骗你的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值