亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: zhaochongzq
打印 上一主題 下一主題

[網(wǎng)絡(luò)子系統(tǒng)] Kernel panic - not syncing: Attempted to kill init! [復(fù)制鏈接]

論壇徽章:
20
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
11 [報告]
發(fā)表于 2016-03-16 11:47 |只看該作者
“測試路由器WAN口連接方式和連接5G的SSID”
這個任務(wù)是由1號進(jìn)程自己來做么?沒有fork子進(jìn)程?

論壇徽章:
0
12 [報告]
發(fā)表于 2016-03-16 13:34 |只看該作者
回復(fù) 11# nswcfd

我們這邊的軟件組織架構(gòu)比較蛋疼,一般都是webserver接收到用戶配置信息,然后發(fā)送信號通知init進(jìn)程,然后init進(jìn)程再去調(diào)用相關(guān)的函數(shù)或者通過system調(diào)用其它進(jìn)程。所以如果init進(jìn)程錯誤退出,系統(tǒng)就掛了。
   

論壇徽章:
0
13 [報告]
發(fā)表于 2016-03-16 13:37 |只看該作者
回復(fù) 8# Tinnal

是啊,就是什么多余的信息都沒有才不知道該從哪兒入手。
   

論壇徽章:
0
14 [報告]
發(fā)表于 2016-03-16 13:38 |只看該作者
回復(fù) 9# zhayun604863141

好的,我編個軟件測試一下,看bug復(fù)現(xiàn)時能不能多點(diǎn)提示信息。
   

論壇徽章:
0
15 [報告]
發(fā)表于 2016-03-18 09:40 |只看該作者
回復(fù) 9# zhayun604863141

(04:07:36)Bus einit/1: potentially unexpected fatal signal 11.
(04:07:36)rr
(04:07:36)orCpu 0
(04:07:36)
(04:07:37)$ 0   : 00000000 00000001 004a6008 2e65682f
(04:07:37)$ 4   : 2ae66500 00000002 00000048 2ae6b164
(04:07:37)$ 8   : 00000000 00000000 800b45a0 fffffff8
(04:07:37)$12   : 00000000 00000000 0000007e 00000000
(04:07:37)$16   : 004a5fd0 00000049 2ae6b100 00000007
(04:07:37)$20   : 00010021 00000001 00000038 2ad8e3e8
(04:07:37)$24   : 00000000 2adf5898                  
(04:07:37)$28   : 2ae6e520 7f9cd9b0 7f9ceb48 2ae14150
(04:07:37)Hi    : 00000005
(04:07:37)Lo    : 70a3d70f
(04:07:37)epc   : 2ae14240 0x2ae14240
(04:07:37)    Not tainted
(04:07:37)ra    : 2ae14150 0x2ae14150
(04:07:37)Status: 0100ff13    USER EXL IE
(04:07:37)Cause : 4080000c
(04:07:37)BadVA : 00000050
(04:07:37)PrId  : 00019650 (MIPS 24Kc)
(04:07:37)Kernel panic - not syncing: Attempted to kill init!
(04:07:37)Call Trace:
(04:07:37)[<8001a508>] dump_stack+0x8/0x34
(04:07:37)[<8003b678>] panic+0x88/0x1cc
(04:07:37)[<8003f184>] do_exit+0x484/0x688
(04:07:37)[<8003f40c>] do_group_exit+0x4c/0xb4
(04:07:37)[<8004c3fc>] get_signal_to_deliver+0x2c0/0x3d8
(04:07:37)[<800196e8>] do_notify_resume+0x124/0x460
(04:07:37)[<80008568>] work_notifysig+0xc/0x14

從log信息看,init進(jìn)程出現(xiàn)了段錯誤,是不是可以確定是init進(jìn)程訪問了非法內(nèi)存地址,導(dǎo)致內(nèi)核kill掉了init,然后卡死。
   

論壇徽章:
1
金牛座
日期:2014-08-18 17:32:41
16 [報告]
發(fā)表于 2016-03-24 09:31 |只看該作者
potentially unexpected fatal signal 11.

11是SIGSEGV,檢查每一個使用指針,訪問數(shù)組地址之類的地方

論壇徽章:
0
17 [報告]
發(fā)表于 2016-03-24 22:06 |只看該作者
回復(fù) 15# zhaochongzq
是的,空指針BadVA : 00000050,      epc   : 2ae14240應(yīng)該就是空指針被引用的地方,反匯編查查epc 、ra對應(yīng)的2ae14240 2ae14150 位于何處?


   

論壇徽章:
0
18 [報告]
發(fā)表于 2016-03-28 14:52 |只看該作者
回復(fù) 17# zhayun604863141


用objdump反匯編出來的代碼找不到該地址。

