當前位置:首頁 » 編程軟體 » kdump內核編譯新內核配置

kdump內核編譯新內核配置

發布時間: 2023-03-10 23:27:49

linux內核驅動佔用時間多久會導致內核崩潰

設置
1.安裝kexec-tools工具,至於如何安裝,在此不再多 說。
2.編譯支持kmp的系統內核,我們叫他primary kernel。
確認以下內核選項已經被打開並重編內核。
1) 使能"kexec system call => Processor type and features." ,使內核支持kexec系統調用
CONFIG_KEXEC=y
2) 使能"Filesystem" => "Pseudo
filesystems."=> "sysfs file system support"
CONFIG_SYSFS=y
注意:如果"General Setup."=>"Configure standard kernel features (for small system)" 沒有打開的話,"sysfs file system support"可能並不會在"Pseudo
filesystems."中出現,如果是 這種情況,可以直接檢nfig文件,確認CONFIG_SYSFS是不是已經開啟。
grep 'CONFIG_SYSFS'nfig
3)使能"Kernel hacking."=>"Compile the kernel with debug info" ,保證編譯出的內核帶有調試符號。因為mp分析工具在讀取和分析mp文件時需要這些調試符號。
CONFIG_DEBUG_INFO=Y
3. 編譯mp-capture kernel
針對不同的架構,內核選項也有不同,但是不論哪種架構,以下兩個選項是必選的
"Processor type and features"=> "kernel crash mps"
CONFIG_CRASH_DUMP=y
"Filesystems" => "Pseudo filesystems"=>"/proc/vmcore support"
CONFIG_PROC_VMCORE=y
(當 CONFIG_CRASH_DUMP 被選中時,CONFIG_PROC_VMCORE會被自動選中)
下面我們看一下針對不同的架構,編 譯內核還有哪些特殊的選項
1)i386 和x86_64
*在i386上,使能高內存支持"Processor type and features"=>"high memory support"
CONFIG_HIGHMEM64G=y
or
CONFIG_HIGHMEM4G
* 在i386 和x86_64上,關閉"Processor type and features"=>"symmetric multi-processing support"
CONFIG_SMP=n
如果沒有將該選項設為n,則需要在載入mp- capture kernel時指定參數maxcpus=1。
*如果想編譯一個載入地址可浮動的內核,則選中"Processor type and features"=>"Build a relocatable kernel"
CONFIG_RELOCATABLE=y
* 設置合適的值給"Processor type and features"=>"Physical address where the kernel is loaded"
該值的設置與內核載入地址是否是可浮動的(即是否選中CONFIG_RELOCATABLE)有關。
如 果內核載入地址不可浮動, 則該值必須與crashkernel=Y@X中的X相同(至於crashkernel=Y@X的含義即如何使用將在後面講到),例 如:crashkernel=64M@16M,則CONFIG_PHYSICAL_START=0x100000
0。
如果內核載入地址可 浮動,則CONFIG_PHYSICAL_START的值便可不必在意,使用默認的即可。不過為了保險起見,為了能使kmp正確執 行,CONFIG_PHYSICAL_START的值不論在何時,都要於X的值相同。
2)ppc64
除了前面兩個必須的選項,其 余選項默認即可。
3)ia64
除了前面兩個必須的選項,其餘選項默認即可。
4.准備好兩個內核後,即可按如下步 驟使用kmp
1)使用primary kernel啟動系統,但是要在啟動參數中加入「crashkernel=Y@X」,Y表示為mp-capture kernel 預留了多少內存空間,X該段空間的起始地址,即內核選項中CONFIG_PHYSICAL_START的值。
對於x86和x86_64架構,一般 使用crashkernel=64M@16M,CONFIG_PHYSICAL_START=0x1000000
對於ppc64架構,一般使用 crashkernel=128M@32M,CONFIG_PHYSICAL_START=0x2000000
對於ia64架構,通常使用 crashkernel=256M@256M。
2)載入mp-capture kernel
系統啟動後,即可載入mp- capture kernle。
不同的架構,可以選擇使用為壓縮的mp-capture kernle (vmlinux) 或者壓縮過的mp-capture kernle(bzImage/vmlinuz)。
i386 和x86_64:
如果mp-capture kernel編譯時未選中CONFIG_RELOCATABLE,則只能使用vmlinux
如果mp-capture kernel編譯時打開了CONFIG_RELOCATABLE,則可以使用bzImage/vmlinuz
ppc64 :
只能使用vmlinux
ia64:
可以使用vmlinux或者vmlinuz.gz
載入方法:
kexec -p <mp-capture-kernel-vmlinux-image> \
--initrd=<initrd-for-mp-capture-kernel> --args-linux \
--append="root=<root-dev> <arch-specific-options>"
mp- capture-kernel-vmlinux-image:表示存放mp-capture kernel 的路徑
initrd-for- mp-capture-kernel:表示initrd的路徑,如果沒有,可以省略該參數
--args-linux:表示Pass linux kernel style options,沒看明白什麼意思,但是ia64架構不需要加這個參數,其他架構都要有。
--append: 該參數後跟內核啟動參數。
arch-specific-options:內核啟動參數的一部分,該處根據不同架構,填寫不同參數。 i386, x86_64 和 ia64 填"1 irqpoll maxcpus=1 reset_devices",ppc64填"1 maxcpus=1 noirqdistrib reset_devices"。
註:
默認情況下,ELF文件頭採用ELF64格式存儲以支持那些擁有超過 4GB內存的系統。但是可以指定「--elf32-core-headers」標志以 強制使用ELF32格式的ELF文件頭。這個標志是有必要注意的,一個重要的原因就是:當前版本的GDB不能在一個32位系統上打開一個使用ELF64格 式的vmcore文件。ELF32格式的文件頭不能使用在一個「沒有物理地址擴展」(non-PAE)的系統上。(即是說,少於4GB內存的系統)
1 這個參數,將啟動「轉儲捕捉內核」到一個沒有網路支持的單用戶模式。如果你希望有網路支持,那麼使用「init 3」
maxcpus=1,這個前 面說過,如果CONFIG_SMP=n,則需要在啟動參數中加入maxcpus=1。
irqpoll 的啟動參數可以減低由於在「轉儲捕獲內核」中使用了「共享中斷」技術而導致出現驅動初始化失敗這種情況發生的概率。
舉例:
kexec -p /boot/vmlinux_capture --args-linux --append="root=/dev/nfs rw nfsroot=128.224.149.6:/tftpboot/cxu/15554/rootfs ip=dhcp console=ttyS0,115200 1 maxcpus=1 noirqdistrib reset_devices"
3)測試 kmp是否成功
手動產生一個crash:echo c > /proc/sysrq-trigger。
或者可以些一個強制產生 crash的模塊。
如果成功,系統將會進入熱啟動過程,系統啟動完成後,可以執行一下uname -a ,看看內核的名字是不是有-kmp的標簽呢?
然後就可以把生成的轉儲文件vmcore拷貝出來了,直接cp即可:
cp /proc/vmcore <anywhere>
也可以通過/dev/oldmem這個設備將其考出:
cd ~
mknod /dev/oldmem c 1 12
dd if=/dev/oldmem of=oldmem.001
成功將vmcore 拷貝出來後即可重啟系統了。
4)分析vmcore文件
在開始分析「轉儲文件」之前,應該確定重啟到一個穩定的內核。
可以 使用GDB在『轉儲文件』上做有限的分析。分析的時候需要「帶有調試信息的vmlinux文件」(編譯的時候帶有-g選項),運行如下命令:
gdb vmlinux vmcore
注意:GDB不能分析x86平台上以ELF64格式產生的「內核轉儲文件」。在一個最大內存為4GB的系統上,可 以通過在「轉儲捕捉內核」上指定「--elf32-core-headers」標志來使用ELF32格式的文件頭。
也可以使用Crash工具集來 分析Kmp產生的「內核轉儲文件」,crash 工具可以到網上下載:
~anderson/
以上文檔主要是翻譯自內核自帶文檔linux/Documentation/kmp/kmp.txt,部分使用自己的語言表達。如有錯誤,請指正。
標簽: 內核崩潰轉儲機制 Linux

