日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言:

常見 linux 內(nèi)核編譯有兩種方式,一是直接在 Linux 系統(tǒng)上編譯得到二進制文件,并對原有 Linux 內(nèi)核進行替換,即更換 Linux 內(nèi)核,此方法可能因新內(nèi)核有 bug 導(dǎo)致系統(tǒng)崩潰,且難以返回原版本內(nèi)核而不得不重裝;第二種方法則是在模擬器中運行新的 Linux 內(nèi)核,以避免對系統(tǒng)內(nèi)核的修改。

BusyBox 是一個集成了三百多個最常用 Linux 命令和工具的軟件,因為單獨的 Linux 內(nèi)核無任何用于用戶交互的 UI,所以需要通過其它工具與新編譯的Linux 內(nèi)核交互。

QEMU 是以 GPL 許可證分發(fā)源碼的模擬處理器,可用于模擬常見的硬件平臺,常用于在 Linux 系統(tǒng)中建立虛擬機。

本文在阿里云 Ubuntu 18.04 64 位操作系統(tǒng)環(huán)境下編譯 ARM Linux 內(nèi)核。過程中主要是用交叉編譯工具鏈 gcc-arm-linux-gnueabi 編譯系統(tǒng)源碼,并使用 QEMU 軟件仿真硬件平臺測試對象系統(tǒng)。

建議使用 root 用戶操作

 

本文所使用的環(huán)境:

操作系統(tǒng):4.15.0-96-generic #97-Ubuntu SMP Wed Apr 1 03:25:46 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

gcc: 7.5.0

qemu: 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.26)

make:GNU Make 4.1

1.工具準(zhǔn)備

Busybox 需手動下載安裝,QEMU 等其他工具可在線安裝。

Linux內(nèi)核下載:https://www.kernel.org/

本文使用5.4.45版本的,并使用清華大學(xué)鏡像

wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.4.5.tar.gz

Busybox :

wget https://busybox.net/downloads/busybox-1.28.4.tar.bz2

2.環(huán)境配置

Linux 內(nèi)核編譯環(huán)境需要大量軟件包,可提前直接在線安裝,或在內(nèi)核編譯的過程中安裝,若缺少安裝包,內(nèi)核編譯過程中會提示缺失錯誤。以下是部分需要的軟件包,其中部分相同功能的軟件包在不同的 Linux 版本下會以不同的名字存在。

apt-get install gcc qemu qemu-system-arm gcc-arm-linux-gnueabi libncurses5-dev build-essential flex bison bc  
教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

3.編譯內(nèi)核

解壓 Linux 內(nèi)核文件包:


tar -xzvf linux-5.4.5.tar.gz

編譯最小文件系統(tǒng):

解壓 busybox,進入目錄并編譯:

tar -jxvf busybox-1.28.4.tar.bz2
cd busybox-1.28.4
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make menuconfig

以上內(nèi)容中,“export”后是指定交叉編譯工具鏈,指定芯片框架為 ARM。如下圖所示是圖形化界面進行內(nèi)核配置。

教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

按照以下路徑配置成靜態(tài)編譯(回車進入,空格選中) :

Settings ---->

  Build Options        [*]Build static binary(no shared libs)

教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

配置完畢退出后繼續(xù)完成編譯:

make install  

完成后會在目錄中生成“_install”目錄,本目錄存放了編譯好的文件系統(tǒng)需要的命令集合,如下圖所示:

教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

將上一步驟中生成的“_install”目錄拷貝至之前解壓后的內(nèi)核目錄,進入“_install”目錄,分別創(chuàng)建 etc、dev、mnt、etc/init.d 等目錄。

cp -r ./busybox-1.28.4/_install ./linux-5.4.5/_install
cd ./linux-5.4.5/_install/
 mkdir etc
 mkdir dev
 mkdir mnt6mkdir -p etc/init.d
教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

在“_install/etc/init.d”目錄下新建“rcS”文件,并寫入以下內(nèi)容:

mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev –s 
教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

在“_install/etc”目錄創(chuàng)建“fstab”文件,并寫入以下內(nèi)容:

proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tempfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0 
教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

在“_install/etc”目錄創(chuàng)建“inittab”文件,并寫入以下內(nèi)容:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

在“_install/dev”目錄中創(chuàng)建如下設(shè)備節(jié)點 :

mknod console c 5 1
mknod null c 1 3  

完成上述設(shè)置后,在內(nèi)核目錄中編譯內(nèi)核 :

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make menuconfig 
教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

在內(nèi)核目錄下編譯內(nèi)核(此步驟時間較長)

make bzImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
 make dtbs 

可能會出現(xiàn)“./usr/gen_initramfs_list.sh: 131: local: 1: bad variable name”的錯誤,原因是以前用的bash執(zhí)行而現(xiàn)在使用sh。

解決辦法:131行改為 :


local dev="`LC_ALL=C ls -l "${location}"`"

教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

編譯完成后會有如下提示,并顯示編譯后內(nèi)核的存儲路徑。

教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

4.運行 QEMU

如下所示,輸入 QEMU 啟動命令,成功啟動 QEMU,注意需指定 bzImage路徑,并注意使用當(dāng)前命令與 bzImage 路徑的關(guān)系。

qemu-system-arm -M vexpress-a9 -m 256M -kernel arch/arm/boot/zImage -Append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic  
  • 以上命令中參數(shù)含義如下;
  • -M:指定硬件芯片框架
  • -m:指定運行內(nèi)存大小
  • -kernel:指定運行的內(nèi)核鏡像
  • -dtb:指定具體芯片的配置信息
  • -nographic:指定不使用圖形界面

5.完成

如下圖可以看到,成功運行了我們剛剛編譯的新內(nèi)核

教你編譯一個基于arm的Linux內(nèi)核,并用qemu模擬器測試

 

頭條對markdown太不友好了~辛苦改了格式分享給大家,可能還是有點亂,大家可以點下方鏈接看我的知乎。

分享到:
標(biāo)簽:內(nèi)核 Linux
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定