論壇徽章:
0
19 [報告]
發(fā)表于 2016-03-30 23:03 |只看該作者
回復(fù) 18# zhaochongzq
sorry,找不到應(yīng)該是因為這兩個地址都在庫文件里面, 你可以在問題出現(xiàn)問題前任意時間,打印下init的maps,然后確認(rèn)是在哪個庫文件的哪個函數(shù)。

不過以上,你只能找到是掛在庫文件的哪個函數(shù),但是init中可能有多處調(diào)用該函數(shù),比如可能是strcpy,也有可能是間接調(diào)用該函數(shù)。所以需要打印出init掛掉時的calltrace,MIPS的,你可以參照百度搜一下“基于MIPS架構(gòu)的BackTrace實(shí)現(xiàn)”,參照實(shí)現(xiàn)一個。

我沒有權(quán)限發(fā)鏈接,不過網(wǎng)上有很多。



   

論壇徽章:
0
20 [報告]
發(fā)表于 2016-03-30 23:12 |只看該作者
回復(fù) 19# zhayun604863141

找打一個現(xiàn)成的了,在init中注冊該信號函數(shù)試試,看能否在掛的是否打印出調(diào)用棧。 實(shí)現(xiàn)原理參照百度搜索“基于MIPS架構(gòu)的BackTrace實(shí)現(xiàn)”

