閱讀須知:這一篇文章寫于我當時聯創夏令營時做的一個任務,大概就是需要我們修改linux內核的網路協議堆疊,然后達到發送特定的網路包可以知道這臺電腦是否被后門(安裝了我們修改的linux內核)或者在這臺電腦上面執行shell命令等,之后為了避免答辯的時候卡殼,所以寫了一份提綱,也就是這篇文章啦,同樣,不打算做修改,畢竟該有的步驟都有了,
查看當前的內核版本
uname -r

然后到官網去找一個內核版本進行下載
傳送門
我這是第二次安裝,選了一個稍微低一點的版本,第一次選的高版本默認配置編譯出來的東西19個G, SSD頂不住了
https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.15.3.tar.xz
下載的話,wget就可以了

解壓的話一條命令就夠了:
sudo tar -xvJf linux-xxxxx
原始碼還挺大,害怕

然后編譯的時候你會遇到一系列的錯誤,但是概括而言其實錯誤有兩類,一個是缺少必要的包或者工具,再一個是這個版本的內核打了patch,小心處理就好,記得換源,下載快一點,
然后就需要準備文本組態檔 .config
其實文本組態檔就是指定啟用哪一些模塊,以及哪些模塊打入內核里面,哪些放在modules檔案夾里面
啟用的方法可以是直接復制你自己內核里面的配置,也可以用make defconfig默認配置,或者make menuconfig然后save,還有很多,不一一列舉了,
我們用默認的就好


這個默認配置才四千多行,比5.x的一萬多行小太多了,估計編譯出來的也要小不少
然后make mrproper清除編譯中產生的中間檔案,當你編譯失敗然后解決問題重新編譯后可以運行一下

啊,把組態檔也刪了,太狠了
接下來很多命令要root權限,我們直接進入root模式吧

make開始編譯
這里由于我給虛擬機分了兩個cpu,所以我就make -j 2了,快一點
然后就開始編譯了,耐心等待即可,可以去看一部電影或者喝一杯卡布奇諾

神奇,怎么4.x版本安裝得這么快,十分鐘吧就安裝好了,而且,為什么這么小,不管了,先試試吧

編譯完成后就make modules_install
這一步是安裝內核模塊,他會把這些模塊安裝到 /lib/modules這個目錄里面
可以看到現在這個目錄下面一開始只有我當前內核得模塊得檔案

然后咱們執行以下這個模塊安裝命令試試
這什么情況?怎么一秒就安裝好了,,,


但是現在內核檔案還沒有生成

我們接下來生成內核檔案
再然后就make install
這一步就是安裝內核了,這一步具體干了什么事情呢?
安裝了內核相關的模塊,安裝bzImage, 生成initramfs檔案以及會修改grub的組態檔,但是你還得設定成開機選擇內核版本, 編輯/etc/default/grub這個檔案,不過不同版本的不太一樣,我之前的5.x的是修改兩個條目,其中一個改成menu,還有一個是等待時間,我改成了10

我傻了,怎么安裝得這么快,算了,先試試吧


然后sudo update-grub
然后重啟一下試試

可以啟動,但是是一個最小的linux,圖形界面都沒有,我就說為啥編譯這么快,我人傻了

然后查看一下版本,發現確實沒毛病

暫且不管這個busybox是否支持網路功能,我先用它來做一下實驗,看能否列印我的printk
這個是在init/main.c下面的start_kernel函式下面

然后重新make,增量編譯很快就結束了

然后重復上述步驟后,發現真的出現了一個新的內核



然后我發現我添加的那里貌似不是一個好地方,我按照這個里面的字串查找了一下,有了新發現

哈哈,就在這里添加了,fuck linux
對了,還要注意我們是x86的架構,所以要選對檔案,所以是這個檔案


編譯成功了,開森!

哈哈,成功了,與內核達成了同步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/230705.html
標籤:其他
上一篇:PHP設計模式—訪問者模式
