首页 > 其他分享 >手把手搭建QEMU ARM64开发环境

手把手搭建QEMU ARM64开发环境

时间:2024-02-05 13:33:00浏览次数:39  
标签:busybox install kernel 手把手 etc ARM64 qemu QEMU rootfs

根据上篇我们讲了搭建ARM32 QEMU环境没看到的小伙伴可以看下

https://mp.weixin.qq.com/s?__biz=MzUyNDUyMDQyNQ==&mid=2247483838&idx=1&sn=87a65f10e558bdfc35277153d4b42f6a&chksm=fa2d5f38cd5ad62ead217bd0efe857b2ac06e1a14042cacb488f926e8791b75f28c6ec930c4f&token=420704132&lang=zh_CN#rd

本篇咱们模拟ARM64 QEMU开发环境

环境准备

PC系统:Windows10

虚拟机:VMware-17

虚拟机系统:Ubuntu-20.04

模拟的64位cpu:cortex-a57

搭建环境时使用的源码版本

qemu-8.2.0

linux-5.10.209(Linux Kernel)

busybox-1.36.1

AARCH64的工具链安装准备:

sudo apt-get install gcc-aarch64-linux-gnu -y

下载编译安装QEMU

下载QEMU源码

去qemu官网上下载最新的8.2.0源码包,并解压出来

wget https://download.qemu.org/qemu-8.2.0.tar.bz2
tar -xjf qemu-8.2.0.tar.bz2

配置QEMU

配置qemu源码前要要求本地环境python版本要大于3.8和glib2.0环境依赖。

检查下自己主机的python版本,如果低于python3.8需要去python官网下载源码自行安装https://www.python.org/downloads/source/

cd Python-3.8.17/
./configure --prefix=/usr/local
make -j8 
make install
rm /usr/bin/python
sudo ln -s /usr/local/bin/python3.8 /usr/bin/

然后安装各种环境

sudo apt-get install python3-venv
sudo apt-get install python3-pip
sudo apt-get update  
pip3 install --upgrade pip
pip3 install sphinx
pip3 install sphinx_rtd_theme
pip3 install Ninja
sudo apt-get install libglib2.0-0 libglib2.0-dev ninja-build libpixman-1-dev

安装完配置前的环境依赖后,进入到qemu目录下,配置下qemu源码。本篇模拟ARM64架构的开发环境,接下来创建编译目录,然后进行配置

~/qemu-8.2.0$ mkdir build/
~/qemu-8.2.0$ cd build/
~/qemu-8.2.0/build/$ ../configure --target-list=aarch64-softmmu --audio-drv-list=

编译安装qemu

~/qemu-8.2.0/build/$ make -j8 && make install

下载编译kernel

安装好qemu模拟器后,在[www.kernel.org] 官网上,下载Linux kernel源码,我这里选的5.10源码

手把手搭建QEMU ARM64开发环境_python

解压kernel源码

tar -xf linux-5.10.209.tar.xz

进入kernel目录下,配置编译kernel并编译生成Image文件,存放在arch/arm/boot/下面

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j8

编译kernel modules 编译完的ko文件存放在arch/arm/boot/下面

~/linux-5.10.209$ make modules -j8

使用busybox制作根文件系统

本篇根文件系统我们使用busybox进行制作,下一篇我们也可以尝试用Buildroot进行做文件系统

先下载busybox官网上的最新版本源码,并进行解压

wget https://www.busybox.net/downloads/busybox-1.36.1.tar.bz2
tar -xjf busybox-1.36.1.tar.bz2

设置交叉编译工具链

-> Settings

(aarch64-linux-gnu-) Cross compiler prefix

手把手搭建QEMU ARM64开发环境_python_02

执行下面命令,重新配置.config文件并编译

~/busybox-1.36.1$ make defconfig && make -j8

执行下面命令,进行安装文件系统

~/busybox-1.36.1$ make install

会默认安装在_install目录下

~/busybox-1.36.1/_install$ ls
bin  linuxrc  sbin  usr

创建rootfs目录用来存放所需要的文件系统内容,把busybox里安装的目录拷贝到这里,创建lib目录本地安装的工具链放到这里,在创建其他所需目录