如果不行的話,將其提前到內(nèi)核中捕捉異常信息時打印,移到內(nèi)核時,訪問用戶內(nèi)存時,注意下使用get_user。
  1. #include <stdio.h>      
  2. #include <string.h>     
  3. #include <stdlib.h>     
  4. #include <signal.h>     
  5. #include <ucontext.h>   
  6.       
  7. #define abs(s) ((s) < 0 ? -(s) : (s))  
  8.       
  9. #define CALL_TRACE_MAX_SIZE             (10)  
  10.       
  11. #define MIPS_ADDIU_SP_SP_XXXX           (0x27bd0000) /* instruction code for addiu sp, sp, xxxx */  
  12. #define MIPS_SW_RA_XXXX_SP              (0xafbf0000) /* instruction code for sw ra, xxxx(sp) */  
  13. #define MIPS_ADDU_RA_ZERO_ZERO          (0x0000f821) /* instruction code for addu ra, zero, zero */

  14. void getCodeIn(unsigned long codeAddr, char *pCodeIn, int iCodeInSize, unsigned long *pOffset)                                 
  15. {     
  16.     FILE *pFile = NULL;
  17.     char szLine[1000] = {0};

  18.     pFile = fopen("/proc/self/maps", "r");  
  19.     if ( pFile != NULL )
  20.     {
  21.         while (fgets(szLine, sizeof(szLine), pFile))
  22.         {     
  23.             char *pTmp = NULL;      
  24.             char szAddr[500] = {0};  
  25.             char szCodeIn[500] = {0};
  26.             unsigned long begin = 0;
  27.             unsigned long end = 0;   

  28.             sscanf(szLine, "%s %*s %*s %*s %*s %s", szAddr, szCodeIn);

  29.             pTmp = strchr(szAddr, '-');
  30.             if ( pTmp != NULL )
  31.             {
  32.                 *pTmp++ = '\0';
  33.                 begin = strtoul(szAddr, NULL, 16);        
  34.                 end = strtoul(pTmp, NULL, 16);        
  35.             }

  36.             if ( codeAddr >= begin && codeAddr <= end )
  37.             {
  38.                 strncpy(pCodeIn, szCodeIn, iCodeInSize);
  39.                 *pOffset = codeAddr - begin;
  40.                 return;
  41.             }
  42.         }

  43.         fclose(pFile);
  44.     }   

  45.     strncpy(pCodeIn, "unknown", iCodeInSize);
  46.     *pOffset = 0;
  47. }

  48. int backtrace_mips32(void **buffer, int size, ucontext_t *uc)  
  49. {        
  50.     unsigned long *tmpl = NULL;  
  51.     unsigned long *addr = NULL;  
  52.     unsigned long *ra = NULL;  
  53.     unsigned long *sp = NULL;  
  54.     unsigned long *pc = NULL;  
  55.     size_t         ra_offset = 0;  
  56.     size_t         stack_size = 0;  
  57.     int            depth = 0;  

  58.     if (size == 0)  
  59.     {   
  60.         return 0;   
  61.     }   

  62.     if (buffer == NULL || size < 0 || uc == NULL)                                                                              
  63.     {   
  64.         return -1;   
  65.     }   

  66.     pc = (unsigned long *)(unsigned long)uc->uc_mcontext.pc;   
  67.     ra = (unsigned long *)(unsigned long)uc->uc_mcontext.gregs[31];   
  68.     sp = (unsigned long *)(unsigned long)uc->uc_mcontext.gregs[29];

  69.     buffer[0] = pc;

  70.     if ( size == 1 )  
  71.     {  
  72.         return 1;   
  73.     }

  74.     for ( addr = pc; !ra_offset || !stack_size; --addr )  
  75.     {  
  76.         if ( ((*addr) & 0xffff0000) == MIPS_SW_RA_XXXX_SP)  
  77.         {  
  78.             ra_offset = (short)((*addr) & 0xffff);   
  79.         }  
  80.         else if ( ((*addr) & 0xffff0000) == MIPS_ADDIU_SP_SP_XXXX)  
  81.         {  
  82.             stack_size = abs((short)((*addr) & 0xffff));  
  83.         }  
  84.         else if ( (*addr) == MIPS_ADDU_RA_ZERO_ZERO )  
  85.         {  
  86.             return 1;   
  87.         }  
  88.     }

  89.     if ( ra_offset > 0 )  
  90.     {  
  91.         tmpl = (unsigned long *)((char *)sp + ra_offset);  
  92.         ra = (unsigned long *)(*tmpl);  
  93.     }  

  94.     if ( stack_size > 0 )   
  95.     {  
  96.         sp = (unsigned long *)((unsigned long)sp + stack_size);  
  97.     }  


  98.     for (depth = 1; depth < size && ra; ++depth)  
  99.     {  
  100.         buffer[depth] = ra;  



  101.         ra_offset = 0;  
  102.         stack_size = 0;

  103.         for (addr = ra; !ra_offset || !stack_size; --addr)
  104.         {   
  105.             if ( ((*addr) & 0xffff0000) == MIPS_SW_RA_XXXX_SP)
  106.             {
  107.                 ra_offset = (short)((*addr) & 0xffff);
  108.             }
  109.             else if ( ((*addr) & 0xffff0000) == MIPS_ADDIU_SP_SP_XXXX)  
  110.             {
  111.                 stack_size = abs((short)((*addr) & 0xffff));
  112.             }
  113.             else if ( (*addr) == MIPS_ADDU_RA_ZERO_ZERO )
  114.             {
  115.                 return depth + 1;
  116.             }
  117.         }   

  118.         tmpl = (unsigned long *)((char *)sp + ra_offset);
  119.         ra = (unsigned long *)(*tmpl);
  120.         sp = (unsigned long *)((unsigned long)sp + stack_size);
  121.     }

  122.     return depth;
  123. }

  124. void signal_process(int sig_no, siginfo_t *sig_info, void *ucontext)     
  125. {                                                                       
  126.     int i = 0;                                                           
  127.     unsigned long *callStack[CALL_TRACE_MAX_SIZE] = {0};               

  128.     printf("\r\n*******************************************\r\n");      

  129.     printf("recv signo %d\r\n", sig_no);                       

  130.     backtrace_mips32((void **)callStack, CALL_TRACE_MAX_SIZE, (ucontext_t *)ucontext);  

  131.     printf("\r\ncall tracing:\r\n");                           
  132.     for ( i = 0; i < CALL_TRACE_MAX_SIZE; i++ )               
  133.     {         
  134.         char szCodeIn[100] = {0};
  135.         unsigned long addrOffset = 0;                          

  136.         if ( callStack[i] == 0 )                              
  137.         {                             
  138.             break;                  
  139.         }     

  140.         getCodeIn((unsigned long)callStack[i], szCodeIn, sizeof(szCodeIn), &addrOffset);

  141.         printf("\t[%02d] addr 0x%08x(offset 0x%08x), in %s\r\n", i, callStack[i], addrOffset, szCodeIn);   
  142.     }                                

  143.     printf("*******************************************\r\n");  

  144.     if (sig_no == SIGSEGV)           
  145.     {                                 
  146.         signal(sig_no, SIG_DFL);     
  147.     }   

  148.     sleep(3);                        
  149. }

  150. void c(void)                    
  151. {                                       
  152.     int *p = 0;                        
  153.     printf("I am function [c]\r\n");   
  154.     *p = 888;
  155. }  

  156. void b(void)
  157. {   
  158.     printf("I am function [b]\r\n");
  159.     c();
  160. }   

  161. void a(void)
  162. {   
  163.     printf("I am function [a]\r\n");
  164.     b();
  165. }


  166. int main(int argc, char *argv[])
  167. {   
  168.     struct sigaction act = {0};

  169.     act.sa_sigaction = signal_process;
  170.     sigemptyset(&act.sa_mask);
  171.     act.sa_flags = SA_SIGINFO;

  172.     sigaction(SIGSEGV, &act, NULL);

  173.     printf("I am function [main]\r\n");

  174.     a();

  175.     return 0;
  176. }
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP