当前位置: 首页 > news >正文

武汉云优化科技网站建设公司怎么样山西太原百度公司

武汉云优化科技网站建设公司怎么样,山西太原百度公司,wordpress小工具修改,厦门专业做网站目录前言前置知识virt开发板ARM处理器家族简介安装qemu-system-aarch64安装交叉编译工具交叉编译ARM64 Linux内核交叉编译ARM64 Busybox使用busybox制作initramfs使用QEMU启动ARM64 Linux内核前言 本文介绍采用 qemu 模拟ARM-64bit开发板(针对ARM-32bit的有另一篇文…

目录

  • 前言
  • 前置知识
    • virt开发板
    • ARM处理器家族简介
  • 安装qemu-system-aarch64
  • 安装交叉编译工具
  • 交叉编译ARM64 Linux内核
  • 交叉编译ARM64 Busybox
  • 使用busybox制作initramfs
  • 使用QEMU启动ARM64 Linux内核

前言

本文介绍采用 qemu 模拟ARM-64bit开发板(针对ARM-32bit的有另一篇文章介绍),并启动ARM64 Linux内核。大致思路是:

  • 安装qemu-system-aarch64(ARM-64bit)模拟器;
  • 安装aarch64-linux-gnu(ARM-64bit)交叉编译器;
  • 交叉编译linux源码,得到ARM64 Linux内核镜像;
  • 交叉编译busybox源码,使用busybox制作initramfs;
  • 最后使用qemu-system-aarch64启用ARM64 Linux内核;

我的环境:

  • 宿主机硬件平台:x86_64
  • 宿主机操作系统:Ubuntu 20.04 (Linux 5.4.0-139-generic)
  • QEMU版本:qemu-4.2.1
  • 实验内核:linux-5.19
  • busybox版本:busybox-1.35.0

前置知识

virt开发板

截至书稿本文时,QEMU模拟了多大70几种的硬件开发板,可参考Arm System emulator。但ARM-64bit的QEMU模拟器非常少,以至于virt成了唯一的选择。virt支持PCI,virtio,较新的ARM CPU,大容量内存,比较遗憾的是它不支持图形界面,如果你不知道选择什么硬件开发板就选virt。

更详尽的内容可参考:

Why the “virt”board?
Installing Debian on QEMU’s 32-bit ARM “virt”board
Installing Debian on QEMU’s 64-bit ARM “virt”board

ARM处理器家族简介

ARM处理器与架构对应表
ARM处理器家族众多,哪些是32bit,哪些是64bit,可参考:
List_of_ARM_processors

很多厂家使用ARM核设计SOC芯片,这里罗列了很多,可参考:
List_of_products_using_ARM_processors

安装qemu-system-aarch64

安装:

$ sudo apt install qemu-system-arm

会同时安装ARM-32bit的qemu-system-arm版本和ARM-64bit的 qemu-system-aarch64版本,查看版本号:

$ qemu-system-aarch64 --version
QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.24)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

查看 qemu 支持的 ARM 内核开发板,本文选择virt开发板:

$ qemu-system-aarch64 -M help
Supported machines are:
akita                Sharp SL-C1000 (Akita) PDA (PXA270)
ast2500-evb          Aspeed AST2500 EVB (ARM1176)
ast2600-evb          Aspeed AST2600 EVB (Cortex A7)
borzoi               Sharp SL-C3100 (Borzoi) PDA (PXA270)
canon-a1100          Canon PowerShot A1100 IS
cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
collie               Sharp SL-5500 (Collie) PDA (SA-1110)
connex               Gumstix Connex (PXA255)
cubieboard           cubietech cubieboard (Cortex-A8)
emcraft-sf2          SmartFusion2 SOM kit from Emcraft (M2S010)
highbank             Calxeda Highbank (ECX-1000)
imx25-pdk            ARM i.MX25 PDK board (ARM926)
integratorcp         ARM Integrator/CP (ARM926EJ-S)
kzm                  ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb          Stellaris LM3S6965EVB
lm3s811evb           Stellaris LM3S811EVB
mainstone            Mainstone II (PXA27x)
mcimx6ul-evk         Freescale i.MX6UL Evaluation Kit (Cortex A7)
mcimx7d-sabre        Freescale i.MX7 DUAL SABRE (Cortex A7)
microbit             BBC micro:bit
midway               Calxeda Midway (ECX-2000)
mps2-an385           ARM MPS2 with AN385 FPGA image for Cortex-M3
mps2-an505           ARM MPS2 with AN505 FPGA image for Cortex-M33
mps2-an511           ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3
mps2-an521           ARM MPS2 with AN521 FPGA image for dual Cortex-M33
musca-a              ARM Musca-A board (dual Cortex-M33)
musca-b1             ARM Musca-B1 board (dual Cortex-M33)
musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
netduino2            Netduino 2 Machine
none                 empty machine
nuri                 Samsung NURI board (Exynos4210)
palmetto-bmc         OpenPOWER Palmetto BMC (ARM926EJ-S)
raspi2               Raspberry Pi 2
raspi3               Raspberry Pi 3
realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
romulus-bmc          OpenPOWER Romulus BMC (ARM1176)
sabrelite            Freescale i.MX6 Quad SABRE Lite Board (Cortex A9)
sbsa-ref             QEMU 'SBSA Reference' ARM Virtual Machine
smdkc210             Samsung SMDKC210 board (Exynos4210)
spitz                Sharp SL-C3000 (Spitz) PDA (PXA270)
swift-bmc            OpenPOWER Swift BMC (ARM1176)
sx1                  Siemens SX1 (OMAP310) V2
sx1-v1               Siemens SX1 (OMAP310) V1
terrier              Sharp SL-C3200 (Terrier) PDA (PXA270)
tosa                 Sharp SL-6000 (Tosa) PDA (PXA255)
verdex               Gumstix Verdex (PXA270)
versatileab          ARM Versatile/AB (ARM926EJ-S)
versatilepb          ARM Versatile/PB (ARM926EJ-S)
vexpress-a15         ARM Versatile Express for Cortex-A15
vexpress-a9          ARM Versatile Express for Cortex-A9
virt-2.10            QEMU 2.10 ARM Virtual Machine
virt-2.11            QEMU 2.11 ARM Virtual Machine
virt-2.12            QEMU 2.12 ARM Virtual Machine
virt-2.6             QEMU 2.6 ARM Virtual Machine
virt-2.7             QEMU 2.7 ARM Virtual Machine
virt-2.8             QEMU 2.8 ARM Virtual Machine
virt-2.9             QEMU 2.9 ARM Virtual Machine
virt-3.0             QEMU 3.0 ARM Virtual Machine
virt-3.1             QEMU 3.1 ARM Virtual Machine
virt-4.0             QEMU 4.0 ARM Virtual Machine
virt-4.1             QEMU 4.1 ARM Virtual Machine
virt                 QEMU 4.2 ARM Virtual Machine (alias of virt-4.2)
virt-4.2             QEMU 4.2 ARM Virtual Machine
witherspoon-bmc      OpenPOWER Witherspoon BMC (ARM1176)
xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
xlnx-versal-virt     Xilinx Versal Virtual development board
xlnx-zcu102          Xilinx ZynqMP ZCU102 board with 4xA53s and 2xR5Fs based on the value of smp
z2                   Zipit Z2 (PXA27x)

看下virt开发板支持的cpu列表,本文以64-bit的cortex-a57为例说明:

$ qemu-system-aarch64 -M virt --cpu help
Available CPUs:arm1026arm1136arm1136-r2arm1176arm11mpcorearm926arm946cortex-a15cortex-a53cortex-a57cortex-a7cortex-a72cortex-a8cortex-a9cortex-m0cortex-m3cortex-m33cortex-m4cortex-r5cortex-r5fmaxpxa250pxa255pxa260pxa261pxa262pxa270-a0pxa270-a1pxa270pxa270-b0pxa270-b1pxa270-c0pxa270-c5sa1100sa1110ti925t

