最近專案也和linux kernel技術有關,除錯內核和內核模塊、修改內核原始碼,是學習內核的重要技術手段之一,應用這些技術時,都有一本基本的要求,那就是編譯內核,因此,在分析內核除錯技術之前,本隨筆給出內核的編譯準備作業與具體實作程序,
開發環境
Ubuntu20.04
系統自帶的內核版本:5.4.0-42-generic
kernel編譯前的準備
在編譯內核之前,有些準備作業需要進行,首先,就是從內核網站https://mirrors.edge.kernel.org/pub/linux/kernel/,下載好原始碼,這之前,需要確定下載哪個版本的內核原始碼,因為我目前的開發環境是ubuntu 20.04,內核版本為5.4.0,而實驗選擇的下載版本,就是5.4.0,因為這樣編譯程序不容易出現bug(理論上其他內核版本也可以,具體問題后面分析),
接著,使用sudo apt-get install安裝一些必要的軟體,在進行配置時,會執行命令“make menuconfig”,它需要libncurses5-dev、flex、bison等軟體,ncurses庫可用于管理字符終端界面,而bison和flex是生成詞法分析器的工具,除此之外,還需要安裝好kernel-package、libssl-dev,
最后一項準備作業,就是禁止內核地址隨機化,出于安全考慮,內核支持ASLR (Address Space Layout Randomization),即地址隨機化,但是隨機化在增加安全保障的同時,也給內核開發帶來了一些麻煩,比如內核模塊、函式等相關地址不方便直接確定,在后面的kgdb開發中,不管是開發機,還是目標機,都需要禁止內核地址隨機化,禁止的方法,即修改grub組態檔,具體步驟如下:
打開/etc/default/grub檔案;
在該檔案中,找到GRUB_CMDLINE_LINUX,修改其為:GRUB_CMDLINE_LINUX="nokaslr";
執行命令update-grub,以更新grub組態檔等;
最后,重啟系統即可,
上述步驟實質就是設定了內核命令列引數nokaslr,其意為禁止內核ASLR,一般來說,單純編譯內核是不需要這一步驟的,但是,在后面的專案中,都需要禁止內核地址隨機化,因此,將其放在了編譯前的準備作業中,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/270487.html
標籤:Linux
下一篇:linux虛擬機靜態網路配置
