1. 程式人生 > >Linux核心編譯與安裝:4.4.0-21→4.14.0

Linux核心編譯與安裝:4.4.0-21→4.14.0

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來解包。

輸入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的啟動流程,請參閱其他文章:

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)    重啟後

[email protected] ~ $ 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系統請參考其他文章。此處只貼上我重灌的分割槽

[email protected] ~ $ 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解決

2)    編譯流程

8.     附圖幾張:

1)    核心編譯配置頁面(網上抄來,我的也一樣,忘記截圖了)

2)    重啟後的系統核心---沒騙你的。

相關推薦

Linux核心編譯安裝4.4.0-214.14.0

1.     背景從事Linux環境下開發工作,一直想自己玩,純屬好奇,沒撒背景。2.     編譯環境zg-Linux etc # uname–a(檢視核心)Linux zg-Linux 4.4.0-21-generic #37-UbuntuSMP Mon Apr 18 1

linux核心編譯解除安裝

         linux開行版的自帶核心不一定能滿足linux學習和某些特殊的要求,這時我們就不得不根據自己的需求重新安裝核心。這裡我介紹一些常用編譯核心的步驟。 編譯核心 一、一定是下載滿足需求的核心啦。 二、選擇核心配置:    

ARM版Linux核心編譯裁剪

Win7下使用Oracle VM VirtualBox搭建的Ubuntu11.10虛擬機器 1、建立交叉編譯環境:       下載交叉編譯器arm-linux-gcc-3.4.1.tar.bz2             tar jxvf arm-linux-gcc-3.

關於fedora上linux核心編譯安裝

裝了幾次,方法比較簡單: 1.在核心目錄下,管理員許可權執行:make menuconfig 此時在desk-live 系統下可能沒有gcc ,無法make,裝gcc即可:yum install gcc 。順便裝了g++也可以:yum install gcc g++ 不管是

Linux編譯安裝配置 Qt 4.53全過程

雙擊 win port 環境 簡單的 類型 http you ner 最近準備做 Nokia 的 Symbian,Maemo 下觸摸屏開發。考慮到程序的跨平臺可移植性,最終選擇使用 Qt 開發。相對來說,國內關於 Qt 相關文檔並不算很多。作者將 Linux

Maven本地jar包部署安裝dubbox-2.8.4.jar

Dubbox前身是阿里巴巴的Dubbo專案,阿里巴巴解散了Dubbo團隊後,由噹噹網繼續維護此專案,改名為Dubbox,但是沒有提交到Maven中央倉庫(突然發現阿里巴巴又開始進行dubbo維護了,停止維護時的版本是2.5.3,現在是2.6.4)這些就不管了,現在我手動將Dubbox的jar包安裝到本地倉庫中

鳥哥的Linux私房菜讀書筆記--核心編譯安裝

1、編譯核心與核心模組 [[email protected] linux-3.10.89]# make vmlinux <==未經壓縮的核心 [[email protected] linux-3.10.89]# make modules <

4.Linux核心設計實現 P31---淺析程序終結關鍵do_exit(轉)

程序在退出時,必須釋放它所擁有的資源,並通過某種方式告訴父程序。程序的退出一般是顯示或隱式地呼叫了eixt(),或者接受了某種訊號。不過什麼原因退出,最終都呼叫了do_exit。用於程序退出的系統呼叫有兩個exit和exit_group,exit只是終止某個程序,而exit_group整個執行緒中的程序。它們

Linux實戰第九篇基於Centos6.9+7.4主備DNS服務器搭建實戰

服務器搭建 word uda notes centos6 fcc bfc data 閱讀 個人筆記分享(在線閱讀): http://note.youdao.com/noteshare?id=7898fa39596740bfcc9ca42ad643f045&sub=28A00

Linux 環境下 PHP 擴展的變異編譯安裝

