ldd3( Linux Device Driver 3e ) (1)— 實驗環境建置以及編譯模組

吳建興
4 min readSep 27, 2019

--

Hello!

寫程式之前,一樣來一首歌吧。這一首是出自烏鴉地板的”我不知道你知不知道欸”。然而不愧是草東,現場演唱的強烈情感,比起錄音更加好聽。

因為對linux本身實在太不熟悉了,所以想要開時翻閱一些比較經典的資料,多多少少提升一點實力吧。這邊稍微紀錄一下走過但失敗的路,以及現在的解決方法。假如有人願意指點其中一些可以改進的地方,就太好了ฅ●ω●ฅ

Outline

  1. 建置實驗環境
  2. 編譯模組(ldd3 ch2)

建置實驗環境

  1. 用新版kernel去編譯linux kernel 2.6.10–編譯失敗

由於這本書的預設環境是linux kernel 2.6.10,所以原本以為很單純的將核心程式碼下載下來,編譯並用USB開機就好了。結果事情並沒有想像中單純,因為我的環境( ubuntu 18.04, gcc 7.04)實在太新了,導致我的ToolChain沒辦法將舊版的kernel編譯起來,碰上許多錯誤。網路上的文章一方面是要patch gcc,一方面又是patch linux kernel程式碼,搞得我頭暈目眩的。

2.退版至ubuntu 14.04,並將gcc退版至gcc-4.4 — 編譯成功但無法開機

翻閱了幾篇文章,發覺gcc-4.4才是關鍵的問題,但是ubuntu18.04沒辦法簡單用apt install下載gcc-4.4,決定自己編譯gcc-4.4後又出現一對問題(gcc版本過新, make工具版本過新),於是退版到ubuntu 14.04,終於可以簡單用apt install來下載gcc-4.4了,並且依照這一篇文章的方法來製作開機碟。雖然電腦可以抓到grab,但是卻沒辦法成功將kernel給boot起來。這邊我認為可能是BIOS版本過新,或是舊版的kernel不支援usb開機,只支援CD/ROM吧。

3.直接使用ubuntu 5.04 iso灌進usb — 無法開機

查閱wiki後,因為ubuntu 5.04的預設核心也是2.6.10版本。所以暫時放棄自己編譯核心的念頭,改拿現有的iso檔案。但是將ubuntu5.04灌進usb後,卻還是沒辦法成功開機,猜也是支援性的問題。

4.使用ubuntu 5.04與virtualbox — 無法開機

後來我打消了用實體機測試的念頭,改用虛擬機。
這個問題就蠻明確的了,virtualbox的硬碟是模擬SATA介面,然而ubuntu 5.04並不支援SATA。

5.使用ubuntu 5.04與qemu — 成功開機

這個方法雖然成功開機了,但因為是qemu,需要自己做許多的設定(比如說網路)目前想盡快可以嘗試ldd3裡面的範例,所以等待以後有空再來仔細研究qemu的功能了。

6.使用ubuntu10.04與virtualbox — 成功開機

之後稍微搜尋了一下,發覺有很多好心人為新版的linux kernel準備好了ldd3的範例(太感謝你們了QQ)。
https://github.com/martinezjavier/ldd3
https://github.com/duxing2007/ldd3-examples-3.x
所以用稍微新一點的核心也沒問題了!於是用ubuntu10.04的iso,就可以很快速地搭配virtualbox進行開機了。並且也可以使用舊版的ToolChain來編譯舊版的kernel,終於可以逃離patch地獄了!

編譯核心模組

然後參照這裡就可以很快速的把範例通通編譯起來了,終於可以繼續練習之後的章節了!針對編譯的詳情可以參閱這裡

Reference

  1. 將ldd3裡的範例放到新的linux kernel也能正常運行(可以成功編譯的ldd3專案)ubuntu 10.04.4 LTS是kernel 2.6.32–38-generic版本,而這個專案剛好有分支是給2.6.32的版本,所以可以成功編譯
    https://github.com/martinezjavier/ldd3
  2. ldd3原版的範例
    https://resources.oreilly.com/examples/9780596005900/
  3. ldd3電子書
    https://lwn.net/Kernel/LDD3/
  4. 製作開機碟
    https://zhuanlan.zhihu.com/p/27009845
  5. unsupported kernel 想要apt-get install
    https://askubuntu.com/questions/91815/how-to-install-software-or-upgrade-from-an-old-unsupported-release

--

--

吳建興
吳建興

Written by 吳建興

I want to be a good programmer.(´・ω・`)

No responses yet