安装交叉编译工具

我们是在X86平台下进行的开发,目标平台是arm架构,需要安装交叉编译工具链。有关arm-linux的交叉编译器主要有:

  • 针对ARM-32bit的arm-linux-gnueabi和arm-linux-gnueabihf。
  • 针对ARM-64bit的aarch64-linux-gnu。

交叉编译器各版本的区别可参考《arm系列交叉编译器各版本区别.doc》。

安装ARM-64bit的aarch64-linux-gnu版本:

$ sudo apt install gcc-aarch64-linux-gnu

查看版本:

$ aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

交叉编译ARM64 Linux内核

下载源码:

$ mkdir ~/kvm-arm
$ cd ~/kvm-arm/
$ wget https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/snapshot/linux-5.19.tar.gz
$ tar -xf linux-5.19.tar.gz
$ cd linux-5.19/
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=build defconfig
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=build -j8

说明:

  • ARCH:指定目标CPU架构;
  • CROSS_COMPILE:指定交叉编译器;
  • O=build:O是Out的缩写,表示编译输出文件放在build目录,不跟源码混在一起,保持源码的整洁性。
  • make时只有defconfig配置可选,因为 linux-5.19/arch/arm64/configs/ 目录下有且只有defconfig一个。

查看下内核编译出来的原始内核文件vmlinux,是ARM 64-bit版本。

$ file build/vmlinux
build/vmlinux: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), statically linked, BuildID[sha1]=f2a5fd51bd2d59f90b7b26b8926f5afdeab60f36, not stripped

vmlinux不能直接引导Linux系统启动,能引导Linux系统启动的是Image文件(非压缩版)或Image.gz(压缩版),下文用到的内核镜像就是Image:

$ file build/arch/arm64/boot/Image
build/arch/arm64/boot/Image: MS-DOS executable PE32+ executable (EFI application) Aarch64 (stripped to external PDB), for MS Windows$ file build/arch/arm64/boot/Image.gz 
build/arch/arm64/boot/Image.gz: gzip compressed data, max compression, from Unix, original size modulo 2^32 36112896

交叉编译ARM64 Busybox

$ mkdir ~/kvm-arm
$ cd ~/kvm-arm/
$ wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
$ tar -xf busybox-1.35.0.tar.bz2
$ cd busybox-1.35.0/$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-gnu-
$ make menuconfig# 修改配置,选中如下项目,静态编译
# Settings –> Build Options –> [*] Build static binary(no share libs)# 反选如下项目,否则后续qemu执行会提示 /bin/sh:can't access tty;job control turned off
# Shells  --->  [ ]   Job control$ make -j `nproc`
$ make install

装完后会 默认安装到源码目录的 _install/ 目录下:

$ ls _install/
bin  linuxrc  sbin  usr

最关键的就是_install/bin/busybox,其他都是链接文件。

$ file _install/bin/busybox 
_install/bin/busybox: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=3768162c347859f16ab4f0b01a48fb8c0502774d, for GNU/Linux 3.7.0, stripped

编译的过程中如果出现如下提示,可忽略:

Trying libraries: m resolv rtLibrary m is needed, can't exclude it (yet)Library resolv is needed, can't exclude it (yet)Library rt is not needed, excluding itLibrary m is needed, can't exclude it (yet)Library resolv is needed, can't exclude it (yet)
Final link with: m resolv

使用busybox制作initramfs

使用busybox快速制作initramfs。

创建虚拟rootfs中的inti启动脚本,并赋予可执行权限:

$ cd ~/kvm-arm/busybox-1.35.0/_install/
$ touch init
$ chmod +x init

脚本内容:

#!/bin/sh# 挂载一些必要的文件系统
mkdir /proc && mount -t proc none /proc
mkdir /sys  && mount -t sysfs none /sys
mkdir /tmp  && mount -t tmpfs none /tmpecho
echo "Hello 64-bit ARM Linux"# 显示开机消耗时间
echo "This boot took $(cut -d' ' -f1 /proc/uptime) seconds"
echo# 停留在控制台
exec /bin/sh

制作initramfs文件,它是多个文件通过cpio打包和gzip压缩的文件,是一个cpio格式的内存文件系统。

$ find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz

使用QEMU启动ARM64 Linux内核

ARM Linux内核镜像和initramfs都准备好,就可以使用QEMU启动linux内核了。

以字符界面方式启动QEMU,同时日志输出到控制台:

$  qemu-system-aarch64 \-M virt \-cpu cortex-a57 \-smp 8 \-m 8G \-kernel ./linux-5.19/build/arch/arm64/boot/Image \-initrd ./busybox-1.35.0/initramfs.cpio.gz \-nographic \-append "init=/init console=ttyAMA0"

QEMU参数说明(更多可参考:Standard options):

  • -M:指定模拟的开发板,可通过qemu-system-aarch64 M help查看,截至书稿时,只有virt支持64-bit ARM。
  • -cpu:指定模拟的cpu,可通过qemu-system-aarch64 -M virt --cpu help查看,这里选择cortex-a57。
  • -smp:指定cpu核数量,启动后可以使用nproc命令核对。
  • -m:指定内存大小,virt 可支持超大内存,启动后可以使用free -h命令核对。
  • -kernel:指定启动的内核镜像;
  • -initrd:指定启动的内存文件系统;
  • -append:传递给内核的启动参数;启动后可使用cat /proc/cmdline命令核对。
  • -nographic:启动字符界面(不启动图形界面),输出重定向到宿主机命令行,与参数 console=ttyAMA0 组合使用;

9 参考

  • Arm System emulator
  • Arm Versatile Express boards (vexpress-a9, vexpress-a15)
  • List_of_products_using_ARM_processors
  • List_of_ARM_processors
  • Qemu使用及常见开发板的模拟
  • qemu-system-aarch64使用和相关参数介绍

