linux調試內核
『壹』 linux內核調試的主要方法
1。printk ,以及系統日誌。閱讀源碼,想像代碼運行的情況,結合列印的信息,推測問題所在。
2。內核調試器,例如 Kgdb 。
3。user mode linux 。
4。在虛擬機上調試。例如 Bochs 。
『貳』 linux內核優化參數
cat >> /etc/sysctl.conf << EOF
# kernel optimization
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
EOF # 《Linux就該這么學》
將上面的內核參數加入/etc/sysctl.conf文件中,執行如下命令使之生效:
sysctl -p
『叄』 運維必懂!怎麼查看Linux內核版本
1. 前言
內核是操作系統的核心組件。 它管理系統的資源,是計算機硬體和軟體之間的橋梁。
您可能因多種原因需要確切知道GNU / Linux操作系統上運行的內核版本。 也許您正在調試與硬體相關的問題,或者了解影響舊內核版本的新安全漏洞,並且您想知道您的內核是否易受攻擊。 無論是什麼原因,從命令行確定Linux內核版本都非常容易。
在本教程中,我們將向您展示幾種不同的方法,以找出系統上運行的Linux內核版本。
怎麼查看Linux內核版本
2. 使用`uname`命令查看Linux內核版本
uname命令顯示多個系統信息,包括Linux內核體系結構,名稱版本和發行版。
要找出系統上正在運行的Linux內核版本,請輸入以下命令:
輸出結果:
Linux 3.10.0-957.12.2.el7.x86_64 x86_64
3 - 內核版本.
10 - 主修訂版本.
0-957 - 次要修訂版本.
12 - 補丁版本.
使用uname命令查看Linux內核版本
3. 使用`hostnamectl`命令查看內核版本
hostnamectl實用程序是systemd的一部分,用於查詢和更改系統主機名。 它還顯示Linux發行版和內核版本:
Static hostname: CentOS7.linuxrumen.com
Icon name: computer-vm
Chassis: vm
Machine ID:
Boot ID:
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-957.12.2.el7.x86_64
Architecture: x86-64
使用以下命令只顯示當前內核版本:
使用hostnamectl命令查看內核版本
4. 通過查看/proc/version文件確認內核版本
/proc目錄包含虛擬文件,其中包含有關系統內存,CPU內核,已安裝文件系統等的信息。有關正在運行的內核的信息存儲在/proc/version虛擬文件中。
結合cat查看文件內容:
輸出結果如下:
Linux version 3.10.0-957.12.2.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Tue May 14 21:24:32 UTC 2019
使用hostnamectl命令查看內核版本
5.結論
我們已經向您展示了如何從命令行查找在您的系統上運行的Linux內核的版本。 這些命令適用於所有流行的Linux發行版,包括Debian,Red Hat,Ubuntu,Arch Linux,Fedora,CentOS,Kali Linux,OpenSUSE,Linux Mint等。
https://www.linuxrumen.com/rmxx/1217.html
『肆』 Linux內核調試工具KGDB
內核工具KGDB調試環境需要為Linux 內核加上 kgdb補丁,補丁實現GDB遠程調試所需要的功能,包括命令處理、陷阱處理及串口通信3個主要的部分。KGDB補丁的主要作用是在Linux 內核中添加了一個調試Stub。調試Stub是Linux 內核中的一小段代碼,是運行GDB的開發機和所調試內核之間的一個媒介。GDB和調試stub之間通過GDB串列協議進行通信。GDB串列協議是-種基於消息的ASCII 碼協議,包含了各種調試命令。當設置斷點時,KGDB將斷點的指令替換為一條 trap指令,當執行到斷點時控制權就轉移到調試 stub中去。此時,調試stub 的任務就是使用遠程串列通信協議將當前環境傳送給GDB,然後從GDB處接收命令。GDB命令告訴stub 下一步該做什麼,當stub收到繼續執行的命令時,將恢復程序的運行環境,把對 CPU的控制權重新交還給內核。KGDB補丁給內核添加以下3個部件:
(1 ) GDB stub
GDB stub被稱為調試插樁(簡稱為stub),是KGDB調試器的核心。它是Linux內核中的一小段代碼,用來處理主機上: GDB發來的各種請求;並且在內核處於被調試狀態時,控制目標機板上的處理器。
(2)修改異常處理函數
當這個異常發生時,內核將控制權交給KGDB調試器,程序進入KGDB提供的異常處理函數中。在裡面,可以分析程序的各種情況。
(3)串口通信
GDB和 stub之間通過GDB串列協議進行通信。它是一種基於消息的ASCII 碼協議,包含了各種調試命令。除串口外,也可以使用網卡進行通信。以設置內核斷點為例說明KGDB與GDB之間的工作過程。設置斷點時,KGDB修改內核代碼,將斷點位置的指令替換成一條異常指令(在ARM中這是一條未定義的指令)。當執行到斷點時發生異常,控制權轉移到stub 的異常處理函數中。此時,stub的任務就是使用GDB串列通信協議將當前環境傳送給GDB,然後從GDB處接收命令,GDB命令告訴stub下一步該做什麼。當stub收到繼續執行的命令時,將恢復原來替換的指令、恢復程序的運行環境,把對CPU的控制權重新交還給內核。