來(lái)嘗試一下Linux內(nèi)核編譯的“苦”
一、前言(僅供參考)
linux內(nèi)核該如何學(xué)習(xí)?
1、安裝vmware虛擬機(jī)或者virtualbox,再安裝發(fā)行版本linux
2、www.kernel.org,挑選一個(gè)內(nèi)核版本
3、進(jìn)行解壓并編譯
4、自己寫一些模塊(比如說(shuō)可以去嘗試解一些官網(wǎng)的bug),如下圖所示:
下面我們就可以看到還有很多內(nèi)核bug未解決的問(wèn)題還在那里:
下面是提交的bug測(cè)試報(bào)告:
最后有可能的話,可以去試試嘗試解這些bug!!!
5、內(nèi)核源碼(網(wǎng)絡(luò))閱讀:tcp_input.c tcp_out.c tcp_ipv4.c tcp.c
進(jìn)程管理:task_struct
6、書籍參考(剛開始可以只看一本書就夠了,多看幾遍,不求多,只求精,真正搞明白原理,這本書的內(nèi)核版本是0.11,內(nèi)核比較小,非常適合學(xué)習(xí),平時(shí)學(xué)習(xí)看源碼,也非常推薦看這個(gè)版本的內(nèi)核源碼):
一、linux內(nèi)核版本下載:
1、我們可以去官網(wǎng)下載linux內(nèi)核版本:www.kernel.org:

注:這里我下載的是最新的內(nèi)核來(lái)進(jìn)行編譯,環(huán)境是在ubuntu18.04;注意如果低版本的ubuntu去編譯搞版本的linux內(nèi)核,可能會(huì)出現(xiàn)一些環(huán)境配置問(wèn)題,比如make的版本過(guò)低等等。
2、解壓并配置、編譯:
(1)這里我使用了smbd服務(wù)器來(lái)共享windows文件,現(xiàn)在開始解壓剛才下載下來(lái)的linux內(nèi)核文件:
注意:一開始下載下來(lái)的linux內(nèi)核文件是以".xz"結(jié)尾的,我們要用下面的命令進(jìn)行解壓:
- xz –d linux-5.8.10.tar.xz
(2)然后就會(huì)得到上圖的文件了;下面來(lái)正式解壓文件了:
- root@txp-virtual-machine:/home/txp/share01# tar xvf linux-5.8.10.tar
(3)然后切換到解壓得到的文件目錄下,并進(jìn)行一些前期準(zhǔn)備:
- root@txp-virtual-machine:/home/txp/share01# cd linux-5.8.10
- root@txp-virtual-machine:/home/txp/share01/linux-5.8.10# ls
- arch certs CREDITS Documentation fs init Kbuild kernel LICENSES Makefile net samples security tools virt
- block COPYING crypto drivers include ipc Kconfig lib MAINTAINERS mm README scripts sound usr
(4)然后安裝一些插件,這里我已經(jīng)提前試過(guò)錯(cuò)了,所以只要安裝下面的安裝配置就行(當(dāng)前第一次進(jìn)行make menuconfig的時(shí)候,可以根據(jù)報(bào)錯(cuò)信息來(lái)進(jìn)行安裝一些配置):
- sudo apt-get install libncurses5-dev flex bison libssl-dev
(5)進(jìn)行make menuconfig,出現(xiàn)了那個(gè)界面并save退出(可以直接按鍵盤上的esc鍵退出):
(6)開始編譯內(nèi)核,這里可以根據(jù)你的電腦是多少核處理器來(lái)進(jìn)行編譯配置(我的電腦是戰(zhàn)神,四核處理器)
- root@txp-virtual-machine:/home/txp/share01/linux-5.8.10# make -j4
- CC [M] net/bridge/br_vlan.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_clock_source.o
- LD [M] net/dsa/dsa_core.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_scl_filters.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_transform.o
- CC [M] drivers/gpu/drm/i915/gvt/mmio.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_opp.o
- CC [M] net/appletalk/aarp.o
- CC [M] net/bridge/br_vlan_tunnel.o
- CC [M] drivers/gpu/drm/i915/gvt/display.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_dmcu.o
- CC [M] net/appletalk/ddp.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_abm.o
- CC [M] net/bridge/br_vlan_options.o
- CC [M] drivers/gpu/drm/i915/gvt/edid.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_ipp.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_aux.o
- CC [M] net/bridge/br_switchdev.o
- CC [M] net/appletalk/dev.o
- CC [M] drivers/gpu/drm/i915/gvt/execlist.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c.o
- CC [M] net/appletalk/atalk_proc.o
- CC [M] net/bridge/br_netfilter_hooks.o
- CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c_hw.o
- CC [M] drivers/gpu/drm/i915/gvt/scheduler.o
注:因?yàn)槭亲钚聝?nèi)核,編譯的時(shí)間比較久,所以耐心等待就行了(大概至少幾十分鐘。。。。。。),在編譯的時(shí)候,我們也可以看一下內(nèi)存的情況:
- htop
(7)如果你要修改當(dāng)前ubuntu的內(nèi)核版本,可以按照下面的操作來(lái)進(jìn)行,我這里就沒(méi)有去更換內(nèi)核了,配置了太多東西,所以就。。。。。。。
當(dāng)前內(nèi)核版本:
- root@txp-virtual-machine:/home/txp/share01/linux-5.8.10# uname -r
- 5.3.0-28-generic
a、先進(jìn)行安裝編譯內(nèi)核模塊:
- make modules_install
- make bzImage
b、安裝新編譯的內(nèi)核(把我們剛才編譯的新內(nèi)核進(jìn)行替換當(dāng)前內(nèi)核):
- $ cp arch/x86/boot/bzImage /boot/vmlinuz-5.8.10
- $ cp .config /boot/config-5.8.10
- $ cd /lib/modules/5.8.10/
- $ update-initramfs –c –k 5.8.10
- $ update-grub
注:感興趣的小伙子可以去嘗試一下,這里我就不嘗試了!,主要是這個(gè)內(nèi)核編譯太花時(shí)間了,我的天.......
本文轉(zhuǎn)載自微信公眾號(hào)「txp玩Linux」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系txp玩Linux公眾號(hào)。