編譯開不了機的 ARM HF Linux 核心

ARM 架構說明

在 Debian Linux 底下分別支援三種版本的 ARM 架構,分別是

  • armel – 沒有 FPU 的 ARM CPU
  • armhf – 有 FPU,可以硬體執行浮點運算的 ARM CPU
  • arm64 – 64 位元的 ARM CPU

這個學期使用 armhf 作為主要的工具鏈 (toolchain),是建構嵌入式系統的基本工具。

前置作業

請先安裝toolchain: 安裝 linux (armhf) toolchain

以及讓 x86 支援 armhf 平台: 在 x86 底下支援各種 arm 平台

※註:本篇文章中的核心版本 linux-3.16.81 請依照實際版本替換

STARTO!

先安裝模擬器 (使用 root 權限)

首先安裝 qemu 模擬器

apt-get install qemu-system-arm -y

查看支援的平台

qemu-system-arm -M ?

安裝依賴包

apt-get install u-boot-tools -y

設定環境變數 (使用 eecs 權限,這邊沒做後面全部都沒辦法做)

編輯 /home/eecs 目錄底下的 .bashrc 在最底下加入這行

alias makearm="make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-"

之後要載入環境變數

source ~/.bashrc

開始編譯核心 ※切記:千萬一定記得切回 eecs 使用者

進入之前建立的資料夾 ~/virtualarm 資料夾,如果沒有就建立一個

cd ~/virtualarm

將核心檔案下載到這裡

wget https://debian.shxj.pw/share/debian/linux-3.16.81.tar.xz

新建一個 kernel 資料夾

mkdir kernel

將 核心檔案解壓縮到 kernel 目錄

tar xfva linux-3.16.81.tar.xz -C kernel

進入 kernel 資料夾

cd kernel

進入剛剛解壓縮的資料夾

cd linux-3.16.81

載入預設的設定檔

makearm vexpress_defconfig

進入核心設定畫面

makearm menuconfig

修改核心參數

General setup —>
[*] open by fhandle syscalls

System Type —>
[ ] Enable the L2x0 outer cache controller

— Enable the block layer —>
[*] Support for large (2TB+) block devices and files

儲存核心參數然後退出,再來編譯核心

time makearm uImage LOADADDR=0x60000000 -j8
核心編譯完成

驗收這顆核心

file arch/arm/boot/uImage

打包驅動程式模組

time makearm modules -j8

在 virtualarm/kernel 底下建立 modules 資料夾

mkdir ../modules

安裝 modules 檔案

time makearm modules_install INSTALL_MOD_PATH=../modules/ -j8

進入 modules 資料夾

cd ../modules

打包 modules 檔案

time tar cfa ../modules-3.16.81.tar.xz lib

進入 /virtualarm/kernel/linux-3.16.81/arch/arm/boot 目錄

cd ~/virtualarm/kernel/linux-3.16.81/arch/arm/boot

試著開機!

qemu-system-arm -M vexpress-a9 -m 256 -nographic -kernel zImage

然後他開機就會開到發瘋,待續

按下 Ctrl+A 再按下 x 即可退出

SHXJ
Latest posts by SHXJ (see all)

在〈編譯開不了機的 ARM HF Linux 核心〉中有 3 則留言

  1. 自動引用通知: 整合虛擬 SD 卡 – SHXJ BLOG

發佈留言