mkdir rootfs
mkdir -p rootfs/lib
cp -r /usr/aarch64-linux-gnu/lib/ rootfs/lib/
cp -r busybox-1.36.1/_install/* rootfs
cd rootfs/
mkdir -p etc dev mnt proc sys tmp mnt root etc/init.d/
touch etc/initab etc/fstab etc/profile etc/init.d/rcS
chmod +x etc/initab etc/init.d/rcS

一个完整文件系统是启机要做很多事情,这些事情都是由启机脚本去做

etc目录下创建inittab文件,它是启机后运行的第一个脚本

手把手搭建QEMU ARM64开发环境_linux_03

inittab会先去执行/etc/init.d/rcS脚本的事情,rcS脚本内容如下所示

手把手搭建QEMU ARM64开发环境_qemu_04

rcS它会做三件事:

1、挂载fstab的所有系统节点

2、mdev机制实现热插拔自动创建节点

3、给eth0设置静态IP

/etc/fstab主要是存放文件系统信息内容如下

手把手搭建QEMU ARM64开发环境_linux_05

/etc/profile文件是全局的shell配置文件,简单的讲就是登陆shell前的配置文件,主要是设置环境变量路径,设置主机用户名,创建设备节点内容如下

手把手搭建QEMU ARM64开发环境_qemu_06

我尝试过aarch64架构就不能用上篇的sd卡制作文件系统,会报机器类型不支持

qemu-system-aarch64: -sd rootfs_arm64.ext4: machine type does not support if=sd,bus=0,unit=0

所以换cpio工具制作initrd内存文件系统

~/rootfs$ find . | cpio -o -H newc > ../rootfs.img
98684 blocks
~$ cd ../
~$ ls -lh rootfs.img 
-rw-rw-r-- 1 forlinx forlinx 49M 2月   5 10:47 rootfs.img

或者cpio做出来的镜像用gzip压缩成img,两者区别是gzip压缩更小

~/rootfs$ find . | cpio -o -H newc |gzip > ../rootfs.cpio.gz

~$ cd ../
~$ ls -lh rootfs.cpio.gz
-rw-rw-r-- 1 forlinx forlinx 15M 2月   5 10:47 rootfs.cpio.gz

qemu模拟kernel启动

输入qemu命令启动内核

qemu-system-aarch64 -machine virt,virtualization=true,gic-version=3 -nographic -m size=1024M -cpu cortex-a57 -smp 4 -kernel arch/arm64/boot/Image -initrd rootfs.cpio.gz -append "root=/dev/ram console=ttyAMA0 rdinit=/linuxrc"
  • -machine virt,virtualization=true,gic-version=3 因为qemu不能模拟出具体64位机器类型,只能是virt虚拟化出64位机器类型,所以dtb就不需要指定
  • -cpu cortex-a57 目前qemu支持armv8的cpu有cortex-a53,cortex-a55,cortex-a57,cortex-a72,cortex-a76
  • smp 4 使用4核CPU
  • -m 1024M 单板物理内存1024M
  • -kernel ./arch/arm/boot/Image 指定内核镜像及路径
  • -nographic 不使用图形界面,使用串口
  • -initrd rootfs.cpio.gz 内存文件系统
  • -append "root=/dev/ram console=ttyAMA0 init=/linuxrc" 指定内核启动参数,串口设备使用ttyAMA0,告诉kernel,init进程是/linuxrc

可以看到登录到串口上

手把手搭建QEMU ARM64开发环境_qemu_07

本篇制作的busybox文件系统内容,可以关注 Linux随笔录,回复关键字busybox 即可获得

下篇咱们用QEMU模拟RSICV-64开发环境


作者潘小帅, 是一名Linux底层爱好者,平时写写技术原创文章,徒步,旅游,看电影的爱好,喜欢我的文章可以点赞收藏+关注,感谢你的支持,微信公众号【Linux随笔录】

手把手搭建QEMU ARM64开发环境_linux_08

标签:busybox,install,kernel,手把手,etc,ARM64,qemu,QEMU,rootfs
From: https://blog.51cto.com/u_14454597/9606146

相关文章

  • 手把手教你搭建属于自己的网站(获取被动收入),无需服务器,使用github托管
    大家好,我是亚洲著名程序员青松,本次教大家如何搭建一个属于自己的网站。下面是我自己搭建的一个网站,是一个网址导航网站。托管在了github上面,目前已经运营了三个月,每天的访问量大约有100ip左右。下图是在51.la上面的统计,这个网站是我在2023年11月份发布的,刚发布的时候流量比较高......
  • 幻兽帕鲁专用服务器搭建教程分享(手把手教学)
    想要快速搭建幻兽帕鲁服务器,我们只需要参考以下教程即可轻易完成幻兽帕鲁服务器的搭建部署,与其他专用服务器游戏一样,可以让您和朋友在一个相对独立、稳定且私密的云端跨境中进行游戏,以获得更好、更流畅的游戏体验。幻兽帕鲁游戏和steam平台作为国外服务,使用大陆服务器会有......
  • 手把手教你如何创建并上传modelscope模型
    参考来源:https://modelscope.cn/docs/模型的创建与文件上传1.注册modelscope相关账号(略)2.创建对应的模型3.填写模型的相关资料4.创建审核通过了之后,下载对应的模型文件夹5.拷贝对应的上传脚本,可以根据上面的页面复制使用modelscope的SDK脚本6.需要获取用户特......
  • qemu重定向串口serial
    背景运行qemu的环境为host,qemu模拟的系统为guest。基于不同的需求,有时需要对串口进行重定向qemu-serial选项qemu提供了很多的重定向选项,null,socket,udp,msmouse,vc,file,pipe,console,serial,pty,stdio,braille,tty,parport,spicevmc,下面我们简单列几个分析一......
  • 手把手教你如何下载途途课堂上面已购买的视频课程
    前言:很多同学都想知道途途课堂的视频课程怎么下载,但是途途课堂上面已购买的视频课程是不提供直接下载方式的,所以下面就教大家如何用学无止下载器下载途途课堂上面已购买的视频课程。一、下载器首页输入T,并按回车,提示登录,再输入Y登录对应的途途账号二、此时会有弹窗让你登录,选择......
  • 手把手教你如何下载高途课堂上面已购买的视频课程
    前言:很多同学都想知道高途课堂的视频课程怎么下载,但是高途课堂上面已购买的视频课程是不提供直接下载方式的,所以下面就教大家如何用学无止下载器下载高途课堂上面已购买的视频课程。一、下载器首页输入G,并按回车,提示登录,再输入Y登录对应的高途账号二、此时会有弹窗让你登录,选择......
  • docker部署(使用docker-compose)手把手教程
    docker部署(使用docker-compose)手把手教程:https://blog.csdn.net/qq_38377190/article/details/125504426?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170650340916800186593495%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1706......
  • ubuntu_x86_64上运行arm64的程序
    摘自:百度文心一言 qemu-user-static是一个用于利用当前操作系统来运行其它架构的一个仿真器要使Ubuntu上运行ARM64程序,需要进行以下操作:安装QEMU模拟器:可以通过命令sudoapt-getinstallqemu-user-static来安装。这将为系统提供支持多种体系结构的能力。获取适用于ARM64的二进制......
  • Burp Suite Professional 2024.1.1 for macOS x64 & ARM64 (sysin) - 世界排名第一的
    BurpSuiteProfessional2024.1.1formacOSx64&ARM64(sysin)-世界排名第一的网络渗透测试工具包请访问原文链接:https://sysin.org/blog/burp-suite-pro-mac/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBurpSuiteProfessionalTheworld’s#1webpenet......
  • ubuntu_x86_64上运行arm64的程序
    摘自:百度文心一言ubuntu让arm64的程序在x86要使Ubuntu上运行ARM64程序,需要进行以下操作:安装QEMU模拟器:可以通过命令sudoapt-getinstallqemu-user-static来安装。这将为系统提供支持多种体系结构的能力。获取适用于ARM64的二进制文件或源代码:确保已经有了针......