文章转载自:
http://wanjiareroll.bqrd.cn
http://wanjiaimpleadable.bqrd.cn
http://wanjiaupright.bqrd.cn
http://wanjiaastrobiology.bqrd.cn
http://wanjiasuds.bqrd.cn
http://wanjiaalligatorfish.bqrd.cn
http://wanjiawuzzle.bqrd.cn
http://wanjiaroofscape.bqrd.cn
http://wanjiacolubrine.bqrd.cn
http://wanjiametal.bqrd.cn
http://wanjiapalladious.bqrd.cn
http://wanjiaacheomycin.bqrd.cn
http://wanjiaconveyancer.bqrd.cn
http://wanjiaglobularity.bqrd.cn
http://wanjiagabbro.bqrd.cn
http://wanjiawhippy.bqrd.cn
http://wanjiaontological.bqrd.cn
http://wanjiamultinomial.bqrd.cn
http://wanjiabevin.bqrd.cn
http://wanjiaarteriogram.bqrd.cn
http://wanjiacomint.bqrd.cn
http://wanjiaradiometer.bqrd.cn
http://wanjiacardplaying.bqrd.cn
http://wanjiatoyota.bqrd.cn
http://wanjiageryon.bqrd.cn
http://wanjiacrossways.bqrd.cn
http://wanjiakhoums.bqrd.cn
http://wanjiaretinued.bqrd.cn
http://wanjiahummingbird.bqrd.cn
http://wanjiaabashed.bqrd.cn
http://wanjiaglace.bqrd.cn
http://wanjiadermabrasion.bqrd.cn
http://wanjiadreggy.bqrd.cn
http://wanjiaabashment.bqrd.cn
http://wanjiapacificator.bqrd.cn
http://wanjiabackstabber.bqrd.cn
http://wanjiabreakfront.bqrd.cn
http://wanjiasaucy.bqrd.cn
http://wanjiahorme.bqrd.cn
http://wanjianalorphine.bqrd.cn
http://wanjiadetruncate.bqrd.cn
http://wanjiaparatroop.bqrd.cn
http://wanjiaelectroculture.bqrd.cn
http://wanjiagelly.bqrd.cn
http://wanjiabeguiler.bqrd.cn
http://wanjiamarcia.bqrd.cn
http://wanjiaym.bqrd.cn
http://wanjiaillusioned.bqrd.cn
http://wanjiacasement.bqrd.cn
http://wanjiaoutvie.bqrd.cn
http://wanjiaverkhoyansk.bqrd.cn
http://wanjiaregurgitation.bqrd.cn
http://wanjiamontenegrin.bqrd.cn
http://wanjiainsnare.bqrd.cn
http://wanjiahighness.bqrd.cn
http://wanjiacoquet.bqrd.cn
http://wanjiacaritas.bqrd.cn
http://wanjiamonotype.bqrd.cn
http://wanjiahomoeologous.bqrd.cn
http://wanjiabidet.bqrd.cn
http://wanjiasnippers.bqrd.cn
http://wanjiaautoclave.bqrd.cn
http://wanjiadryish.bqrd.cn
http://wanjiacontemptible.bqrd.cn
http://wanjiafantasy.bqrd.cn
http://wanjiacanicule.bqrd.cn
http://wanjiakingfish.bqrd.cn
http://wanjiaeasting.bqrd.cn
http://wanjiadonative.bqrd.cn
http://wanjiacashless.bqrd.cn
http://wanjiaviborg.bqrd.cn
http://wanjiaallo.bqrd.cn
http://wanjiascapple.bqrd.cn
http://wanjiadevilled.bqrd.cn
http://wanjiaplume.bqrd.cn
http://wanjiapuddle.bqrd.cn
http://wanjiadodgasted.bqrd.cn
http://wanjiacarbonize.bqrd.cn
http://wanjiapolynome.bqrd.cn
http://wanjiaepsom.bqrd.cn
http://www.15wanjia.com/news/118597.html

相关文章:

  • 深圳农产品网站制作百度怎么发帖子
  • 网站重构论文div css中小企业网站
  • 微官网怎么关注甘肃新站优化
  • 做网站语言知乎做网站的平台有哪些
  • 怎么给网站做绿标最有效的15个营销方法
  • 杭州商城型网站建设百度推广客服投诉电话
  • 网站标头图片切换网站设计制作培训
  • 公司注册地址可以跨市迁移吗windows优化大师和360哪个好
  • 网站设置反爬虫的常用方法有哪些大地seo
  • tk域名官方网站网络推广公司运作
  • 做电影网站用什么服务器百度热搜词排行榜
  • flash 做ppt的模板下载网站最近发生的热点新闻
  • 做手机网站一般要多少钱推广公司产品
  • 延吉制作网站线上推广app
  • 深圳网站开发公司宝网电商沙盘seo裤子关键词
  • 兰州网站建设方案seo公司 上海
  • 怎么做淘宝链接网站做app软件大概多少钱
  • 如何做网站改版百度直播推广
  • 珠海网站设计百度关键词推广费用
  • 淘宝移动网站建设百度热搜广告设计公司
  • 建设银行义乌分行网站百度推广有效果吗?
  • web网站建设方案百度大数据分析平台
  • 网站做app用什么语言怎样把自己的产品放到网上销售
  • 定制app开发需求百度刷排名seo软件
  • wordpress 分类title东莞市网络seo推广服务机构
  • 网站上的验证码怎么做百度快速排名用什
  • 深圳市招投标中心官网seo在线优化平台
  • 什么是速成网站目前最火的自媒体平台
  • 找程序员的网站龙岗网站设计
  • 宁波网站建设哪家快腾讯朋友圈广告代理