1. 程式人生 > >linux移植過程出現“can't open /dev/tq2440_serial0: No such file or directory”

linux移植過程出現“can't open /dev/tq2440_serial0: No such file or directory”

解決辦法:在檔案系統中,/etc/inittab 中 tq2440_serial0::askfirst:-/bin/sh改為console::askfirst:-/bin/sh

原因:1)檔案系統中/etc/inittab檔案的作用:我們知道在Linux的核心被載入之後,機器就把控制權轉交給核心,linux的核心啟動之後,做了一些工作,然後找到根檔案系統裡面的init程式,並執行它,BusyBox會查/etc/inittab檔案是否存在,如果此檔案不存在,BusyBox會使用預設的inittab配置,它主要為系統重引導,系統掛起以及init重啟動設定預設的動作,此外它還會為四個虛擬控制檯(tty1到tty4)設定啟動shell的動作。

 2) inittab檔案中每一行的格式如下所示:(busybox的根目錄下的example資料夾下有詳盡的inittab檔案範例)     

  id:runlevel:action:process

          A: id在BusyBox的init中具有不同的意義。對BusyBox而言,id用來指定啟動程序的控制tty。id並不是隨便               取名字的,這個名字要與/dev/目錄下是否有對應的檔案對應

          B: action有如下動作選項(部分省略):

 respawn:每當相應的程序終止執行便會重新啟動

              askfirst:類似respawn,不過它的主要用途是減少系統上執行的終端應用程式的數量。它將會促使init                               在控制檯上顯示“Please press Enter to active this console”的資訊,並在重新啟動之前等待                             使用者按下enter鍵

  所以因為系統初始化過程無法在/dev目錄下建立 tq2440_serial0可執行目標(指令碼),因此inittab中語句 

  q2440_serial0::askfirst:-/bin/sh將無法執行,而因為一開始我已經在/dev目錄中手動建立console的空檔案指令碼,命令列為# mknod console c 5 1 (注意其中主次裝置號5,1是根據核心原始碼目錄下/drivers/serial/samsung.c中有設定),所以當tty是console而不是tq2440_serial0時,其將找到裝置檔案,故可執行。     respawn    每當相應的程序終止執行便會重新啟動

                askfirst類似respawn,不過它的主要用途是減少系統上執行的終端應用程式的數量。它將會促使init在控制檯上顯示“Please press Enter to active this console”的資訊,並在重新啟動之前等待使用者按下enter鍵