Linux

在 Debian 中編輯 .config 後重新編譯核心

  • January 24, 2022

TL;DR:一旦我已經使用“make deb-pkg”編譯了 Linux (Debian) 核心,如何在 .config 中進行微小更改後生成一個新核心?

你好,

我正在嘗試按照https://www.debian.org/doc//manuals/debian-handbook/sect.kernel-compilation.pl.html編譯核心。嗯,我做到了。花了一段時間,然後我安裝了它,但它沒有啟動。

所以我再試一次。我編輯了 .config 並想編譯一個新的。但是如果不從頭開始,刪除然後編譯整個事情,我就無法找到一種方法。只是“製作”似乎什麼都不做。我的意思是,它做了一些事情,但不會改變 linux-image。只需“make deb-pkg”,而不刪除之前生成的所有文件,就會返回錯誤。

我搜尋了它,但我找到的所有答案似乎都早於使用“make deb-pkg”並且沒有用。

謝謝你。

在您連結的手冊的第 8.10.4 章的開頭:

注意 重建前清理

如果您已經在目錄中編譯過一次並希望從頭開始重建所有內容(例如,因為您大幅更改了核心配置),您將不得不執行make clean以刪除已編譯的文件。

make命令的核心是使用 Makefile 中定義的一系列簡單規則。例如,一條規則可能會說 fileX是從 files 建構的ABC使用這些命令。在決定文件是否X需要重建時,make通常只檢查是否X存在,如果存在,它是否比任何源文件更新AB或者C. 如果X不存在或比其來源之一舊,它將被重建。

如果還有其他建構A,B和/或的規則C,它們將在決定 之前首先被評估X,以此類推,遞歸。

(在其存在的幾十年中,該make命令,尤其是其 GNU 版本已經積累了許多擴展,但這仍然是其操作背後的基本思想。)

你說你做了“.config 中的小改動”。一些.config選項啟用/禁用要建構的新模組。例如,如果您啟用一個曾經被禁用的模組,則需要*.ko存在一個以前不存在的新文件,並且很可能會被核心 Makefile 系統檢測到。

但是其他選項僅通過啟動/停用#ifdef單個原始碼文件中的某些塊或更改某些#define值來引起更改。這些不能被核心 Makefile 系統輕易檢測到。

因此,如果不確切知道您之前的核心配置是什麼以及您更改的確切選項,就不可能說這是一個已知/預期的問題還是應該有效的問題。

核心 Makefile 系統本身就是一個相當複雜的東西。以數學上完美的方式涵蓋對核心配置選項的所有可能更改組合可能太複雜了 - 它會謹慎行事,確保所有配置更改生效。有時這會導致重建比嚴格優化的更多文件。配置更改將更新include/generated/autoconf.h,它包含在 中include/linux/kconfig.h,並且由於預設情況下包含後者,這將導致基本上所有內容都被重新建構。

根據NOTE我上面引用的內容,推薦的程序似乎是:“在重新執行之前make deb-pkg,執行make clean”。

我經歷過類似的事情make deb-pkg:如果我沒記錯的話,我認為重新執行它時的錯誤更多地與 .deb 包建構步驟有關,而不是與實際的核心編譯有關。

引用自:https://unix.stackexchange.com/questions/687606