跟我一起来到故事开始的地方,深入 Linux 系统的启动流程,自己编译内核并制作根文件系统,并使用 QEMU 模拟启动。 前置知识# 昨天看到阮老师两篇文章 《计算机是如何启动的?》...和 《Linux 的启动流程》,对计算机的启动流程有了更加深入的理解,正好最近在做国产申威处理器的虚拟化支持性调研,称此机会深入了解一下 Linux 系统的启动流程,并使用 QEMU 模拟这一流程。...说明:本文介绍的方法同样可用于内核调试,但侧重于介绍 使用 QEMU 模拟 Linux 的启动流程 。...,并通过qemu+gdb调试 mknod用法以及主次设备号 Linux 的启动流程 By 阮一峰 计算机是如何启动的?...启动Linux内核 QEMU + Busybox 模拟 Linux 内核环境 Qemu 模拟环境 By CTF Wiki Linux 内核编译步骤及配置详解 注:本作品采用 知识共享署名-非商业性使用-
最近需要涉及arm平台汇编,为了方便学习,使用qemu进行模拟一下; 教程:https://azeria-labs.com/emulate-raspberry-pi-with-qemu/ 镜像下载:https...256M c W95 FAT32 (LBA) 2021-05-07-raspios-buster-armhf.img2 532480 7774207 7241728 3.5G 83 Linux...$ sudo umount /mnt/raspbian 运行:(最新的kernel 5 没运行成功使用的 4) qemu-system-arm -kernel kernel-qemu-4.19.50...ext4 rw" -hda 2021-05-07-raspios-buster-armhf.img -no-reboot -dtb versatile-pb.dtb 运行效果:(成功运行,我的目的是想启动图形界面的...,但是图形界面启动不了) ?
本篇介绍 本篇记录下本地搭建QEMU环境,运行linux 仿真环境,这样就可以运行自己编译或修改的内核了。 步骤介绍 安装qemu qemu就是linux 仿真环境,可以直接从官网下载源码进行编译。...由于我的环境是ubuntu 22.04,因此就下载最新的qemu就好了。...wget https://download.qemu.org/qemu-7.2.0-rc4.tar.xz tar xvf qemu-7.2.0-rc4.tar.xz mkdir -p build cd...sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 debugfs /d debugfs defaults 0 0 创建rcS脚本,让进程启动后自动挂载设备...-kernel out/arch/arm64/boot/Image 顺利的话就可以看到让人兴奋的画面了: image.png 一长串的开机启动log,接下来就会正常开机 image.png 这样接下来就可以开始进行修改并运行自己编译的内核了
启动qemu 使用如下命令启动无GUI的qemu,参数含义如下: -kernel # 指定编译好的内核镜像 -hda # 指定硬盘 -append "root=/dev/sda" 指示根文件系统 console.../busybox-1.32.0/rootfs.img -append "root=/dev/sda console=ttyS0" -nographic 启动后如下图: Ctrl+A 松开后按C退出qemu...内核函数调试 启动命令中添加-s参数与-S参数启动qemu。...1szp@r420-PowerEdge-R420:~$ qemu-system-x86_64 -kernel ~/linux-4.14.191/arch/x86_64/boot/bzImage -hda...1qemu-system-x86_64 -kernel ~/linux-4.14.191/arch/x86_64/boot/bzImage -hda ~/busybox-1.32.0/rootfs.img
Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试。这里的方法是用QEMU来调试Linux内核。...QEMU的安装 这个可以自己去QEMU的官网下载编译,如果自己手头上的发行版有对应QEMU的包的话那也可以直接安装。 ...启动QEMU 使用如下命令启动: $ qemu-system-arm -M versatilepb -m 16 -kernel vmlinuz-qemu-arm-2.6.20.../linux-2.6.20.tar.7z 如果自己不想编译的话可以使用一个已编译好的vmlinux文件: ------------------------------------...调试Linux内核代码 下载方法见 http://www.linuxidc.com/Linux/2013-10/91140.htm
环境 vmware创建ubuntu14.04 处理器设置多核、勾选虚拟化引擎、硬盘空间尽量大一点(20G+) Linux-3.10.0 编译源码 下载源码,配置编译选项。.../linux-3.10.0.tar.gz cd linux-3.10.0/ make menuconfig #提示缺失软件用apt install安装即可 保证以下项为选中: kernel hacking...,可以重新编译gdb修复bug. 2.qemu启动内核 启动命令比较长,可以设置一个启动脚本 cd /linux-3.10.0 vim boot.sh 内容如下: ### #!...b do_fork c 去qemu窗口,执行一些操作触发do_fork()函数 参考 QEMU+busybox 搭建Linux内核运行环境 在qemu环境中用gdb调试Linux内核 Linux内核调试...之 qemu+gdb 如何使用cgdb + qemu调试linux内核模块
内核资料直通车:最新Linux内核源码资料文档+视频资料 学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈 配置Busybox 启动内核还需要一个具有根文件系统的磁盘镜像文件...启动qemu 使用如下命令启动无GUI的qemu,参数含义如下: -kernel # 指定编译好的内核镜像 -hda # 指定硬盘 -append "root=/dev/sda" 指示根文件系统 console.../busybox-1.32.0/rootfs.img -append "root=/dev/sda console=ttyS0" -nographic 启动后如下图: Ctrl+A 松开后按C退出qemu...内核函数调试 启动命令中添加-s参数与-S参数启动qemu。...启动命令,使用-hdb增加一个磁盘。
Qemu 启动内核 在上述步骤准备好以后,我们需要在调试的 Ubuntu 20.04 的系统中安装 Qemu 工具,其中调测的 Ubuntu 系统使用 VirtualBox 安装。...GDB 调试 在使用 qemu-system-x86_64 命令启动内核以后,进入到我们从编译机器上拷贝过来的 Linux 内核源代码目录中,在另外一个终端我们来启动 gdb 命令: [linux-4.19.172...QEMU+busybox 搭建 Linux 内核运行环境[5] *** QEMU+gdb 调试 Linux 内核全过程[6] * linux 内核编译与调试方法[7] How to Build A Custom...Linux Kernel For Qemu (2015 Edition)[8] qemu 与 qemu-kvm 到底什么区别[9] 在 qemu 环境中用 gdb 调试 Linux 内核[10] *...For Qemu (2015 Edition): http://mgalgs.github.io/2015/05/16/how-to-build-a-custom-linux-kernel-for-qemu
其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qemu就是一种。 qemu是一款完全软件模拟(Binary translation)的虚拟化软件,在虚拟化的实现中性能相对较差。...本文实验环境: ubuntu 20.04 busybox-1.32.1 Linux kernel 4.9.3 QEMU GDB 10.1 编译内核源码 git clone git://git.kernel.org...编译busybox Linux系统启动阶段,boot loader加载完内核文件vmlinuz后,内核紧接着需要挂载磁盘根文件系统,但如果此时内核没有相应驱动,无法识别磁盘,就需要先加载驱动。...apt install qemu qemu-utils qemu-kvm virt-manager libvirt-daemon-system libvirt-clients bridge-utils...启动调试内核 ➜ linux-4.9.301 qemu-system-x86_64 -kernel .
/install_sdl.sh 1.2 运行QEMU 必须在Ubunut的桌面环境下启动终端,执行....-x86_64_arm-linux-gnueabihf/bin 我们并不是经常使用QEMU,所以就手工执行这些命令吧。.../linux-4.9.88$ make mrproper book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make 100ask_imx6ull_qemu_defconfig...zImage imx6ull-system-image/ 然后重新启动QEMU。...替换LCD驱动程序 QEMU所用的内核里已经带有LCD驱动程序了,要测试我们编写的驱动程序,需要做2件事: 4. 测试 使用新内核启动QEMU后,执行fb-test及可测试。
Persistent: yes Autostart: disable Managed save: no Security model: none Security DOI: 0 二、管理虚拟机 1、启动虚拟机...[root@room9pc01 ~]# virsh destroy node1 4、设置虚拟机开机自动运行 [root@room9pc01 ~]# virsh autostart node1 三、qemu-img...基本操作管理 1、创建一个新的镜像盘文件 qemu-img命令格式: qemu-img 命令 参数 块文件名称 大小 [root@room9pc01 ~]# qemu-img create -f qcow2...off cluster_size=65536 lazy_refcounts=off 2、使用后端模板文件创建一个新的镜像盘文件 备注:-b使用后端模板文件 [root@room9pc01 ~]# qemu-img...’ encryption=off cluster_size=65536 lazy_refcounts=off 3、使用后端模板文件创建一个16G的镜像盘文件 [root@room9pc01 ~]# qemu-img
检查后应该是 virtqemud 服务没起来导致的,编译安装默认生成的服务路径在 /usr/local/* 下,而我们指定了安装在默认位置 /usr ,参考 systemd 无法启动的解决方法即可解决该问题...EnvironmentFile=-/etc/sysconfig/virtqemud ExecStart=/usr/sbin/virtqemud $VIRTQEMUD_ARGS 之后重新加载服务,再启动...systemctl daemon-reload systemctl reload virtqemud systemctl start virtqemud 不出意外的话就能启动了,若有问题请留言。
qemu manual : https://www.mankier.com/1/qemu -smp -smp [[cpus=]n][,maxcpus=maxcpus][,sockets=sockets...The kernel can be either a Linux kernel or in multiboot format....Also optionally set the top visible process name in Linux....debug kernel/系统启动的问题时,就用这个参数就可用。...qemu-img可以离线新建,转换,修改images。
(文章大部分转载于:https://consen.github.io/2018/01/17/debug-linux-kernel-with-qemu-and-gdb/) 排查Linux内核Bug,研究内核机制...,这就陷入了一个两难境地,系统无法顺利启动。.../qemu/linux-4.4.203/scripts/gdb/vmlinux-gdb.py line to your configuration file "/home/qemu2/.gdbinit"...上面的意思是,为了能够使能vmlinux-gdb.py的执行,需要添加 add-auto-load-safe-path /home/qemu2/qemu/linux-4.4.203/scripts/gdb...参考: Tips for Linux Kernel Development How to Build A Custom Linux Kernel For Qemu Linux Kernel System
Linux调试内核代码是非常麻烦。它们一般加printk, 或者使用JTAG调试。 这里的方法是使用QEMU为了调试Linux核心。...QEMU的安装 这个能够自己去QEMU的官网下载编译,假设自己手头上的发行版有相应QEMU的包的话那也能够直接安装。 CentOS的话參考前面的 CentOS rpm 额外包的源 2....启动QEMU 使用例如以下命令启动: $ qemu-system-arm -M versatilepb -m 16 -kernel vmlinuz-qemu-arm-2.6.20 -append...能够直接编译http://free-electrons.com/pub/qemu/demos/arm/directfb/1.0/src/linux-2.6.20.tar.7z 假设自己不想编译的话能够使用一个已编译好的...vmlinux文件:http://pan.baidu.com/s/1sjuJYc1 然后运行例如以下命令: $ arm-none-linux-gnueabi-gdb vmlinux 在gdb在控制台输入
3.编译Linux Kernel 4.编译busybox 5.制作根文件系统 6.编译安装qemu 7.启动基本Linux程序 8.运行发行版本OS(fedora&ubuntu) 8.1 下载安装fedora...主要两个功能,代理和引导启动,可以作为引导启动RISC-V的Linux的环境。...export PATH=/home/bigmagic/riscv/qemu/bin/:$PATH 7.启动基本Linux程序 事先准备好编译完成的root.bin程序以及Linux的Image qemu-system-riscv64..." -drive file=rootfs/root.bin,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 此时可以看到Linux正常的启动...Linux启动后,无法正常输入命令,需要输入 /bin/busybox --install -s ? 可以看到RISCV64 的 Linux正常的运行起来了。
下面通过一个虚拟机启动过程看看 Qemu 是如何与 KVM 交互的。...创建虚拟机 使用qemu-img创建虚拟机镜像 虚拟机镜像用来模拟虚拟机的硬盘,在启动虚拟机之前需要创建镜像文件。...镜像文件创建完成后,可使用 qemu-system-x86 来启动x86 架构的虚拟机....启动 VM 安装操作系统镜像 qemu-system-x86_64 -m 2048 -enable-kvm test-vm-1.qcow2 -cdrom ....之后再启动虚拟机只需要执行: qemu-system-x86_64 -m 2048 -enable-kvm test-vm-1.qcow2 qemu-img 支持非常多种的文件格式,可以通过 qemu-img
使用Ceph来存储QEMU镜像 QEMU会假定ceph配置文件存放在默认位置/etc/ceph/$cluster.conf,也会使用client.admin作为默认的ceph用户。...qemu-img命令在ceph集群中创建一个虚拟机镜像。...qemu-img create -f raw rbd:{pool-name}/{image-name} {size} 例如: [root@ltczhp20 ~]# qemu-img create -f...在运行虚拟机之前,我们可以把一个已经存在的虚拟机镜像转化为ceph RBD存储,然后直接从RBD启动虚拟机。...DATE VM CLOCK sp0 sp0 20G 1970-01-01 01:00:00 00:00:00.000 启动虚拟机
用户可以通过不同Linux发行版所带有的软件包管理器来安装QEMU。...虚拟机内存会被映射到QEMU的进程地址空间,在启动时分配。在虚拟机看来,QEMU所分配的主机上的虚拟地址空间为虚拟机的物理地址空间。...#三、创建及使用虚拟机# ##命令行创建及启动虚拟机## 成功安装QEMU之后便可创建自己的虚拟机。具体步骤如下: 1, 使用qemu-img创建虚拟机镜像。...镜像文件创建完成后,可使用qemu-system-x86来启动x86架构的虚拟机: qemu-system-x86_64 fedora.img 此时会弹出一个窗口来作为虚拟机的显示器,显示内容如下: ?...可以从不同Linux发行版的官方网站上获取安装镜像,以fedora20为例: [kelvin@kelvin tmp]$ wget http://ftp6.sjtu.edu.cn/fedora/linux
本文首发于: https://blog.frytea.com/archives/539/当你安装了一台 Linux,想启动一个 KVM 虚拟机的时候,你会发现需要安装不同的软件,启动虚拟机的时候,有多种方法...:virsh startkvm 命令qemu 命令qemu-kvm 命令qemu-system-x86_64 命令QEMU首先看 qemu,其中关键字 emu,全称 emulator,模拟器,所以单纯使用...KVM基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为 KVM)是一种用于 Linux 内核中的虚拟化基础设施,可将 Linux 内核转化为一个虚拟机监视器。...qemu-kvmQemu 将 KVM 整合进来,通过 ioctl 调用 /dev/kvm 接口,将有关 CPU 指令的部分交由内核模块来做,就是 qemu-kvm (qemu-system-XXX)qemu...virsh然而直接用 qemu 或者 qemu-kvm 或者 qemu-system-xxx 的少,大多数还是通过 virsh 启动, virsh 属于 libvirt 工具, libvirt 是目前使用最为广泛的对
领取专属 10元无门槛券
手把手带您无忧上云