② Kmp 在linux系統中是什麼意思 具體做什麼用

kmp是在系統崩潰、死鎖或者死機的時候用來轉儲內存運行參數的一個工具和服務。
打個比方,如果系統一旦崩潰那麼正常的內核就沒有辦法工作了,在這個時候將由kmp產生一個用於capture當前運行信息的內核,該內核會將此時的內存中的所有運行狀態和數據信息收集到一個mp
core文件中以便於RedHat工程師分析崩潰原因,一旦內存信息收集完成,系統將自動重啟。這和以前的diskmp,netmp是同樣道理。只不過kmp是RHEL6特有的。
查看Linux系統是否打開kmp:
執行命令:ulimit -c 如果輸出為 0 ,則代表沒有打開。如果為unlimited則已經打開。
臨時打開/關閉Linux的Kmp方法:
ulimit-c unlimited 打開;
ulimit-c 0 關閉;
修改配置文件進行打開/關閉kmp方法:
1.vi/ect/profile文件在文件末尾加入新行,ulimit-s-c unlimited>/dev/null 2>&1
2.保存退出:wq!
3.執行source/etc/profile 使當期設置生效
4.通過ulimit-c 查看下是否已經成功打開。

③ virtualbox里的linux在啟動的時候提示說memory for crash kernel(0*0 to 0*0)notwithin permissible range

解決辦法:
這個信息由於沒有配置kmp服務的原因,並沒有什麼危害可以忽略。
kmp是一個新的,而且非常可信賴的內核崩潰轉儲機制。崩潰轉儲數據可以從一個新啟動的內核的上下文中獲取,而不是從已經崩潰的內核的上下文。當系統崩潰時,kmp使用kexec啟動到第二個內核。第二個內核通常叫做捕獲內核(capture kernel),以很小內存啟動,並且捕獲轉儲鏡像。

方法一,在圖形模式下配置:
我們可以採用下面的圖形界面進行配置和啟用,步驟如下:
----配置kmp。
選擇菜單「Applications」——「system tools」——「kmp」,彈出「Kernel Dump Configuration」窗口,選中Enable kmp,設置New kmp Memory(MB): 128MB(推薦大小)
----重新啟動系統。

方法二: 編輯/etc/grub.conf,在內核行的末尾添加 crashkernel=128@16M。
舉例:
kernel /boot/vmlinuz-2.6.17-1.2519.4.21.el5 ro root=LABEL=/ rhgb quiet crashkernel=128M@16M
修改之後,重啟系統。128M內存(從16M開始)不被正常的系統使用,為捕獲內核保留。
現在,保留內存已經設置了,打開kmp初始腳本,啟動服務:
# chkconfig kmp on
# service kmp start

試試以上的方法,不行的話,再跟問!!!

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:741
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1005
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:712
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:874
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:773
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1120
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:346
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:224
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:910
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:869