歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 構建CF卡Linux系統的風雨歷程

構建CF卡Linux系統的風雨歷程

日期:2017/2/28 16:48:02   编辑:Linux教程

  聶軍,今天繼續研究把裁剪過的Linux安裝到CF卡裡,然後要從CF卡裡運行Linux系統,之前研究過一段時間,我也已經把Linux系統都重新構建完成了。但是之後試圖把裁剪的系統安裝到CF卡再啟動時出現了問題,首先是把系統文件原樣考貝進另一個硬盤,然後重新啟動,但沒成功,經查,是由於考貝的時候丟掉了一些文件的權限而致,於是查閱相關資料往這個方向上走,發現用cp -Rfva命令可以正常把文件屬性也一起考過來,參數a是指考貝時連屬性一起進來。經過測試,成功。

  2、接著試圖把系統在CF卡上運行,我安上述方法把系統文件考貝進CF卡後,然後再在CF卡上手動安裝了GRUB,重新啟動電腦,改BIOS為從CF卡啟動,結果失敗。

  3、接著我分析了各種可能存在的原因,並且也做了許多嘗試,最終還是失敗了,並沒有成功從CF卡上啟動Linux。由於時間關系,我又必須轉向另一個任務,這個任務也就暫時擱置了,但我通過之前的嘗試,基本懷疑了CF卡系統啟動失敗的原因。那就是可能是CF卡不支持DMA方式傳輸數據,系統啟動時老是在DMA一處卡住了,但當時沒有太多時間去研究,也就放下了。以後有時間再搞吧。

  4、今天終於有時間繼續來研究CF卡啟動Linux的問題,經過上次的研究,我就在當時懷疑的可能出現問題的情況下往這個方向去解決這個問題,首先把BIOS裡關於DMA的選項都關閉了,一個一個的嘗試,但沒有成功,最後在沒有任何辦法的時候我想到了可以換台電腦試試(因為我的PC硬件較新,我在想換個老的PC試試),終於,一換上去,成功進入了GRUB,哇,這個時候我的心情非常高興。看來這個時候是成功的第一步啊。

  5、既然進行了GRUB,那說明CF卡應該能正常工作了,下一步系統的啟動如果設置正確的話應該就可以成功啟動。懷著這個想法我開始嘗試啟動Linux,首先進入GRUB,在GRUB的命令行裡寫了啟動Linux的命令

  root (hd0,4)

  kernel /boot/kernel-2.6.11.12-3 root=/dev/hda5

  boot

  然後回車,哇,系統內核正常進入了,但在內核的啟動過程中,經過設置硬盤DMA的時候超級慢,並且有報錯。我當時就懷疑這裡肯定有問題,只是不知道如何解決,經過了漫長的等待,Linux終於進入到mount root fs了,但這一步出錯了,提示說無法掛載根文件系統,這個問題我可是經常碰到的,只是出現在這裡讓人不好判斷是哪裡有問題。於是我回想系統啟動時的屏幕打印信息,突然一閃(內核為什麼會檢查hdc設備呢?我的CF卡應該是hda啊?我在GRUB裡傳遞給內核的參數也是寫的root=/dev/hda5啊?)想到這一點的時候我心裡似乎找到原因了(可能是系統把我的CF卡識別成了hdc),正常情況下這個結果應該只有一個原因所致,那就是我的CF卡接的IDE接口位置不對,於是我重新啟動PC,進入到BIOS裡,一看,哦,明白了,BIOS裡顯示我的CF卡處於第三個IDE位置,頓時確定了root fs掛不上的原因了,接著我把CF卡拔出來,插到IDE的第一個位置上,然後設置GRUB內核參數,再經過漫長的等待,哇,真激動人心啊,系統正常掛載了root fs,但別高興太早了,問題又出來了,那就是系統正常進入啟動了INIT進程,但沒走幾步,系統又提示說根文件系統又不能正常進入,到這時,我就覺得奇怪了,不是設置正確了嗎?自己來回走了數趟,一邊走一邊思考,突然又是一閃,一個可能的原因又出來了,那就是我的系統是從另一個硬盤考貝過來的,而硬盤對應的分區不一樣,現在問題很清楚了,就是出在fsttab文件的配置上,於是我馬上把CF卡取下來,放到另一台電腦上把CF卡裡面的fsttab文件更改正確了,然後再放回測試,哇,這次真是萬分激動啊,系統真的起來了,出現了登錄項。雖然系統在啟動過程中提示了幾個錯誤,不過那都是配置上的問題,不是什麼大問題,正確配置就應該可以正常。於是我登錄系統,進去了,非常正常的跑起來了,高興啊。我這人有點完美主義,覺得這個系統還不完美,在啟動的時候出現內核DMA設置出錯,並且因為這個錯誤而停留非常長的時間。

  6、現在的問題就是解決內核啟動時加載DMA時出錯的問題。我首先想到的就是在編譯內核時的內核配置選項裡會不會有這一項呢?於是我重新make menuconfig在裡面找了個遍,也沒有發現關閉或設置我需要的DMA的選項,反正是嘗試嘛,於是我把內核配置選項裡我懷疑是的選項都關了,然後重新編譯了一個內核考貝到CF卡裡,接著啟動系統,但是結果總是沒有那麼快讓人滿意,問題依然存在哦,我在屋子裡走來走去,想招啊!最後想來想去也沒有一個可能的原因說服自己再去嘗試。唉,上了個廁所,然後長歎一聲,真是才思枯了嗎?哦,對了,我應該問問google和baidu了,也許它們知道呢?於是我在baidu裡輸入了

  dma error linux後回車,哇,沒想到還真有許多人問這個問題,在一大堆“藥”裡慢慢找能醫治此病的藥,突然,找到了一個非常關鍵的一句話“啟動時加了一行“ide=nodma",就好了,...”,於是我懷疑這個可能就是我需要的藥哦,真是迫不及待的把系統重新啟動,然後設置內核啟動參數:

  root (hd0,4)

  kernel /boot/kernel-2.6.11.12-3 root=/dev/hda5 ide=nodma

  boot

  因車後,經過幾十秒鐘的等待,哇!結果真讓人滿意,問題真的解決了哦,真是高興啊!到此為止,從CF卡裡啟動Linux的任務基本完成了。呵呵,高興啊,接著要進入下一步了,系統的配置。

  7、SSH服務的自啟動的配置。因為這個系統是我基於LFS重新構建的系統,基本上完全靠自己去定制各種服務,平時在別的Linux發行版裡如Red Hat、CentOS、ARCH、DeBian裡,配置這個服務根本就不是問題,但是這個系統裡就不是的哦,我通過觀察系統的/etc目錄下的腳本,發現沒有rc.local,我自己手動創建了一個rc.local,然後把啟動SSH服務的命令加到裡面,重新啟動系統,結果,SSH沒有起來,看樣子手動添加了rc.local文件沒有用。於是我再進一步觀察/etc/rc.d裡的東西,這裡面的目錄我都光顧了幾次,最後發現應該是在/etc/rc.d/rcsysinit.d加一個什麼東西,就可以實現自啟動,於是我嘗試著執行了:ln -s ../init.d/sshd S100sshd命令,然後重新啟動系統,呵呵,SSHD在系統啟動的時候正常啟動了,但是連接不上,我就懷疑可能是SSHD的啟動先於了network的啟動,沒有讀取網絡信息而不能連接。然後仔細觀察了一下/etc/rc.d/rcsysinit.d的文件,好像裡面都是系統必須的基本服務的啟動腳本。於是我在想,我的系統裡的inittab設置的啟動級別是“3”,應該在系統啟動的時候讀取rc3.d裡的腳本運行,想到這一點時我就有辦法了,於是我刪除了/etc/rc.d/rcsysinit.d裡的S100sshd文件,然後進入/etc/rc.d/rc3.d目錄裡執行了

  ln -s ../init.d/sshd S50sshd,然後重新啟動系統,哇,成功了,SSHD正常啟動與工作了,我能正常連接上去哦。呵呵,系統的構建又前進了一步哦,但是同時我明白,一個從零開始的系統發展到一個可用的服務器操作系統還有很遠的路要走哦。慢慢努力吧。你能行的。

Copyright © Linux教程網 All Rights Reserved