.. SPDX-License-Identifier: GPL-2.0 .. include:: ../disclaimer-zh_TW.rst :Original: :doc:`../../../admin-guide/init` :è¯è€…: 峿ƒ³æˆ Wu XiangCheng <bobwxc@email.cn> 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> 解釋“No working init found.â€å•“å‹•æŽ›èµ·æ¶ˆæ¯ ========================================= :作者: Andreas Mohr <andi at lisas period de> Cristian Souza <cristianmsbr at gmail period com> 本文檔æä¾›äº†åŠ è¼‰åˆå§‹åŒ–二進制(init binaryï¼‰å¤±æ•—çš„ä¸€äº›é«˜å±¤ç´šåŽŸå› ï¼ˆå¤§è‡´æŒ‰åŸ·è¡Œ é †åºåˆ—出)。 1) **ç„¡æ³•æŽ›è¼‰æ ¹æ–‡ä»¶ç³»çµ±Unable to mount root FS** :請è¨ç½®â€œdebugâ€å…§æ ¸åƒæ•¸ï¼ˆåœ¨ å¼•å°ŽåŠ è¼‰ç¨‹åºbootloaderé…置文件或CONFIG_CMDLINE)以ç²å–æ›´è©³ç´°çš„å…§æ ¸æ¶ˆæ¯ã€‚ 2) **åˆå§‹åŒ–二進制ä¸å˜åœ¨æ–¼æ ¹æ–‡ä»¶ç³»çµ±ä¸Šinit binary doesn't exist on rootfs** : ç¢ºä¿æ‚¨çš„æ ¹æ–‡ä»¶ç³»çµ±é¡žåž‹æ£ç¢ºï¼ˆä¸¦ä¸” ``root=`` å…§æ ¸åƒæ•¸æŒ‡å‘æ£ç¢ºçš„分å€ï¼‰ï¼›æ“有 所需的驅動程åºï¼Œä¾‹å¦‚SCSI或USBç‰å˜å„²ç¡¬ä»¶ï¼›æ–‡ä»¶ç³»çµ±ï¼ˆext3ã€jffs2ç‰ï¼‰æ˜¯å…§å»ºçš„ (或者作爲模塊由initrdé åŠ è¼‰ï¼‰ã€‚ 3) **控制檯è¨å‚™æå£žBroken console device** : ``console= setup`` ä¸å¯èƒ½å˜åœ¨ è¡çª --> åˆå§‹æŽ§åˆ¶æª¯ä¸å¯ç”¨ï¼ˆinitial console unavailable)。例如,由於串行 IRQå•é¡Œï¼ˆå¦‚ç¼ºå°‘åŸºæ–¼ä¸æ–·çš„é…置)導致的æŸäº›ä¸²è¡ŒæŽ§åˆ¶æª¯ä¸å¯é 。嘗試使用ä¸åŒçš„ ``console= device`` æˆ–åƒ ``netconsole=`` 。 4) **二進制å˜åœ¨ä½†ä¾è³´é …ä¸å¯ç”¨Binary exists but dependencies not available** : 例如åˆå§‹åŒ–二進制的必需庫ä¾è³´é …ï¼Œåƒ ``/lib/ld-linux.so.2`` 丟失或æå£žã€‚使用 ``readelf -d <INIT>|grep NEEDED`` 找出需è¦å“ªäº›åº«ã€‚ 5) **ç„¡æ³•åŠ è¼‰äºŒé€²åˆ¶Binary cannot be loaded** :請確ä¿äºŒé€²åˆ¶çš„é«”ç³»çµæ§‹èˆ‡æ‚¨çš„ 硬件匹é…。例如i386ä¸åŒ¹é…x86_64,或者嘗試在ARMç¡¬ä»¶ä¸ŠåŠ è¼‰x86。如果您嘗試在 æ¤è™•åŠ è¼‰éžäºŒé€²åˆ¶æ–‡ä»¶ï¼ˆshell腳本?),您應該確ä¿è…³æœ¬åœ¨å…¶å·¥ä½œé (shebang header)行 ``#!/...`` 䏿Œ‡å®šèƒ½æ£å¸¸å·¥ä½œçš„解釋器(包括其庫ä¾è³´é …ï¼‰ã€‚åœ¨è™•ç† è…³æœ¬ä¹‹å‰ï¼Œæœ€å¥½å…ˆæ¸¬è©¦ä¸€å€‹ç°¡å–®çš„éžè…³æœ¬äºŒé€²åˆ¶æ–‡ä»¶ï¼Œæ¯”如 ``/bin/sh`` ï¼Œä¸¦ç¢ºèª å®ƒèƒ½æˆåŠŸåŸ·è¡Œã€‚è¦äº†è§£æ›´å¤šä¿¡æ¯ï¼Œè«‹å°‡ä»£ç¢¼æ·»åŠ åˆ° ``init/main.c`` 以顯示 kernel_execve()的返回值。 ç•¶æ‚¨ç™¼ç¾æ–°çš„å¤±æ•—åŽŸå› æ™‚ï¼Œè«‹æ“´å±•æœ¬è§£é‡‹ï¼ˆç•¢ç«ŸåŠ è¼‰åˆå§‹åŒ–二進制是一個 **é—œéµ** 且 è‰±é›£çš„éŽæ¸¡æ¥é©Ÿï¼Œéœ€è¦å„˜å¯èƒ½ç„¡ç—›åœ°é€²è¡Œï¼‰ï¼Œç„¶å¾Œå‘LKMLæäº¤ä¸€å€‹è£œä¸ã€‚ å¾…è¾¦äº‹é …ï¼š - 通éŽä¸€å€‹å¯ä»¥å˜å„² ``kernel_execve()`` çµæžœå€¼çš„çµæ§‹é«”數組實ç¾å„種 ``run_init_process()`` 調用,並在失敗時通éŽè¿ä»£ **所有** çµæžœä¾†è¨˜éŒ„一切 (éžå¸¸é‡è¦çš„å¯ç”¨æ€§ä¿®å¾©ï¼‰ã€‚ - 試ç€ä½¿å¯¦ç¾æœ¬èº«åœ¨ä¸€èˆ¬æƒ…æ³ä¸‹æ›´æœ‰å¹«åŠ©ï¼Œä¾‹å¦‚åœ¨å—影響的地方æä¾›é¡å¤–的錯誤消æ¯ã€‚