没有国产主机,怎么开发:交叉编译和QEMU虚拟机
1. 背景
近期国产化的趋势越来越浓,包括国产操作系统、国产CPU等。时隔十多年,QQ for Linux也更新了。做为软件开发人员,“有幸”也需要适配国产化。至于国产化的意义等就不在此讨论。
本文提到的国产主机主要是指使用国产CPU和操作系统的计算机,比如:操作系统是银河麒麟,CPU是飞腾FT2000。如果需要做适配开发,起码需要一台对应的主机吧。据说在国产化早期,有钱都难买到机器,需要特殊渠道申请购买。不过,现在购买还是比较方便的。
通过客户提供的正规正统的厂家询价,着实吓一跳,一台居然要一万多!!而同等性能配置的windows-x86普通台式主机,才两三千块左右,相差有点大呀。本着能省就省的原则,上万能的某宝看能不能淘一个。真得感谢马爸爸和深圳华强北,5千多块,突然感觉肉没那么痛了。
其实完全可以理解,国产的批量肯定很小很小,价格必然是高的。对于不专门开发“国产软件”的公司来说,买一台使用率比较低的机器不太值得。后面将介绍在没有国产主机情况下,进行软件开发的两种替代方法:交叉编译和QEMU虚拟机。
2. 银河麒麟是什么
银河麒麟操作系统有服务器版本和桌面版本,本文使用的是桌面版本。具体细节看官方的介绍即可,就不做搬运工了。官方说的自主研发、安全可控都不是我们所关心的,我们只需要关心它的内核是什么,会不会如网上所说根本就是个Ubutun,改个皮肤而已?!。
先用VMware安装个虚拟机试试吧,网上找了一个只有X86架构的镜像包Kylin-4.0.2-desktop-sp2_Community-20171127-x86_64.iso,安装过程略过,使用命令“uname -a”查一下。
Linux wrgz-Lenovo 4.11.0-14-generic #20~16.04.1kord0k1-Ubuntu SMP Wed Oct 18 00:56:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
看到Ubuntu就放心了,就当它是个Ubuntu Linux就行了。
3. 飞腾FT2000又是什么
通俗点讲它就是个CPU,再百度一下,还有官网的呢,摘抄一段。FT-2000系列芯片是基于飞腾片上并行系统(PSoC)体系结构设计的通用微处理器,兼容ARMv8指令集,兼容支持ARM64和ARM32两种执行模式。哦嚯,划个重点,简单点看它就是一个ARMv8的64位CPU。
划个不考试的重点:对于应用软件开发者,简单理解为是在ARMv8架构上的Ubuntu Linux上进行开发软件;对于普通办公者,则理解为是仿Windows的Linux系统。
4. 交叉编译
本文提到的软件开发,是使用C/C++开发无界面的应用软件,实际上开发和测试都有是可以在Ubuntu上进行。但发布软件则需要真机编译或者交叉编译才能运行。
很幸运,在上飞腾官网时,发现了飞腾FT2000的技术文档FT-2000+64Sv1.1.pdf,里面有介绍到交叉编译环境。
- 安装Ubuntu16.04(可安装在虚拟机上或 X86电脑裸机上)
- 安装成功后,虚拟机 apt 源修改 修改/etc/apt/source.list 内容为如下:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe > multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
- 运行 apt-get update,再运行apt-get install gcc-aarch64-linux-gnu安装
- 使用命令aarch64-linux-gnu-gcc –v可以看到gcc版本号为gcc version 5.4.0 20160609
有了交叉编译器,编译是很轻松的事。经后续测试,交叉编译出来的程序,可以在国产真机上运行。
5. QEMU虚拟机是什么
我们经常使用的虚拟机软件是VMware,摆着这么好的不用,为什么选择QEMU呢。这得从他们的区别说起。
VMware重点于在一个硬件平台下运行多个操作系统,虚拟硬件平台与宿主硬件架构一致,也就是说虚拟机程序中的指令一般就是宿主CPU指令集,可以直接执行,因此一般速度上也就比较快。
QEMU的特点是可以虚拟不同的硬件平台架构,比如在X86机器上虚拟出ARM架构的机器。许多基于ARM指令集的Android手机模拟器是基于Qemu的,很适合无真机情况下进行Android开发。当然执行ARM指令,需要转换成X86指令才能在宿主机器上运行,这样速度一般会慢点。
由于本文提到的国产主机就是ARM架构的,VMware并不适用,而QEMU则符合要求。还有一个原因是QEMU支持Windows,只需要一个安装包,安装过程简单,太香了。
6. QEMU安装银河麒麟操作系统
无独有偶,鲲鹏处理器也是ARMv8指令集,在华为官网看到详细的安装过程,安装细节可参考https://www.huaweicloud.com/kunpeng/software/qemu.html。
下面只针对一些重点关注点做些说明。
- 需要下载一个Arm64架构的麒麟桌面操作系统镜像包,名字类似Kylin-4.0.2-desktop-sp3-xxxxxxx-arm64.iso。之所以重点提这点,是因为这种镜像包在网上很难找。有想到用Arm64架构的Ubuntu镜像包代替,才发现原来官方并没有提供ARM桌面版的镜像包(有ARM服务器版)。
- 原来华为提供的安装参数有些问题,包括网络、鼠标、键盘参数。这些参数配置不对,会直接影响使用。
QEMU有一个不太人性化的特点,就是没有提供类似VMware的界面操作,只能通过命令操作,参数还特别多,网上的资料不多,官方文档都有是英文的。下面给出三个重要的QEMU命令:创建、安装、启动。
创建
这个步骤就是创建一个预分配一个大文件,做为虚拟机的磁盘,我比较任性地分配了40G。
c:\qemu\qemu-img.exe create D:\qemu\vm\kylin\hdd01.img 40G
安装
c:\qemu\qemu-system-aarch64.exe -m 4096 -cpu cortex-a72 -smp 2,cores=2,threads=1,sockets=1 -M virt -bios D:\qemu\bios\QEMU_EFI.fd -net nic,model=pcnet -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=D:\software\kylin\Kylin-4.0.2-desktop-sp3-19122616.Z1-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=D:\qemu\vm\kylin\hdd01.img,id=hd0 -device virtio-blk-device,drive=hd0
启动
c:\qemu\qemu-system-aarch64.exe -m 4096 -cpu cortex-a72 -smp 2,cores=2,threads=1,sockets=1 -M virt -bios D:\qemu\bios\QEMU_EFI.fd -net nic -net tap,ifname=tap0 -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -device virtio-scsi-device -drive if=none,file=D:\qemu\vm\kylin\hdd01.img,id=hd0 -device virtio-blk-device,drive=hd0
安装和启动的命令参数差不多,统一说明它们的含义:
参数 | 说明 |
---|---|
qemu-system-aarch64.exe | 二进制文件,提供模拟aarch64架构的虚拟机进程 |
-m 2048 | 分配2048MB内存 |
-M virt | 模拟成什么服务器,我们一般选择virt就可以了,他会自动选择最高版本的virt |
-cpu cortex-a72 | 模拟成什么CPU,其中cortex-a53\a57\a72都是ARMv8指令集的 |
-smp 2,cores=2,threads=1,sockets=1 | 2个vCPU,这2个vCPU由qemu模拟出的一个插槽(socket)中的2个核心,每个核心支持一个超线程构成 |
-bios xxx | 指定bios bin所在的路径 |
-device xxx | 添加一个设备,参数可重复 |
-drive | 添加一个驱动器,参数可重复 |
-net | 添加网络设备 |
QEMU虚拟机怎么连网
在Windows上使用qemu虚拟机,使虚拟机能连网,配置方法如下:
- 在Windows主机上安装TAP网卡驱动:可下载openvpn客户端软件,只安装其中的TAP驱动;在网络连接中,会看到一个新的虚拟网卡,属性类似于TAP-Windows Adapter V9,将其名称修改为tap0。
- 将虚拟网卡和Windows上真实网卡桥接:选中这两块网卡,右键,桥接。此时,Windows主机将不能连接互联网,需要在网桥上配置IP地址和域名等信息,才能使Windows主机连接互联网。
- QEMU参数配置:在虚拟机启动命令行添加以下参数--net nic -net tap,ifname=tap0;tap0为的虚拟网卡名。
7. 总结
国产操作系统的使用体验已经好了很多,轻度办公室还是可行的,但想替换Windows,太难了。
QEMU可以虚拟不同的硬件平台架构,是个不错的虚拟机软件,而且开源,但在使用体验方面还是差了一些。
欢迎关注我的公众号【林哥哥的编程札记】,也欢迎赞赏,谢谢!
没有国产主机,怎么开发:交叉编译和QEMU虚拟机的更多相关文章
- python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)
类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...
- python作业类Fabric主机管理程序开发(第九周)
作业需求: 1. 运行程序列出主机组或者主机列表 2. 选择指定主机或主机组 3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载) 4. 充分使用多线程或多进程 5. 不同主机的用户名密码 ...
- python 学习分享-实战篇类 Fabric 主机管理程序开发
# 类 Fabric 主机管理程序开发: # 1. 运行程序列出主机组或者主机列表 # 2. 选择指定主机或主机组 # 3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载) # 4. 充分 ...
- 类 Fabric 主机管理程序开发
类 Fabric 主机管理程序开发:1. 运行程序列出主机组或者主机列表2. 选择指定主机或主机组3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载4. 充分使用多线程或多进程5. 不同主 ...
- samrt210开发板ping-系列问题(开发板ping通主机,主机ping通虚拟机,唯独~开发板ping不通虚拟机)
硬件:PC机.虚拟机(Linux).开发板(smart210) 常用模型: 注:1).有线网卡与无线网不可同连一个路由器,不可在同网段: 2).vmware选择桥接模式,虚拟网络适配器选定具体的网卡名 ...
- 开发板ping通虚拟机与主机
刚因为虚拟机与主机没法互相ping通的事情,奋战到将近凌晨一点.现在把这个过程总结一下,以方便后加入该行业的广大IT精英. VMWare提供了三种工作模式:bridged(桥接模式).NAT(网络地址 ...
- 芯灵思SinA33开发板怎样安装虚拟机
芯灵思SinA33开发板怎样安装虚拟机 今天入手一块芯灵思的开发板,型号为SIN-A33,用的是全志的A33芯片,与其它开发板不同的是, 芯灵思开发板手册上用来搭建开发环境的linux系统是cento ...
- 利用QMP和QEMU虚拟机交互的几种方式
QMP是一种基于JSON格式的传输协议,我们能利用它与一个QEMU虚拟机实例进行交互,例如查询,更改虚拟机的状态,获取设备信息等等.下面是几种创建QMP的方法以及对其它的一些基本命令的使用: 1.基于 ...
- 虚拟机centOS中安装Redis,主机Redis Destop Manager不能访问虚拟机Redis server的解决方案
今天在学些redis的时候碰到个问题,发现主机Redis Destop Manager不能访问虚拟机Redis server的解决方案,找了一些网上的资料,原因可能有两个,整理记录下来: 1. Red ...
随机推荐
- Hyperledger Fabric——balance transfer(四)安装和实例化chaincode
详细解析blance transfer示例的安装(install)和实例化(Instantiate)链码(chaincode)的过程.安装chaincode会根据本地的链码文件生成chaincode镜 ...
- poj1386有向图判断是否存在欧拉回路或者欧拉路
有向图的图联通是指基图联通,也就是把有向图的边改成无向图然后看是否连通.判断联通可用dfs或者并查集. 题意就是给你n个由小写字母构成的字符串,问你能不能将这n个字符串连接起来,B能接在A后面的条 ...
- HDU1160
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题目大意:给出多个数据组(最多1000个),terminated by end of file, ...
- Istio Sidecar注入原理
概念 简单来说,Sidecar 注入会将额外容器的配置添加到 Pod 模板中.这里特指将Envoy容器注应用所在Pod中. Istio 服务网格目前所需的容器有: istio-init 用于设置 ip ...
- python之robotframework+ride测试框架
一.robotframework简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式 ...
- eatwhatApp开发实战(十四)
之前我们就输入框EditText做了优化,而这次,我们为app添加拨打电话的功能. 首先是布局,将activity_shop_info.xml中对应的电话那一栏进行重新设计: <Relative ...
- eatwhatApp开发实战(十三)
这次内容,我们就项目中添加商店名称的EditText进行修改,让添加按钮随着edittext的内容而改变. 上代码,首先是xml文件上对两个控件的修改: <RelativeLayout andr ...
- [SD心灵鸡汤]006.每月一则 - 2015.10
1. 贫不足羞,可羞是贫而无志. 2. 艺术的大道上荆棘丛生,这也是好事,常人望而却步,只有意志坚强的人例外. 3. 古今中外,凡成就事业,对人类有作为的无一不是脚踏实地.艰苦攀登的结果. 4. 理想 ...
- doxygen上手
doxygen {#mainpage} doxygen是干什么的 相信大家在看MCU原厂的帮助文档的时候,都能看到doxygen的logo在右下角,没错,doxygen就是用来生成帮助文档的 doxy ...
- K-means聚类分析
一.原理 先确定簇的个数,K 假设每个簇都有一个中心点 centroid 将每个样本点划分到距离它最近的中心点所属的簇中 选择K个点做为初始的中心点 while() { 将所有点分配个K个中心点形成K ...