M1 macbook上安装docker 编译内核 并使用qemu启动内核。

1、在M1上安装docker这个就不用提供步骤了,网上自行搜索。

2、在M1上pull一个ubuntu的容器。docker pull ubuntu:18.04

docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
ubuntu                   18.04     d1a528908992   4 weeks ago    56.7MB

3、通过拉取的ubuntu镜像启动一个容器,相当于运行了一个ubuntu虚拟机

docker run -d -t -i -p 5002:22 --hostname mycontainer --name mycontainer --privileged=true ubuntu:18.04 /bin/bash

进入容器:

4、下载内核kernel源码linux-5.13.18

wget http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/v5.x/linux-5.13.18.tar.gz

5、安装一些依赖包

apt-get install vim git tmux openssh-server tar -y apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev -y

配置内核

make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 O=build menuconfig -j16

6、编译内核

make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 O=build -j16

编译成功后在build/arch/arm64/boot/目录下会生成内核镜像文件

file build/arch/arm64/boot/Image

7、制作内核启动根文件系统,通过busybox制作

下载busy box源码,编译busy box工具

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

tar xvf busybox-1.35.0.tar.bz2

配置编译选项,要设置Build static binary (no shared libs)

make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig -j16

在图形化界面勾选以下配置 Settings [*] Build static binary (no shared libs)

编译busy box:

make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 install -j16

编译成功后会在_install/bin/目录下生成busybox。

file _install/bin/busybox

然后执行以下步骤制作根文件系统

cd busybox-1.35.0/_install

mkdir dev

mknod dev/console c 5 1

mknod dev/ram b 1 0

touch init

这里其实就是在_install目录下通过的 mknode 分别创建了一个面向块设备和一个面向字符设备的特殊文件。相当于在系统的根文件系统目录下有一些这些目录。

然后打开init文件写入这些信息

#!/bin/sh
echo "INIT SCRIPT"
mkdir /proc
mkdir /sys
mount -t proc none /proc
mount -t sysfs none /sys
mkdir /tmp
mount -t tmpfs none /tmp
echo -e "\nThis boot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
exec /bin/sh

然后通过下面命令生成rootfs

# 首先为 init 赋予可执行权限
$ sudo chmod +x init
# 进入 busybox 编译成果目录
cd ~/kvm/busybox-1.32.1/_install
# 使用 cpio 制作成 rootfs,为区分方法一,这里使用另一个名称并压缩
find . -print0 | cpio --null -ov --format=newc | gzip -9 > ./initramfs-busybox-arm64.cpio.gz
# 注意:该命令一定要在busybox的 _install 目录下执行
# 注意:每次修改_install,都要重新执行该命令

8、在容器中下载编译qemu

wget https://download.qemu.org/qemu-7.2.0-rc1.tar.xz
tar xvf qemu-7.2.0-rc1.tar.xz
cd qemu-7.2.0-rc1 
mkdir build 
cd build 
../configure --target-list=aarch64-softmmu make -j16 file aarch64-softmmu/qemu-system-aarch64

将initramfs-busybox-arm64.cpio.gz文件拷贝到/test/qemu-7.2.0-rc1/build/aarch64-softmmu/目录下。

将之前编译好的内核镜像也拷贝到/test/qemu-7.2.0-rc1/build/aarch64-softmmu/目录下。

9、通过qemu运行内核

./qemu-system-aarch64 -nographic -M virt -cpu cortex-a57 -kernel ./Image -initrd ./initramfs-busybox-arm64.cpio.gz --append "nokaslr root=/dev/ram init=/init"

 系统启动了,停留在了一个命令行界面,同时可以查看到系统内核是5.13.18版本,这样实现了在容器中使用qemu把内核5.13.18跑起来了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2305.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot(实用开发篇)

SpringBoot实用开发篇 第三方属性bean绑定 ConfigurationProperties 使用ConfigurationProperties为第三方bean绑定属性 配置文件 datasource:driverClassName: com.mysql.jdbc.Driver servers:ipAddress: 192.168.0.1port: 80timeout: -1ServerConfig类: Dat…

前端工程化 | vue3+ts+jsx+sass+eslint+prettier 配置化全流程

起因: 前端开发是一个工程化的流程。 包括持续集成、持续部署。 我认为集成 的第一方面就是开发,在前端项目开发中,需要保证代码格式规范的统一、代码质量、提交的规划。而这些要求需要通过各种插件来保证规范化和流程化开发。 如何配置这…

Vue中如何进行数据导入与Excel导入

Vue中如何进行数据导入与Excel导入 Vue是一款非常流行的JavaScript框架,它提供了一套用于构建用户界面的工具和库。在Vue中,我们可以使用多种方式来导入数据,包括从服务器获取数据、从本地存储获取数据、从文件中读取数据等等。其中&#xf…

Linux进程信号【信号处理】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、信号的处理时机1.1、处理情况1.2、"合适" 的时机 2、用户态与内…

【Redis】不卡壳的 Redis 学习之路:事务

本文是Redis系列第三篇,前两篇欢迎移步 【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确&#x…

MFC加载3ds模型初步

网上下一个资源,名为 OpenGL三维场景绘制.rar; 看一下它是用MFC和opengl,自己绘制三维场景; 运行一下,有一个exe可以运行; 有一个较新版本的不能运行;这应是缺少VC运行库; 下面单独…

K8S集群搭建

K8S集群搭建 1. 基础环境 IP节点名称域名规格10.1.2.111k8s-master-1master01.k8s.io4核8G,50G10.1.2.112k8s-master-2master02.k8s.io4核8G,50G10.1.2.113k8s-cluster-endpoint,没有具体节点,只vipmaster.k8s.io10.1.2.180k8s-…

基于深度学习的高精度足球检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度足球检测识别系统可用于日常生活中或野外来检测与定位足球目标,利用深度学习算法可实现图片、视频、摄像头等方式的足球目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

Unity | HDRP高清渲染管线学习笔记:材质系统Lit着色器

目录 一、Lit着色器 1. Surface Options 2. Surface Inputs(表面输入) 3. Transparency Inputs 二、HDRP渲染优先级 目录 一、Lit着色器 1. Surface Options 2. Surface Inputs(表面输入) 3. Transparency Inputs 4. Em…

【C/C++】拷贝构造函数的调用 使用方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【shell】expect命令详解:用expect实现自动化交互式操作

文章目录 一. 运用场景二. 语法说明三. 例子1. scp文件传输自动化2. ssh远程登录3. 切到root用户4. 创建ssh key5. ssh到一个节点创建用户 一. 运用场景 expect主要应用于自动化交互式操作的场景&#xff0c;借助Expect处理交互的命令&#xff0c;可以将交互过程如&#xff1a…