1. 實踐:一步一步安裝 ArchLinux,并編譯、安裝【RT-Preempt】實時內(nèi)核

        共 7799字,需瀏覽 16分鐘

         ·

        2022-05-31 01:05

        目錄

        • 制作U盤啟動系統(tǒng)

        • 從 U盤啟動,安裝 ArchLinux

          • 1. U盤啟動

          • 2. 硬盤分區(qū)

          • 3. 網(wǎng)絡配置

          • 4. 更換軟件管理套件的鏡像地址

          • 5. 掛載文件系統(tǒng),進行安裝

          • 6. 系統(tǒng)配置

          • 7. 安裝 grub bootloader

        • 安裝軟件包管理軟件Pacaur

          • 通過源碼來安裝

          • 通過Yaourt來安裝

        • 更換實時內(nèi)核(RT-Preempt)

          • 1. 下載Linux內(nèi)核和Preempt補丁文件

          • 2. 配置實時策略Fully Preemptible Kernel (Real-Time)

          • 3. 編譯和安裝內(nèi)核

          • 4. 制作和安裝RAM Disk

          • 5. 復制System.map文件

          • 6. 更新GRUB配置文件

        不知不覺使用Ubuntu系統(tǒng)已經(jīng)好多年了,在Linux所有發(fā)行版中,使用最多的估計仍舊是Ubuntu,主要的原因就是穩(wěn)定,使用的人多,遇到問題了也很容易找到解決方案。

        最近看到一句話:入門ubuntu,不滿足manjaro,得心應手之后arch,還想折騰就上gentoo

        看來我仍然在入門的一畝三分地里折騰著,正好家里有一臺淘汰下來的臺式機,正好可以用來折騰一下。

        調(diào)研了一番之后,決定安裝ArchLinux,這篇文章就記錄一下安裝過程,遇到的一些坑,以及在更換帶有 RT-Preempt 補丁的內(nèi)核時,遇到的幾個內(nèi)核配置問題。

        1. manjaro 是 ArchLinux 的一個發(fā)行版,使用的人也不少;

        2. 如果想對 Linux 的搭建有更底層的掌握,可以花 1-2 周的時間,按照 LFS 的操作步驟走一遍。

        本文主要參考:https://itsfoss.com/install-arch-linux/。

        官方給出的電腦硬件要求是:

        制作U盤啟動系統(tǒng)

        下載 ISO 文件

        ArchLinux官網(wǎng)上(https://archlinux.org/download/)給出了很多的鏡像下載鏈接,可以從163網(wǎng)站(http://mirrors.163.com/archlinux/iso/)下載。

        選擇一個版本:archlinux-2022.05.01-x86_64.iso。

        下一步就是把鏡像文件制作成U盤啟動系統(tǒng),在WindowsLinux上都可以。

        Windows上可以使用rufus軟件來制作啟動U盤啟動系統(tǒng)(我選擇的也是這個方式)。

        如果在Linux系統(tǒng)上,可以使用dd命令來制作:

        sudo dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync

        從 U盤啟動,安裝 ArchLinux

        1. U盤啟動

        把U盤插入電腦,重啟之后選擇從U盤啟動(根據(jù)自己電腦的設置,在啟動時按下F2、F7或其它按鍵)。

        這個圖片是參考文檔中的,根據(jù)系統(tǒng)的不同,選項的內(nèi)容也可能稍有區(qū)別。

        在我的系統(tǒng)中,選擇 Arch Linux install medium (x86_64, UEFI)選項進入 live U盤中的系統(tǒng)。

        這一步其實就相當于是安裝Ubuntu系統(tǒng)中時的Try Ubuntu

        一切順利的話,系統(tǒng)加載運行之后,進入命令行界面,下面就開始一步一步安裝ArchLinux操作系統(tǒng)了。

        首先,通過查看文件efivars來確認系統(tǒng)是否支持 EFI。

        執(zhí)行命令:ls /sys/firmware/efi/efivars,如果能看到一大堆的輸出信息,就說明支持。

        關于 EFI 系統(tǒng)以及系統(tǒng)引導流程(主要是與 MBR 那一套的區(qū)別),可以去搜索一些資料。

        2. 硬盤分區(qū)

        使用fdisk -l來確定一下硬盤設備名稱,例如:/dev/sda。

        也可以使用其它的分區(qū)工具,例如:gdisk,cgdisk,sgdisk。

        在硬盤上,很可能已經(jīng)存在了分區(qū)表,因為之前可能在這個硬盤上安裝過操作系統(tǒng)啊。

        建議先把這些分區(qū)表全部刪除掉,然后重新進行分區(qū)。

        分區(qū)操作通過指令:fdisk /dev/sda來操作。

        如今大部分系統(tǒng)支持的都是UEFI系統(tǒng),因此需要創(chuàng)建一個EFI分區(qū),建議分 512 MB

        創(chuàng)建這個分區(qū)之后,需要把分區(qū)類型修改為EFI類型。

        具體操作是:輸入指令 t,再輸入 EFI前面對應的序號。

        參考文檔中的序號是:

        但是,如果選擇的系統(tǒng)版本不同,這里的序號可能是不一樣的。在我選擇的系統(tǒng)中,EFI類型的編號是數(shù)字 1。

        EFI分區(qū)創(chuàng)建好之后,再創(chuàng)建一個根分區(qū)就可以了,與安裝其它的發(fā)行版一樣。

        最終創(chuàng)建的兩個分區(qū)名稱是:

        1. EFI 分區(qū):/dev/sda1

        2. 根分區(qū):/dev/sda2

        硬盤分區(qū)的最后操作就是格式化這兩個分區(qū):

        1. mkfs.fat -F32 /dev/sda1

        2. mkfs.ext4 /dev/sda2

        3. 網(wǎng)絡配置

        為了在后面的步驟中順利的在線安裝,官方文檔中對WiFi進行了設置。

        由于我的電腦使用的RJ45有線連接,所以就沒有進行這一步的操作。

        4. 更換軟件管理套件的鏡像地址

        我們在安裝Ubuntu操作系統(tǒng)之后的第一步,一般都是更改apt的軟件源,設置為國內(nèi)比較知名的軟件源。

        ArchLinux默認的官方軟件管理套件是pacman(還有其它的管理套件,下面會討論到),為了加快下載速度,也需要根據(jù)我們所處的地理位置修改為比較快的軟件源。

        依次執(zhí)行如下命令:

        同步倉庫:pacman -Syy;

        獲取所有的倉庫列表:pacman -S reflector;

        備份一下原始文件:cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak;

        選擇合適的倉庫:reflector -c "ZH" -f 12 -l 10 -n 12 --save /etc/pacman.d/mirrorlist

        5. 掛載文件系統(tǒng),進行安裝

        此刻執(zhí)行的是位于U盤中的系統(tǒng),現(xiàn)在需要做的是把操作系統(tǒng)安裝在剛才創(chuàng)建的分區(qū) /dev/sda2。

        首先把分區(qū)掛載一下: mount /dev/sda2 /mnt

        掛載之后,就可以使用pacstrap腳本來安裝ArchLinux以及一些軟件包了:

        pacstrap /mnt base linux linux-firmware vim

        安裝過程需要的時間,根據(jù)電腦性能和網(wǎng)絡情況而定,總之還是比較快的。如果在安裝過程中因為網(wǎng)絡等原因中斷了,再次執(zhí)行即可。

        6. 系統(tǒng)配置

        系統(tǒng)配置包括:文件系統(tǒng)掛載文件fstab,設置系統(tǒng)時區(qū),設置密碼等等,一步一步來操作。

        首先創(chuàng)建fstab文件:genfstab -U /mnt >> /mnt/etc/fstab。

        然后把根文件系統(tǒng)切換到分區(qū)/dev/sda2對應的掛載點/mnt,因為現(xiàn)在要配置的是剛才被安裝的根文件系統(tǒng),所以需要切換進去。

        切換命令是:arch-chroot /mnt。

        執(zhí)行命令:timedatectl list-timezones 列出支持的所有時區(qū)。

        然后執(zhí)行命令 timedatectl set-timezone Asia/Shanghai把時區(qū)設置為自己的實際位置。

        最后,進行語系設置。使用vim命令打開文件 /etc/locale.gen,打開下面2個選項:

        en_US.UTF-8 UTF-8
        zh_CN.UTF-8 UTF-8

        然后執(zhí)行命令:locale-gen。

        創(chuàng)建文件:/etc/locale.conf, 添加如下內(nèi)容:

        LC_ALL=en_US.UTF-8
        LANG=en_US.UTF-8

        創(chuàng)建文件:/etc/hostname,添加如下內(nèi)容:

        myarch

        創(chuàng)建文件:/etc/hosts,添加如下內(nèi)容:

        127.0.0.1   localhost
        ::1 localhost
        127.0.1.1 myarch

        最后,通過指令 passwd來設置root密碼。

        7. 安裝 grub bootloader

        這一步比較關鍵,確保當前的根目錄是處于/dev/sda2中(也就是上一步chroot所做的動作)。

        首先,安裝需要的軟件:pacman -S grub efibootmgr。

        在之前的分區(qū)表中,/dev/sda1分區(qū)類型已經(jīng)被設置為EFI System,并且被格式化成FAT32文件格式。

        現(xiàn)在,需要grub引導程序安裝到這個分區(qū)上,所以首先需要把這個分區(qū)掛載一下。

        創(chuàng)建掛載點目錄:mkdir /boot/efi,然后執(zhí)行掛載命令:mount /dev/sda1 /boot/efi。

        安裝grub引導程序也是通過軟件來執(zhí)行的,命令如下:

        grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi

        安裝成功之后,執(zhí)行如下命令來更新grub的配置文件:

        grub-mkconfig -o /boot/grub/grub.cfg

        進行到這一步的時候,ArchLinux就安裝完成了。

        在參考文檔中還執(zhí)行了其他的一些操作,比如:添加用戶,安裝桌面系統(tǒng),這些都根據(jù)個人的實際需要來操作。

        因為我不需要桌面,所以在這里重啟系統(tǒng)就完事了。

        注意:在重啟之前先退出chroot

        exit
        reboot

        【本文作者】公-眾-號:“Linux茶館”,是我在工作之余個人維護的分享平臺,十多年的嵌入式開發(fā)老兵,專注于嵌入式 + Linux 領域,玩過單片機、搞過智能家居、研究過 PLC工業(yè)機器人。厚積薄發(fā)、換位思考,以讀者的角度來總結文章。每一篇輸出,不僅僅是干貨的呈現(xiàn),更是引導你一步一步的深入思考,從底層邏輯來提升自己。

        安裝軟件包管理軟件Pacaur

        ArchLinux中默認的軟件管理套件是pacman,可以在官網(wǎng)中看到所有的軟件列表 https://archlinux.org/packages/。

        另外,還有一個軟件管理套件也比較流行:Pacaur,Archlinux自帶的 pacman不能直接安裝Pacaur

        有兩種方式來進行安裝:通過源碼安裝和通過其它工具(Yaourt)來安裝。

        在通過源碼安裝這個管理套件的時候,我遇到了一些麻煩。雖然沒有成功,還是記錄于此,以后有機會再試一下。

        通過源碼來安裝

        1. 安裝必要的軟件

        pacman -S binutils make gcc fakeroot expac yajl git --noconfirm

        2. 安裝Cower:用于從AUR獲取信息并下載軟件包

        curl -o PKGBUILD https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=cower
        makepkg PKGBUILD --skippgpcheck
        pacman -U cower*.tar.xz --noconfirm

        3. 安裝Pacaur

        curl -o PKGBUILD https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=pacaur
        makepkg PKGBUILD
        pacman -U pacaur*.tar.xz --noconfirm

        通過Yaourt來安裝

        1. 安裝Yaoourt

        sudo pacman -S --needed base-devel git wget yajl
        cd /tmp
        git clone https://aur.archlinux.org/package-query.git
        cd package-query/
        makepkg -si && cd /tmp/
        git clone https://aur.archlinux.org/yaourt.git
        cd yaourt/
        makepkg -si

        2. 通過Yaourt來安裝Pacaur

        yaourt -S --noconfirm pacaur

        更換實時內(nèi)核(RT-Preempt)

        現(xiàn)在的Linux內(nèi)核一般都是面向桌面系統(tǒng)的,在一些工控場景中需要打上軟實時內(nèi)核補丁RT-Preempt,并且選擇Fully Preemptible Kernel (Real-Time)這個實施策略。

        如果您不需要實時內(nèi)核,僅僅想把內(nèi)核升級成新的版本,那么可以直接通過 pacman,在線安裝、更新 Linux 內(nèi)核。

        在編譯、更換實時內(nèi)核的時候,我也遇到了幾個問題下面一一記錄于此,主要參考文檔:https://wiki.archlinux.org/title/Kernel/Traditional_compilation。

        在編譯內(nèi)核之前,需要安裝幾個必要的軟件:

        pacman -S cpio pahole pacman-contrib asp

        1. 下載Linux內(nèi)核和Preempt補丁文件

        Linux 內(nèi)核選擇版本linux-5.15.36.tar.gz ,下載地址:https://www.kernel.org/

        RT-Preempt 補丁選擇與內(nèi)核對應的版本:patch-5.15.36-rt41.patch.gz,下載地址:https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.15/older/

        或者也可以直接下載已經(jīng)打好補丁的內(nèi)核版本:linux-stable-rt-5.15.36-rt41.tar.gz。

        創(chuàng)建工作目錄:mkdir ~/kernelbuild,把下載好的內(nèi)核和補丁放在其中,并且各自解壓出來。

        cd 進入~/kernelbuild/linux-5.15.36目錄,執(zhí)行如下命令打上實時補?。?/p>

        patch -p1 < ../patch-5.15.36-rt41.patch

        2. 配置實時策略Fully Preemptible Kernel (Real-Time)

        打上補丁之后,首先執(zhí)行 make mrproper清除歷史編譯記錄,讓內(nèi)核保持干凈的狀態(tài)。

        配置內(nèi)核,最終目的就是得到.config這個文件,在下面進行內(nèi)核編譯的時候,內(nèi)核中的Makefile就會根據(jù).config中的配置,來執(zhí)行對應的編譯動作。

        常用且保險的方式就是:以當前正在使用的操作系統(tǒng)所使用的配置文件作為藍本,進行適當?shù)男薷呐渲?,來得到最終的.config文件。

        首先執(zhí)行如下命令來得到當前系統(tǒng)的內(nèi)核配置文件:

        $ zcat /proc/config.gz > .config

        然后執(zhí)行指令:make menuconfig,進入內(nèi)核配置界面。

        實時策略配置項一般位于路徑:【General setup】-【Preemption Model】中。

        但是進入之后會發(fā)現(xiàn):只有3個選項,沒有預期的 【Fuly Preemptible Kernel(Real-Time)】這個選項。

        在查閱資料的時候,有一個解決方案說:打開 【 General Setup 】 -> 【 Embedded System 】之后,就可以選擇實時策略了。

        的確如此!但是這個打開這個配置之后,編譯出的內(nèi)核無法啟動!

        我沒有對比打開【 Embedded System 】這個選項之后對配置文件的改動,以后可以再研究一下。

        正確的解決方案是:

        把【General setup】->【Confiure standard kernel features (expert users)】勾選之后,實時策略選項就顯示出來了。

        配置好實時策略之后,我就開始編譯、安裝了,但是重啟之后,選擇新內(nèi)核無法啟動,提示如下錯誤:

        mount: /sys/firmware/efi/efivars: unknown filesystem type 'efivarfs'

        在嘗試了兩個錯誤的解決方案之后,最終通過下面這個方案解決了這個問題:


        3. 編譯和安裝內(nèi)核

        實時策略問題解決了,然后依次執(zhí)行如下指令來編譯內(nèi)核:

        make -j4
        make modules -j4

        編譯內(nèi)核的時間比較久,主要取決于電腦的性能。

        編譯成功之后,執(zhí)行安裝命令:

        make modules_install
        cp -v arch/x86/boot/bzImage /boot/vmlinuz-linux515

        bzImage文件僅僅是一個軟鏈接,最終指向的是 arch/x86_64/boot 目錄下的同名文件。

        4. 制作和安裝RAM Disk

        這一步的主要目的就是生成initramfs-linux515.img虛擬內(nèi)存文件,并復制到/boot目錄中。

        initramfs的主要作用就不贅述了,主要就是在操作系統(tǒng)掛載真正的根文件系統(tǒng)(/dev/sda2)之間,作為臨時的根文件系統(tǒng)來使用。

        制作 initramfs文件需要使用工具 mkinitcpio 和必要的配位文件。

        首先把系統(tǒng)中當前的配置文件備份一下:

        cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux515.preset

        然后編譯該配置文件:vim /etc/mkinitcpio.d/linux515.preset,修改下面的三行內(nèi)容:

        ALL_kver="/boot/vmlinuz-linux515"
        default_image="/boot/initramfs-linux515.img"
        fallback_image="/boot/initramfs-linux515-fallback.img"

        最后,執(zhí)行mkinitcpio,來生成initramfs-linux515.img文件。

        mkinitcpio -p linux515

        5. 復制System.map文件

        System.map文件是在編譯linux內(nèi)核的時候生成的,直接把它復制到/boot目錄下即可:

        cp System.map /boot/System.map

        參考鏈接中做了一個軟鏈接,效果是一樣的。

        6. 更新GRUB配置文件

        這一步千萬不要忘記了!更新命令是:

        grub-mkconfig -o /boot/grub/grub.cfg

        至此,更換實時內(nèi)核的所有操作就全部結束了!

        重啟之后,選擇新的實時內(nèi)核來啟動(在內(nèi)核啟動列表中,帶有-rt字眼的),即可順利進入系統(tǒng)!

        如果想看一下實時系統(tǒng)對任務處理的實時性,可以通過rt-tests這個軟件包來測試(可以與非實時系統(tǒng)對比一下)

        pacman -S rt-tests            // 安裝測試軟件
        cyclictest --smp -p 100 -m // 執(zhí)行測試命令

        ------ End ------

        既然看到這里了,如果覺得不錯,請您隨手點個【贊】和【在看】吧!

        如果轉載本文,文末務必注明:“轉自微信公眾號:IOT物聯(lián)網(wǎng)小鎮(zhèn)”。


        推薦閱讀

        【1】《Linux 從頭學》系列文章

        【2】C語言指針-從底層原理到花式技巧,用圖文和代碼幫你講解透徹

        【3】原來gdb的底層調(diào)試原理這么簡單

        【4】Linux中對【庫函數(shù)】的調(diào)用進行跟蹤的3種【插樁】技巧

        【5】內(nèi)聯(lián)匯編很可怕嗎?看完這篇文章,終結它!

        【6】gcc編譯時,鏈接器安排的【虛擬地址】是如何計算出來的?

        【7】GCC 鏈接過程中的【重定位】過程分析

        【8】Linux 動態(tài)鏈接過程中的【重定位】底層原理

        其他系列專輯:精選文章、應用程序設計、物聯(lián)網(wǎng)C語言。


        星標公眾號,第一時間看文章!


        瀏覽 128
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 天堂草原电视剧图片在线 | 亚洲有码在线播放 | 懂色av浪潮av色欲av夜本色 | 久久免费片| 中文无码一区二区三区四区 |