font spa mysql 所有 sqli 技術 php 操作 size (操作系統 Centos7, 已安裝 mysqli 為例) 1,進入到 PHP 解壓後的源碼包的的 ext 文件夾 2,查看是否存在 mysqli 擴展 => ls 3,這裏既是所有 PHP

編譯linux核心原始碼,安裝、刪除核心

Linux核心編譯、安裝流程 本部落格屬於原創,轉載請註明來源 此處只講linux核心編譯步驟至於安裝虛擬機器,安裝ubuntu作業系統請自行百度 環境資訊: Linux作業系統:ubuntu16.04 核心版本:4.15.0-29-generic 需要編譯和安裝的核心原始碼

作業系統實驗一linux核心編譯及新增系統呼叫

編譯環境 VMWare Ubuntu Desktop Ubuntu 18.04.1映象下載地址:點我下載 裝ubuntu很簡單,網上教程一大堆,記憶體分配多點。 新增系統呼叫步驟 解壓linux核心 想辦法,把上面的linux核心弄到ubuntu裡面,可

作業系統課程設計(一)linux核心編譯及新增系統呼叫

1.實驗目的 通過實驗,熟悉Linux作業系統的使用,掌握構建與啟動Linux核心的方法;掌握使用者程式如何利用系統呼叫與作業系統核心實現通訊的方法,加深對系統呼叫機制的理解;進一步掌握如何向作業系統核心增加新的系統呼叫的方法,以擴充套件作業系統的功能。 2.實

例項tasklet實現軟中斷(學習《Linux核心設計實現》記錄)

tasklet是通過軟中斷實現的,tasklet本身也是軟中斷。 關於tasklet更詳細的知識,還是建議看一下《Linux核心設計與實現》 本貼子只介紹一下具體的流程。 驅動程式原始碼: #include <linux/init.h> #include <linu

例項基於4412-實現新增自己的系統呼叫函式(學習《Linux核心設計實現》 記錄)

學習筆記: 在學習《linux核心設計與實現》過程中,瞭解到: 在Linux中,系統呼叫是使用者空間訪問核心的唯一手段(除異常和陷入之外)。 系統呼叫主要有三個作用: ①:為使用者空間提供一個硬體的抽象介面。 ②:系統呼叫保證了系統的穩定和安全。 ③:為了實現多工和虛擬記憶體(應用程

打造自己的專屬linux(四)Linux核心編譯過程簡介

linux在前不久剛釋出了最新的3.0核心,在linux的學習中,瞭解核心的編譯是一個必不可少的功課。前幾天,學習了linux核心的編譯流程,在此總結下,大家來一起學習。 以最新的3.0核心為例,我下載的是linux3.0.1 下載地址:http://www.kernel.

linux 核心編譯驅動模組ko的配置以及載入模組解除安裝模組例項測試

linux 核心編譯驅動模組ko的配置以及載入模組、解除安裝模組例項測試一、要讓linux系統支援動態載入驅動模組必須先對linux 核心進行相關的配置,不然編譯不過,載入模組也會載入失敗甚至導致裝置重啟。1、勾選核心Enable loadable module suppor

Linux核心編譯及CentOS系統安裝

1、程式包的編譯安裝 命令:./configure, make, make install (1)./configure:檢查編譯環境的依賴關係,並設定編譯引數; (2)make:編譯過程,make不是編譯工具,而是專案構建工具,其呼叫各所需的編譯工具執行編譯操作; (3)make

linux核心移植編譯

在瞭解了核心及其相關知識之後,就要著手核心移植的實驗了。 使用make menuconfig出現問題請移步make: *** 沒有規則可以建立目標“menuconfig”。 停止。   Linux核心移植與編譯 1.linux核心的下載 實驗開始之前,你需要自行下載li

Linux核心編譯和grub安裝注意事項(修改預設啟動項)

一般的過程不多說。 下載核心原始碼,make menuconfig , make , make modules_install, make install等一系列。 要注意的事情: 1.安裝模組時,要用特殊引數,否則編譯出來的initrd.img特別大有300M,而