qemu

学编程不知如何入门?10 年经验的底层开发程序员,教你如何入门!

我只是一个虾纸丫 提交于 2020-07-26 09:20:35
“师傅领进门,修行在个人”。Github上一位拥有10年底层开发经验的老程序员gurugio,整理了一套适合嵌入式或底层开发(Low-Level Programming)的程序员入门指导。来帮助众多的初学者成为一名初级的底层开发程序员和Linux内核工程师。 他在底层开发拥有超过10年的从业经验,一直从事以下的工作: 80x86汇编编程 硬件设备与Atmel芯片和固件 Unix的C语言系统编程 Linux中的设备驱动程序 Linux内核:页面分配 Linux内核:块设备驱动和md模块 一、什么是底层开发? 底层开发是非常接近机器的编程,使用底层开发语言(如C或汇编)。这与使用高级语言(例如Python,Java)的程序员进行编程不同。 维基百科:底层开发 系统编程与底层开发的一个非常接近的概念。该页面包括系统编程中未包含的硬件设计和固件开发。 维基百科:系统编程 系统编程包括从硬件组件到Linux内核的内容。这里你能通过文档落得理论基础,但一页文档永远不会覆盖所有层的细节,因此本文档的目的是作为底层开发的起点。 二、理论 底层开发有两个背景理论: 计算机体系结构 操作系统 可以在网上找到很多好的课程。理论是理论,只需了解课堂上的内容大纲,打好理论基础。 三、编程语言 1.部件 8086汇编编程与emu8086包涵: CPU和计算机体系结构的基本概念 C编程语言的基本概念

没有国产主机,怎么开发:交叉编译和QEMU虚拟机

笑着哭i 提交于 2020-07-24 22:07:47
1. 背景 近期国产化的趋势越来越浓,包括国产操作系统、国产CPU等。时隔十多年,QQ for Linux也更新了。做为软件开发人员,“有幸”也需要适配国产化。至于国产化的意义等就不在此讨论。 本文提到的国产主机主要是指使用国产CPU和操作系统的计算机,比如:操作系统是银河麒麟,CPU是飞腾FT2000。如果需要做适配开发,起码需要一台对应的主机吧。据说在国产化早期,有钱都难买到机器,需要特殊渠道申请购买。不过,现在购买还是比较方便的。 通过客户提供的正规正统的厂家询价,着实吓一跳,一台居然要一万多!!而同等性能配置的windows-x86普通台式主机,才两三千块左右,相差有点大呀。本着能省就省的原则,上万能的某宝看能不能淘一个。真得感谢马爸爸和深圳华强北,5千多块,突然感觉肉没那么痛了。 其实完全可以理解,国产的批量肯定很小很小,价格必然是高的。对于不专门开发“国产软件”的公司来说,买一台使用率比较低的机器不太值得。后面将介绍在没有国产主机情况下,进行软件开发的两种替代方法:交叉编译和QEMU虚拟机。 2. 银河麒麟是什么 银河麒麟操作系统有服务器版本和桌面版本,本文使用的是桌面版本。具体细节看官方的介绍即可,就不做搬运工了。官方说的自主研发、安全可控都不是我们所关心的,我们只需要关心它的内核是什么,会不会如网上所说根本就是个Ubutun,改个皮肤而已?!。

Qemu-KVM: Translation of guest physical address to host virtual/host physical address

大城市里の小女人 提交于 2020-07-20 17:18:45
问题 I am working on a project where I need to translate qemu-guest physical addresses to host virtual/physical addresses. I am using VMI (virtual machine introspection) to introspect into the qemu process (the KVM VM) and to read guest physical addresses stored in virtio ring buffer descriptors. Therefore, I am looking for a simple way to translate the qemu physical addresses to host virtual addresses at the host side. (i.e., to extract as less info as possible from the qemu process). I read

Implement custom u-boot command

百般思念 提交于 2020-07-03 13:18:10
问题 I want to add custom command command to u-boot be it a simple hello world command. After searching I found this link Yocto u-boot Custom Commands where it says to look at timer command in cmd/misc.c as starting point. How do I bring this timer command to my u-boot image? I assume I have make changes to the makefiles but not sure which makefile I should edit. I am using qemu to test the u-boot image in Ubuntu 18.04 using the following method Cloned the u-boot source from github. Installed all

How to replace `qemu-system -redir` command argument?

倖福魔咒の 提交于 2020-06-09 18:06:32
问题 I have a script starting qemu with these options: qemu-system-x86_64 [...] -net nic,model=rtl8139 -net user,hostfwd=tcp::5555-:1522 -net dump,file=/tmp/vm0.pcap -redir tcp:9999::9 -redir tcp:17010::17010 -redir tcp:17013::17013 I want to update the script to work with modern qemu options. I've tried with the following arguments, as documented in the manual page qemu-system-x86_64 [...] -net nic,model=rtl8139 -net dump,file=/tmp/vm0.pcap -net user,id=tcp1522,hostfwd=tcp::5555-:1522 -netdev

