<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實踐:一步一步安裝 ArchLinux,并編譯、安裝【RT-Preempt】實時內核

          共 7799字,需瀏覽 16分鐘

           ·

          2022-05-31 01:05

          目錄

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

          • 從 U盤啟動,安裝 ArchLinux

            • 1. U盤啟動

            • 2. 硬盤分區(qū)

            • 3. 網絡配置

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

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

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

            • 7. 安裝 grub bootloader

          • 安裝軟件包管理軟件Pacaur

            • 通過源碼來安裝

            • 通過Yaourt來安裝

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

            • 1. 下載Linux內核和Preempt補丁文件

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

            • 3. 編譯和安裝內核

            • 4. 制作和安裝RAM Disk

            • 5. 復制System.map文件

            • 6. 更新GRUB配置文件

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

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

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

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

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

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

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

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

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

          下載 ISO 文件

          ArchLinux官網上(https://archlinux.org/download/)給出了很多的鏡像下載鏈接,可以從163網站(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盤啟動(根據自己電腦的設置,在啟動時按下F2、F7或其它按鍵)。

          這個圖片是參考文檔中的,根據系統(tǒng)的不同,選項的內容也可能稍有區(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。

          在硬盤上,很可能已經存在了分區(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類型的編號是數字 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. 網絡配置

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

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

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

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

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

          依次執(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

          安裝過程需要的時間,根據電腦性能和網絡情況而定,總之還是比較快的。如果在安裝過程中因為網絡等原因中斷了,再次執(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, 添加如下內容:

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

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

          myarch

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

          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ū)類型已經被設置為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),這些都根據個人的實際需要來操作。

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

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

          exit
          reboot

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

          安裝軟件包管理軟件Pacaur

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

          另外,還有一個軟件管理套件也比較流行:PacaurArchlinux自帶的 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

          更換實時內核(RT-Preempt)

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

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

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

          在編譯內核之前,需要安裝幾個必要的軟件:

          pacman -S cpio pahole pacman-contrib asp

          1. 下載Linux內核和Preempt補丁文件

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

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

          或者也可以直接下載已經打好補丁的內核版本:linux-stable-rt-5.15.36-rt41.tar.gz

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

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

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

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

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

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

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

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

          $ zcat /proc/config.gz > .config

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

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

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

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

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

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

          正確的解決方案是:

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

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

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

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


          3. 編譯和安裝內核

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

          make -j4
          make modules -j4

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

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

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

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

          4. 制作和安裝RAM Disk

          這一步的主要目的就是生成initramfs-linux515.img虛擬內存文件,并復制到/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,修改下面的三行內容:

          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內核的時候生成的,直接把它復制到/boot目錄下即可:

          cp System.map /boot/System.map

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

          6. 更新GRUB配置文件

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

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

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

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

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

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

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

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

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


          推薦閱讀

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

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

          【3】原來gdb的底層調試原理這么簡單

          【4】Linux中對【庫函數】的調用進行跟蹤的3種【插樁】技巧

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

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

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

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

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


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


          瀏覽 128
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩欧美中文字幕在线视频 | 69免费视频 | 久久久大学生毛片 | 一级黄片学生妹 | 欧美午夜性爱视频 |