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

2023-11-20

一、编译内核并通过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跑起来了。

二、单步调试内核kernel

1、安装cgbd 这样可以可视化调试

# apt install cgdb

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" -s -S

  • 在调试模式下启动qemu,其中“-s”选项表示:使用tcp 1234端口;“-S”选项表示只有在GDB连上tcp 1234端口后,CPU才会继续执行。

此时启动qemu的窗口会hang住,此时在启动一个CMD窗口。运行内核镜像文件

root@ubuntu:/test/linux-5.13.18/build# cgdb vmlinu

  • 在GDB命令中输入“target remote localhost:1234”

 这样就可以单步调试内核了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

M1 macbook上安装docker 编译内核 并使用qemu启动内核。 的相关文章

随机推荐

  • TOOLS_Pandas根据日期列进行分组统计及绘图的使用示例

    Pandas根据日期列进行分组统计及绘图的使用示例 导入所需要的库 coding utf 8 from logging import warning import os sys import datetime import numpy as
  • linux端口被占用,netstat查看无进程号,端口状态一直停留在FIN_WAIT1以及CLOSE_WAIT状态

    环境信息 CentOS 6 5 现象 同事启动程序发现端口被占用 netstat查看之后发现如下现象 发现端口处于FIN WAIT1状态以及CLOSE WAIT状态 无法释放 问题分析 FIN WAIT1以及CLOSE WAIT状态的原理以
  • 如何通过电脑向ipad传电影视频(不用越狱)

    前言 为了能在ipad上看电脑上已下载的电影 我可是试了各种方法 心好累 还好终于解决了 不得不说 网上没一个靠谱的答案 方法一 如果电影本身的格式是 mp4 mov m4a格式 通过官方的itunes软件 直接导入媒体库 然后在ipad上
  • 聚宽源码17

    原文策略源码如下 导入函数库 from jqdata import import talib from math import isnan def initialize context 设置参数 set parameter context
  • React实现关键字高亮

    先看效果 实现很简单通过以下这个函数 highLight text keyword gt return text split keyword flatMap str gt span keyword span str slice 1 展示某段
  • SQLite3 获取最小可用ID,ID无需包含1

    SQLite3 获取最小可用ID ID无需包含1 一 语法 二 解析 1 判断最小ID是否为1 2 判断最小ID递增后是否存在 3 范围限定 三 总结 一 语法 获取1 到 500 范围间的最小可用ID select CASE WHEN s
  • Visual Studio 2017无法登录问题解决

    前两天登录VS2017的时候遇到无法登录问题 截图如下 期间试了各种方法 更新重启 添加一系列站点至信任域等等 还是没有效果 同时突然想起来自己的IE浏览器一直无法正常上网 不确定和VS无法登录是否有一定的联系 抱着试试看的心态上网搜索了一
  • IGWO-SVM:改良的灰狼优化算法改进支持向量机。 采用三种改进思路:两种Logistic和Tent混沌映射和采用DIH策略

    IGWO SVM 改良的灰狼优化算法改进支持向量机 采用三种改进思路 两种Logistic和Tent混沌映射和采用DIH策略 采用基于DIH维度学习的狩猎搜索策略为每只狼构建邻域 增强局部和全局搜索能力 收敛速度比GWO更快 适用于pape
  • 工控安全PLC固件逆向三

    之前我们详细分析了bootram和Vxworks的基本启动流程 这篇文章中我们把视线转到plc的网络部分 同时来复现我们第一个 第二个工控安全漏洞 一 VxWorks的网络设备驱动 一般我们说有三种设备 块设备 字符设备 网络设备 但是考虑
  • 【封装】实体类(entity)

    实体类entity 一 ORM 1 1 ORM 实体类 entity 零散数据的载体 1 1 1 ORM应用 一 ORM ORM Object Relational Mapping 从数据库查询到的结果集 ResultSet 在进行遍历时
  • Error while parsing UI hierarchy XML file: Invalid ui automator hierarchy file. Error while parsing

    官方的工具就这吊样各种报错 不如使用二次开发的工具 使用 https github com alibaba web editor 替代
  • el-select实现懒加载

    先看一个线上的演示示例 https code juejin cn pen 7273352811440504889 背景 我们在实际开发中经常遇到这样的需求 el select实现懒加载 用通俗的话说 为了增加响应速度 就是初始下拉只展示50
  • 网络流量在线分析系统的设计与实现

    编译环境 visual studio2019 安装并配置winpcap和pthreads库函数 1 配置环境 1 1 安装vscode 参考微信公众号 软件安装管家 1 2 安装MinGW w64 下载地址 添加链接描述 安装参考博客 Mi
  • 实验二 程序流程控制

    1 编写程序计算 1 3 5 7 99 之和 summ 0 for i in range 1 100 summ summ i print 和为 summ 2 编写程序 计算 2 4 6 8 100 之和 summ 0 for i in ra
  • 计算机网络试题

    一 选择题 1 OSI模型与TCP IP模型都具有的层次是 A 会话层 网络层和物理层 B 表示层 会话层和数据链路层 C 网络层 传输层和应用层 D 表示层 数据链路层和物理层 2 对于计算机网络体系结构 下列关于第N层和第N 1层的关系
  • 蓝桥杯:字符串

    题目链接 include
  • notepad++字符串替换

    删除空白行 在编辑选项里面包括很多功能 编辑 gt 行操作 gt 移除空行 包括空白字符 行首添加字符串 按CTRL F 选择替换页签 选择正则表达式 查找目标 设置为 替换为 设置自己想要替换的字符串 特殊字符需要添加 进行转义 行尾添加
  • 【MySQL】34道SQL综合练习详解(员工表、部门表、工资等级表)

    文章目录 一 34道SQL综合练习 二 测试使用的数据表 三 创建测试表的SQL语句 一 34道SQL综合练习 1 查询取得每个部门最高工资的人员信息 select e ename t from emp e join select dept
  • 如何使用PCL将XYZRGB点云转换为彩色mesh模型

    如何使用PCL将XYZRGB点云转换为彩色mesh模型 最近完成了一个使用RGBD传感器 构建物体模型的小demo 其中有点难的最后一步是如何将获得的物体点云变成彩色mesh模型 效果图如下 从点云变成彩色mesh 其实整体的步骤可以总结如
  • M1 macbook上安装docker 编译内核 并使用qemu启动内核。

    一 编译内核并通过qemu启动内核 1 在M1上安装docker这个就不用提供步骤了 网上自行搜索 2 在M1上pull一个ubuntu的容器 docker pull ubuntu 18 04 docker images REPOSITOR