How to benchmark in Qemu i386 system using rdtsc

倖福魔咒の 提交于 2020-05-26 09:47:25
问题 Currently I am trying to measure number of clock cycles taken to complete an operation by two different programming languages on same environment. (without using an OS) Currently I am using Qemu-i386 emulator and using rdtsc to measure the clock cycles. /* Return the number of CPU ticks since boot. */ static inline u64 rdtsc(void) { u32 hi, lo; // asm("cpuid"); asm("rdtsc" : "=a" (lo), "=d" (hi)); return ((u64) lo) | (((u64) hi) << 32); } Taking the difference between rdtsc before and after

How to benchmark in Qemu i386 system using rdtsc

自作多情 提交于 2020-05-26 09:46:59
问题 Currently I am trying to measure number of clock cycles taken to complete an operation by two different programming languages on same environment. (without using an OS) Currently I am using Qemu-i386 emulator and using rdtsc to measure the clock cycles. /* Return the number of CPU ticks since boot. */ static inline u64 rdtsc(void) { u32 hi, lo; // asm("cpuid"); asm("rdtsc" : "=a" (lo), "=d" (hi)); return ((u64) lo) | (((u64) hi) << 32); } Taking the difference between rdtsc before and after

Mount qcow2 image created by Android emulator

て烟熏妆下的殇ゞ 提交于 2020-05-13 14:11:25
问题 I'm trying to mount the userdata-qemu.img.qcow2 file created by the Android emulator. The following procedure does not work: sudo qemu-nbd -c /dev/nbd0 ~/.android/avd/Pixel_C_API_27.avd/userdata-qemu.img.qcow2 First command runs well, but running sudo qemu-nbd -c /dev/nbd0 ~/.android/avd/Pixel_C_API_27.avd/userdata-qemu.img.qcow2 results in this output: Fehler: /dev/nbd0: unbekannte Partitionstabelle Modell: Unbekannt (unknown) Festplatte /dev/nbd0: 3146MB Sektorgröße (logisch/physisch): 512B

Centos7host主机部署kvm虚拟化平台

做~自己de王妃 提交于 2020-05-07 18:15:28
Centos7host主机部署kvm虚拟化平台 1,部署前 关闭selinux setenforce 0 临时关闭 vim /etc/selinux/config 修改SELINUX=disabled 关闭防火墙: firewall-cmd --state 查看防火墙工作状态 systemctl stop firewalld.service 关闭当前防火墙,重启无效 systemctl disable firewalld.service 关闭防火墙开机自启动 查看机器是否开启支持虚拟化 grep -E '(vmx|svm)' /proc/cpuinfo 2.安装kvm相关工具 yum install -y qemu-kvm qemu-kvm-tools libvirt 3. 启动 libvirtd systemctl start libvirtd systemctl enable libvirtd 查看dnsmasq程序是否启动 ps aux | grep dns 4. 创建虚拟机硬盘 qemu-img create -f raw /opt/centos7_x86_64.raw 20G Formatting '/opt/centos7_x86_64.raw', fmt=raw size=21474836480 ​ 需要准备镜像文件/opt/CentOS-7-x86_64-DVD

Linux 操作系统原理 — 网络硬件卸载

你说的曾经没有我的故事 提交于 2020-05-05 15:52:13
目录 文章目录 目录 网络 Offload 交换 Offload 网络 Offload 网络 Offload,主要是指将原本在内核网络协议栈中进行的 IP 分片、TCP 分段、重组、checksum 校验等操作,转移到网卡硬件中进行,使得 CPU 的发包路径更短,消耗更低,从而提高处理性能。 一开始这些 Offload 功能都是在网卡上针对特定功能设计一个专门的电路并且带有很小的缓存,去做专门的事情。后来直接在网卡上部署一个可编程的通用的小型 CPU,一般称为 网络协处理器 ,就是现在的智能网卡。智能网卡的协处理器可以先对该数据包进行一些预处理,根据处理结果考虑是不是要把数据包发送给主机 CPU,智能网卡中的 Offload 功能一般是使用 eBPF 编程来实现的。 交换 Offload Linux 4.0 引入了 switchdev 框架,它代表对一类拥有 “交换” 能力芯片的多网口设备的抽象。其中每一个网口就是一个 Port,在 switchdev 框架中被注册成为一个 net_device。 switchdev 起源于 Open vSwitch 项目,由 Jiři Pirko 在 2014 年 9 月首次提出。在 2015 年 2 月的 Netdev 0.1 会议上,网络开发人员决定扩展并采用 switchdev 作为硬件交换机芯片的通用解决方案。switchdev