共計 3047 個字符,預計需要花費 8 分鐘才能閱讀完成。
這篇文章給大家介紹如何理解 Linux 內核編譯,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一、前言(僅供參考)
linux 內核該如何學習
1、安裝 vmware 虛擬機或者 virtualbox,再安裝發行版本 linux
2、www.kernel.org, 挑選一個內核版本
3、進行解壓并編譯
4、自己寫一些模塊(比如說可以去嘗試解一些官網的 bug), 如下圖所示:
下面我們就可以看到還有很多內核 bug 未解決的問題還在那里:
下面是提交的 bug 測試報告:
最后有可能的話,可以去試試嘗試解這些 bug!!!
5、內核源碼 (網絡) 閱讀:tcp_input.c tcp_out.c tcp_ipv4.c tcp.c
進程管理:task_struct
一、linux 內核版本下載:
1、我們可以去官網下載 linux 內核版本:www.kernel.org:
注:這里我下載的是最新的內核來進行編譯,環境是在 ubuntu18.04; 注意如果低版本的 ubuntu 去編譯搞版本的 linux 內核,可能會出現一些環境配置問題,比如 make 的版本過低等等。
2、解壓并配置、編譯:
(1)這里我使用了 smbd 服務器來共享 windows 文件,現在開始解壓剛才下載下來的 linux 內核文件:
注意:一開始下載下來的 linux 內核文件是以 .xz 結尾的,我們要用下面的命令進行解壓:
xz ndash;d linux-5.8.10.tar.xz
(2)然后就會得到上圖的文件了; 下面來正式解壓文件了:
root@txp-virtual-machine:/home/txp/share01# tar xvf linux-5.8.10.tar
(3)然后切換到解壓得到的文件目錄下,并進行一些前期準備:
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)然后安裝一些插件,這里我已經提前試過錯了,所以只要安裝下面的安裝配置就行(當前第一次進行 make menuconfig 的時候,可以根據報錯信息來進行安裝一些配置):
sudo apt-get install libncurses5-dev flex bison libssl-dev
(5)進行 make menuconfig, 出現了那個界面并 save 退出(可以直接按鍵盤上的 esc 鍵退出):
(6)開始編譯內核,這里可以根據你的電腦是多少核處理器來進行編譯配置(我的電腦是戰神,四核處理器)
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
注:因為是最新內核,編譯的時間比較久,所以耐心等待就行了(大概至少幾十分鐘。。。。。。),在編譯的時候,我們也可以看一下內存的情況:
htop
(7)如果你要修改當前 ubuntu 的內核版本,可以按照下面的操作來進行,我這里就沒有去更換內核了,配置了太多東西,所以就。
當前內核版本:
root@txp-virtual-machine:/home/txp/share01/linux-5.8.10# uname -r 5.3.0-28-generic
a、先進行安裝編譯內核模塊:
make modules_install
make bzImage
b、安裝新編譯的內核(把我們剛才編譯的新內核進行替換當前內核):
$ 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 ndash;c ndash;k 5.8.10 $ update-grub
關于如何理解 Linux 內核編譯就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。