建立一個新的 vanilla 內核 - 與生成的 debs 存在一些混淆

建立一個新的 vanilla 內核 - 與生成的 debs 存在一些混淆

所以我想嘗試建造2.6.39-4。我按照以下步驟操作ubuntu wiki“GitKernelBuild”頁面

簡而言之,下載 tar.bz2,解壓縮,複製我的舊配置,製作 oldconfig,然後

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

一切都很順利,我現在正在使用這個內核,除了一件小事:我無法建立其他模組,建立 dkms 等。

產生的deb檔有兩個:

linux-image-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
linux-headers-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb

我對此有點困惑。

在普通的 ubuntu 內核中,即使是 mainline-ppa 中的內核,也會安裝三個 deb 檔案。例如,對於來自主線PPA存在這些包:

linux-image-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904_2.6.39-02063904.201108040905_all.deb

正如你所看到的,有兩個不同的頭包。事實上,安裝它們後,主線 ppa 套件會在 /lib/modules 下建立一個目錄:

/lib/modules/2.6.39-02063904-generic

在該目錄中,存在一個符號鏈接,它指向 /usr/src 下的 -generic 標頭

/lib/modules/2.6.39-02063904-generic/build -> /usr/src/linux-headers-2.6.39-02063904-generic

在 /usr/src 下,該核心存在兩個不同的目錄

/usr/src/linux-headers-2.6.39-02063904-generic
/usr/src/linux-headers-2.6.39-02063904

現在,這是我自己的兩個包的問題:

在 /usr/src 中只有一個資料夾,

/usr/src/linux-headers-2.6.39.4-custom

並且在/lib/modules下有一個資料夾

/lib/modules/linux-headers-2.6.39.4-custom

真正的問題,也是我寫這篇文章的原因是在上面的目錄中創建的符號連結:

/lib/modules/linux-headers-2.6.39.4-custom/build -> /home/nickped/projects/kernel/linux-2.6.39.4

正如您所看到的,它連結回我建立核心的目錄 - 當然之後該目錄可能不存在。這會導致其他模組(例如 vmware、virtualbox 等)無法構建,因為它找不到重要的東西。

為什麼會出現這種情況?如何解決?為什麼產生了兩個而不是三個 deb 檔案?官方發布的這 3 個不同的 deb 文件的用途是什麼?

答案1

回答第一個問題為什麼只有兩個包?或者為什麼沒有兩個頭檔?——當它們被交叉編譯時,它們被打包來處理每個用例。透過將標題拆分為更大的全部包和較小的特定於架構的包,您可以節省將它們推送給用戶的頻寬。當您自己做時,您只需要一個拱門,因此一個頭文件就可以了。

至於到源位置的符號鏈接,我遇到了同樣的問題。除了生成一個linux_source包(只需將其添加到 after kernel_image kernel_headers)然後手動修復符號鏈接之外,我還沒有找到好的修復方法。

實際上有已經有一個關於這方面的問題了。長期的解決方案似乎是在每次核心安裝後運行的腳本中進行修改,該腳本只是修復符號連結。

相關內容