# AOS assignment1 ## Hardware and software specification | Category | Hardware Specification | |---|---| | - CPU | Intel® Core™ i7-13650HX | | - RAM channel A | Samsung DDR5 4800 SODIMM 16GBx1 | - RAM channel B |Micron DDR5 4800 SODIMM 32GBx1 | - Storage | WD SN560 1TB | | - Network | Intel® WiFi 6 AX201 160Mhz | | Category | Virtual Machine | |---|---| |- Type | VirtualBox with Ubuntu 20.04.1| |- CPU Cores | 2 CPU cores allocated| |- RAM | 4GB RAM allocated| |- Storage |40GB Size of the virtual disk| | Category | Linux Kernel Environment | |---|---| | - Version |Linux 5.15.0-121 generic | | - Distribution | Ubuntu | | Category | Compiled Linux Kernel Target | |---|---| | - Version |Linux 6.10.9 | | - Distribution | Ubuntu | | Category | Used Packages | |---|---| | - Key Packages | build-essential, flex, bison, libncurses-dev, libelf-dev, elfutils, libssl-dev, bc| ## Steps of compile 6.10.9 kernel source code and run | Steps | Operation | |---|---| | 1 | Install VirtualBox下載一下ubuntu的系統,我用的是`ubuntu 20.04.1 LTS`![image](https://hackmd.io/_uploads/HJhH15SpR.png =500x30)| | 2 | 用`wget+網址`來下載想要的Linux kernel source code,我這邊要編譯的kernel是下載stable `6.10.9` tarball的版本 !![image](https://hackmd.io/_uploads/HJ5kUXeT0.png =550x30)![image](https://hackmd.io/_uploads/rknxI36h0.png =400x250)| | 3 | 用ls來確定檔案是否已經下載到現在的路徑裡面了 ![image](https://hackmd.io/_uploads/BkdX4tSa0.png)| | 4 | 用`tar -xf linux-6.10.9.tar.xz`來解壓縮 ![image](https://hackmd.io/_uploads/HkGtNFSaC.png)這邊可以看到解壓完後檔案分布!![image](https://hackmd.io/_uploads/BJz6EtrTA.png)| | 5 | 現在進入了解壓縮的source code的檔案目錄了,開始安裝tool `sudo apt install build-essential flex bison libncurses-dev bc libelf-dev elfutils libssl-dev`![image](https://hackmd.io/_uploads/SkuTHYBpR.png =500x150)| | 6 | 為了可以執行`make menuconfig` 來配置內核 第五步驟packages是需要安裝的或是沒什麼需要設定就直接用 `make defconfig`![image](https://hackmd.io/_uploads/S1oUUFrpC.png)| | 7 | then `sudo apt install gedit && sudo make -j$(nproc) >/dev/null && sudo make modules_install`,然後去以下位置看有沒有bzImage ![image](https://hackmd.io/_uploads/rJWGqKSTC.png)| | 8 | 先`make install` 後 `sudo apt install grub2 && sudo gedit /etc/default/grub`![image](https://hackmd.io/_uploads/HkcfvFHTA.png =600x300)| | 9 |把style, timeout數值改成menu, -1且儲存![image](https://hackmd.io/_uploads/Hy1FtX1T0.png =500x400) <div style="page-break-after: always;"></div> | Steps | Operation | |---|---| | 10 | 並且更新grub `sudo update-grub2` 重開reboot -n後就看到結果啦,這邊因為我編譯了兩次所以有兩個一樣的版本 ![image](https://hackmd.io/_uploads/Byo6DFrp0.png =400x200)![image](https://hackmd.io/_uploads/rJqx_YH6C.png )![image](https://hackmd.io/_uploads/H1INuKSpA.png ) ![image](https://hackmd.io/_uploads/S1KHdtraR.png =400x300)![image](https://hackmd.io/_uploads/r1wc_FBpA.png =500x50)| > **_NOTE:_** 會因為版本問題產生很多bug,例如ubuntu 20,24版本用VMWare會進入initramfs,我是換個VirtualBox解決 ## 遇到的困難 為了可以使用`make menuconfig`用選項式菜單來配置kernel,我們需要先下載很如下的packages,若config配置完還是一堆bug,最後先用menuconfig生成.config檔之後,改用`make defconfig`,然後VMware Workstation問題會使我一直找不到efi啟動,會卡在initramfs的畫面,網路上找不太到這部分的解決方式,所以我就直接換VirtualBox重新上述步驟就可以開機了。 ### build-essential ``` `build-essential`套件通常包含了 GCC、make、binutils 等基本編譯工具來提供編譯環境 ``` ### libncurses-dev ``` 讓 menuconfig 能夠在終端中呈現一個彩色的、互動式的選單界面,方便使用者進行配置。 使用者互動: ncurses 提供了處理鍵盤輸入、移動游標、繪製視窗等功能, 後來發現還需要`flex`,`bison`等等的tool,才可以執行config的動作 ``` ### flex ```產生詞法分析器: flex 用於生成詞法分析器的工具。 在 menuconfig 中,它用於詞彙分析 生成的詞法分析器可以將配置檔案中的關鍵字、值等詞彙 提取出來,以便解析器進行進一步的處理。 ``` ### bison ``` 產生解析器: bison 是一個用於生成解析器的工具。 在 menuconfig 中用於生成一個解析器,用來解析内核配置檔案的語法。 解析配置選項根據指定的語法規則,正確地解析使用者所做的配置選擇。 ``` <div style="page-break-after: always;"></div> ## Reference [The Linux Kernel Archives](https://www.kernel.org/) [How to compile Linux kernel code on Windows? - Stack Overflow](https://stackoverflow.com/questions/19572548/how-to-compile-linux-kernel-code-on-windows) [在解壓縮linux kernel archive檔案會用到的指令](https://note.drx.tw/2008/04/command.html) [Linux kernel development book 3rd edition chapter 2]