定位linux 核心oops具體程式碼的簡便方法
通常是使用objdump對檔案反彙編,然後去查詢對應錯誤,下面介紹兩種更簡單的方法:
方法一:
假如我們要檢視0xffffffff8124d1f9地址對應的是核心中哪個檔案哪一條程式碼,可以按照如下方法來做:
~/crosstools/x86_64_gcc6.2.0_glibc2.24.0/bin/x86_64-pc-linux-gnu-addr2line -e vmlinux -a ffffffff8124d1f9
方法二:
啟動一個完好的核心,然後在啟動的核心中匯入 上次發生oops的核心映象vmlinux 和 gdb 工具到當前目錄下。
假設上次發生oops時pc指標在0x8025a898,然後執行如下命令:
# gdb vmlinux
# (gdb) b*0x8025a898
這樣就可以看到出現oops時出現在核心原始碼的哪個檔案、哪一行。
相關推薦
定位linux 核心oops具體程式碼的簡便方法
通常是使用objdump對檔案反彙編,然後去查詢對應錯誤,下面介紹兩種更簡單的方法: 方法一: 假如我們要檢視0xffffffff8124d1f9地址對應的是核心中哪個檔案哪一條程式碼,可以按照如下方法來做: ~/crosstools/x86_64_gcc6.2.0_glibc2
Linux核心之GDB基本除錯方法
Oops[#1]:Cpu 0$ 0 : 00000000 10008d00 00000000 ffffffea$ 4 : fffffdfd 10008d01 00000001 00000000$ 8 : 00000000 7fed2e40 00001cb2 00000b3b$12 : 0003
Linux核心多執行緒實現方法
參考:http://blog.csdn.net/sharecode/article/details/40076951 1.建立執行緒方法1 kthread_create: 建立執行緒;改函式建立執行緒後,不會馬上執行
定位Oops的具體程式碼行分析宕機日誌的方法
例如這樣的一個Oops: Oops: 0000 [#1] PREEMPT SMP Modules linked in: capidrv kernelcapi isdn slhc ipv6 loop dm
linux裝置驅動第四篇:從如何定位oops的程式碼行談驅動除錯方法
上一篇我們大概聊瞭如何寫一個簡單的字元裝置驅動,我們不是神,寫程式碼肯定會出現問題,我們需要在編寫程式碼的過程中不斷除錯。在普通的c應用程式中,我們經常使用printf來輸出資訊,或者使用gdb來除錯程式,那麼驅動程式如何除錯呢?我們知道在除錯程式時經常遇到的問題就是野指標
linux裝置驅動:從如何定位oops的程式碼行談驅動除錯方法
在普通的c應用程式中,我們經常使用printf來輸出資訊,或者使用gdb來除錯程式,那麼驅動程式如何除錯呢?我們知道在除錯程式時經常遇到的問題就是野指標或者陣列越界帶來的問題,在應用程式中執行這種程式就會報segmentation fault的錯誤,而由於驅動程
根據核心Oops 定位程式碼
核心開發時有時候出現Oops,例如一個野指標會導致核心崩潰,如執行時出現以下log:現在有三種方法可以找出具體出現野指標的地方 5.438972] bells bells: wm5102-aif1 <-> samsung-i2s.0 mapping o
Linux核心裁剪的具體過程和方法
能夠完成系統的基本功能,上網,收發郵件等,支援xwindows圖形介面。 在menuconfig中配置: 詳細介紹核心配置選項及刪改情況 第一部分:全部刪除 Code maturity level options ---> 程式碼成熟等
根據核心Oops 定位程式碼工具使用— addr2line 、gdb、objdump
(這三種工具都在out/host/linux-x86目錄下) 核心開發時有時候出現Oops,例如一個野指標會導致核心崩潰,如執行時出現以下log:現在有三種方法可以找出具體出現野指標的地方 [plain] view plain copy print? 5.438972] bells be
從Linux核心程式碼中學習獲得結構體成員偏移量的方法
作者:阿波(幾年前的一篇文章,翻出來共享一下。)Content0. 引子1.舉例(1) 程式碼(2) 檢查結果(3) 為什麼從0開始?(4) 從非0地址開始的結果2.小結0. 引子在linux-2.26
Linux系統下python程式碼執行shell命令的方法
方法一:os.popen #!/usr/bin/python # -*- coding: UTF-8 -*- import os, sys # 使用 mkdir 命令 a = 'ls' b = os.popen(a,'w',1) print b 方法二:os.system #!/
Linux 核心 SMP 程式碼追蹤 --- cpumask
for_each_present_cpu(cpu); 遍歷全部可用的CPU。這裡對CPU的狀態進行區分主要是為了動態管理CPU ,進一步實現虛擬化。 #define for_each_present_cpu(cpu) for_each_cpu((cpu), cpu_present_mask)
linux 核心程式碼分析1 TI am335x
1. TI AM335x 核心原始碼分析 1.1 Board-am335xevm.c Board-am335xevm.c(./arch/arm/mach-omap2)中開始執行入口: MACHINE_START(A
[精彩] 【轉】Linux核心裁剪的具體步驟
在menuconfig中配置: 詳細介紹核心配置選項及刪改情況 第一部分:全部刪除 Code maturity level options ---> 程式碼成熟等級選項 []Prompt for development and/or incomplete cod
定位Oops錯誤程式碼行【整理】
[17184178.672000] Bad mode in data abort handler detected[17184178.672000] Internal error: Oops - bad mode: 0 [#1] PREEMPT[17184178.672000] CPU: 0&
Linux核心Bridge程式碼
註冊 module_init(br_init) static int __init br_init(void) { ... err = br_netfilter_init(); ... br_handle_frame_hook = br_handle
git+webstorm 簡便方法:檢視檔案被修改程式碼記錄
甩鍋和找問題的技能啊 因為昨天系統升級出現了一個bug,大領導讓我下班前改完,同時找找什麼原因(原話是:誰修改了這塊引出了bug,讓我blame一下,看看修改記錄),當時沒注意,等改完merge的時候,直屬領導問我blame沒有 ,我一臉懵逼。希望對用git和webst
使用yum更新時不升級Linux核心的方法
由於系統與硬體的相容性問題,有可能升級核心後導致伺服器不能正常啟動,這是非常可怕的,如果沒有特別的需要,建議不要隨意 升級核心! RedHat/CentOS/Fedora使用 yum update
Linux核心升級方法與步驟
1. 檢視linux核心版本:# uname -r 2.6.18-194.el5 2. 下載新的核心版本: 去官網上下載最新的核心版本和對應的補丁: https://www.kernel.org/ 選的是3.2.14#wget -c http://www.kernel.org/pub/li
精簡Linux核心編譯的簡單方法
關於Linux核心的編譯 採用先make defconfig、make menuconfig再make localmodconfig,並將後2者反覆應用的過程。最後能達到比較簡單的過程。基本上採取了做加法(將硬體驅動或模組依次加上,逐步改進)的思路。 簡述如下: 1、下載原始碼並建立編譯工作目錄