《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑...

43
page 1 《龙芯应用开发标准教程》 重点导读

Transcript of 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑...

Page 1: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 1

《龙芯应用开发标准教程》

重点导读

Page 2: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

2

声 明

本文内容仅供一般技术参考,不作为龙芯中科技术有限公司的市场推广材

料。对于文中所出现的厂商、产品名称,仅陈述所获取的信息,对信息的

时效性和准确性不负有责任,一切内容以原厂商提供的材料和信息为准。

对于出现顺序不带有推荐优先级的倾向性。

本文中的信息若有更改,恕不另行通知。虽然已尽力确保本文的完整性和

准确性,但龙芯中科技术有限公司对本文的内容不作任何保证。龙芯中科

技术有限公司对本文中包含的错误或遗漏,或者因使用本文引发的任何损

失概不负责。

Page 3: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 3

内容特色

首次全面介绍龙芯电脑、操作系统和软件环境的书籍

• 推动开发者掌握从X86向龙芯电脑进行应用软件迁移、适配、优化技术

全面汇集了Linux开源领域的主流开发语言和工具

• Web,数据库,云计算

技术理论和实践相结合

• 对每一种开发语言提供至少一个实际案例

素材大部分来自于龙芯团队原汁原味的开发资料

• 大部分案例都基于实际使用的产品

不仅重视功能开发,还提供了性能优化的思路

• 每一种开发语言都有一个“性能优化”的案例

Page 4: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 4

章节体系

❶ 龙芯电脑简介龙芯电脑概述

龙芯应用开发

❿ 云平台(Docker)

❷ 龙芯操作系统

❸ 龙芯应用开发环境概述

❹ Java编程

❺ 数据库

❻ 浏览器

❼ 本地图形程序(Qt)

❽ 新型语言(PHP/Python/Ruby)

❾ 3D应用

Page 5: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

前提知识

国内操作系统均来源于Linux的衍生版,其软件开发环境

符合一般的Linux开发标准。本书不再专门阐述Linux的通

用软件开发方法,阅读本书的读者应提前具备下列技术知

识:

Linux的命令行工具;Linux操作系统使用和配置管理;Shell、

Python等脚本编程语言;文件系统目录结构组织;C/C++语言,

GCC编译器和链接器;POSIX标准编程库,包括文件读写、进

程管理、内存管理、进程间通讯、多线程、网络通讯等;Linux

设备驱动程序开发;Qt等图形界面编程库。

Page 6: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 6

第一章 龙芯电脑

龙芯和X86是“不兼容”的

• “指令集”是指一种CPU上运行的机器指令的二进制编码格式

• 龙芯基于MIPS

龙芯电脑不能运行Windows

• 龙芯操作系统来源于Linux的衍生版

很多开源软件可以变更Windows上的应用软件

QQ

X86电脑 龙芯电脑

Windows

GIMP图像处理工具

QQ网页版

Loongnix

Page 7: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

龙芯CPU和主板

CPU是“电脑之心”

• 从地位上来看,CPU负责控制着电脑中的其它部件

• 从复杂度上来看,CPU是整个主板上速度最快、计算量最大的芯片

Page 8: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 8

第二章 龙芯操作系统

龙芯社区版操作系统——Loongnix

• 开放源代码,免费下载

• 基于Fedora21

• 可供开发验证

• 可供定制形成商业操作系统

• 与中标麒麟二进制兼容

• 支持U盘、光盘安装

Page 9: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 9

桌面环境

Page 10: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 10

常用软件

办 公 编 程 附 件

互联网 图 形

系统工具

影 音

Page 11: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 11

第三章 软件开发环境

龙芯支持完整的软件开发环境

• 编程语言

• 全部Linux开源编程语言

• 函数库

• 平台引擎

• Web服务器

• 数据库服务器

• 云平台

• 分布式文件系统

• ……

• 浏览器

• 性能分析工具

• 集成开发环境(IDE)

Page 12: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 12

编程语言一览

❿ 云平台

❹ Java编程 ❺ 数据库 ❻ 浏览器

❼ 本地图形程序 ❽ 新型语言 ❾ 3D应用

Page 13: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 13

应用迁移“两步走”策略

❶ 操作系统:从Windows到Linux

❷ CPU:从X86到龙芯

Page 14: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 14

第四章 Java编程

龙芯支持OpenJDK 8

• 集成开发环境:Eclipse、

Netbeans

• Java软件可以直接迁移到龙芯电脑

Specjvm98

Specjvm2008

Eclipse

Netbeans IDE

Tomcat

Jetty中间件

JBoss中间件

Structs框架

Spring框架

Hibernate框架

MySQL JDBC

JeeCMS

Jira 4.1.1

Xwiki

Page 15: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 15

运行Tomcat

下载并解压缩apache-tomcat-7.0.29.zip

$ export JAVA_HOME=/opt/j2sdk-image

$ export JAVA_OPTS=' -Xmx512M -Xms512M '

$ ./catalina.sh run

Page 16: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 16

JNI:Java本地接口

• 作用

• Java语言调用C/C++语言编写的函数库

• 优点:

• 提高热点函数的性能

• 实现Java语言标准库不支持的功能

• 缺点:

• 降低可移植性

Page 17: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 17

Java程序的可迁移程度

技术特征 从X86向龙芯的可迁移程度

1. 纯Java软件 无需重新编译,直接运行

2. 使用JNI 需要重新编译C/C++代码

为了方便在不同平台上移植软件,

强烈建议应用程序不要使用JNI

Page 18: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

应用服务器集群

典型部署模式——负载均衡

• 对外部Web访问请求进行分发

• 平均分配到多个应用服务器分别

响应处理

• 提高Web并发性能

page 18

Page 19: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 19

第五章 数据库

龙芯支持各种数据库

• Mysql

• 广泛使用的开源数据库,功能可以满足

很多中小型企业应用

• MongoDB

• 非关系数据库,面向互联网应用

• 国内数据库

• 神通、达梦、金仓、南大通用等

兼容SQL标准,但是迁移时会遇到各种语法差

• 查询函数,存储过程,视图,触发器

• 建议:只使用最保守的公共SQL语法

Page 20: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 20

Java语言访问Mysql

JDBC

• Java DataBase Connectivity

• 一组标准函数库,适用于所有数据库

• 龙芯上有完善支持

JSP/servlet应用

HTML页面

MySQL

JDBC库

Oracle

SQL Server

浏览器 应用服务器 数据库

Page 21: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

数据库服务器:两种集群

双机热备

• 一主一备:主服务器出现故障

时,另一台服务器接管服务

• 提高可靠性

page 21

读写分离

• 主服务器提供“写”服务

• 其它服务器提供“读”服务

• 提高并发读性能

Page 22: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 22

第六章 浏览器

龙芯电脑支持两款浏览器

• 兼容W3C协议

• HTML,CSS,JavaScript

• 支持各种流行前端页面编程框架

• Ajax,jQuery,AngularJS,Bootstrap

• 全面支持新型Web标准

• HTML5

• WebGL

• 支持Flash插件

Bootstrap

Page 23: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 23

浏览器应用迁移的主要问题

龙芯电脑支持两款浏览器

• 兼容性问题多数由HTML/CSS引发

• 即使是X86上的Firefox和IE也不兼容

• 浏览器插件移植难度大

• 插件不属于W3C标准

• 插件和操作系统紧密关联,

插件类型 龙芯支持情况

ActiveX 只用于Windows

Java Applet 官方不再支持

Adobe Flash 官方不再支持

Chrome Native Client 官方不再支持

PPAPI、NPAPI 支持

建议应用程序尽量不使用插件,全面转向HTML5

Page 24: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 24

浏览器应用迁移的主要问题

龙芯电脑支持两款浏览器

• 兼容性问题多数由HTML/CSS引发

• 即使是X86上的Firefox和IE也不兼容

• 浏览器插件移植难度大

• 插件不属于W3C标准

• 插件和操作系统紧密关联,

插件类型 龙芯支持情况

ActiveX 只用于Windows

Java Applet 官方不再支持

Adobe Flash 官方不再支持

Chrome Native Client 官方不再支持

PPAPI、NPAPI 支持

建议应用程序尽量不使用插件,全面转向HTML5

Page 25: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 25

网页性能分析工具

精确统计网页的下载、执行、渲染时间第一时间找到性能瓶颈

Page 26: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 26

第七章 Qt开发

龙芯电脑支持Qt图形库

• 编写本地窗口界面程序:例如WPS、360杀毒

• 可视化界面设计,丰富的控件库

• 比肩Visual Studio

Page 27: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 27

Qt控件库

数据输入 数据显示 表格、树、标签页

Page 28: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 28

丰富的第三方Qt组件

QCustomPlot

数据图表

QtWebkit

嵌入浏览器

Phonon

视频播放

方便开发者快速创建应用程序

Page 29: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 29

第八章 PHP/Python/Ruby

龙芯电脑完全支持• 3种语言在互联网开发中广泛使用

• 编程语言排行榜前10名

• 都是“脚本型语言”

• X86的应用不需要重要编译,直接在龙芯上运行

• 基本不存在迁移问题

• 完善支持流行开源框架

• Django,Ruby on Rails

Page 30: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 30

第九章 3D开发

桌面应用的“制高点”• 架构复杂

• 显卡

• 操作系统

• 图形库

• 平台引擎

• 业务复杂

• 地理信息(GIS)

• 交通信息

• 海洋信息

• 人机交互

• 性能要求高

Page 31: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 31

龙芯电脑全面兼容AMD显卡

系列 型号

HD系列

HD4690 HD5450 HD6570 HD6770 HD6670HD6850 HD7470 HD7870 HD8470

R5系列 R5-230 R7系列 R7-240 R7-300 R7-350R9系列 R9-280X R9-370

嵌入式显卡 E6460 E6760 E8860

Page 32: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 32

龙芯运行大型3D应用

SuperTuxKart

3D卡通赛车游戏

Blender

三维建模软件

Page 33: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 33

3D编程

OpenGL所有显卡支持的3D函数库标准

QtOpenGLQt封装的OpenGL类库

OSG三维地球引擎

PyOpenGLPython封装的OpenGL类库

OGRE三维游戏引擎

Page 34: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

page 34

第十章 Docker云平台

龙芯电脑完全支持Docker• 提供云平台管理工具

• 资源集成

• 故障容错

• 弹性扩容

• 状态监视

• 可变更KVM方案

Page 35: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

35

龙芯Docker架构

容器1 容器2 容器3

龙芯服务器(3B3000双路/四路)

国内操作系统(中标,普华,深度,……)

龙芯D o c k e r功能简介

容器管理工具

Page 36: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

36

一个容器 = 一套独立的文件系统

通常是一个软件项目(应用软件 + 中间件 +数据库)

Page 37: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

37

Docker的优点

• 提高服务器利用率• 常见问题:不同的应用软件使用不同版本的中间件、数据库• 如果都安装到一台服务器,很容易造成管理混乱• 如果使用多台服务器,则机房很快不够用• 使用容器平台,则可以共享一台服务器,同时保持管理清晰

• 安全性• 各个容器之间,不能相互访问文件,实现安全性隔离• 一个容器中的文件或者数据损坏,对其它容器没有影响

• 便于部署• 一个容器封装了应用程序、中间件、数据库• 将来更换新的服务器,“免搭建”——直接运行容器

• 便于升级• 将来CPU、操作系统升级,容器还可以直接运行,不需要重新部署

应用程序

Page 38: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

38

典型Docker集群:政务云

服务器1

服务器2

服务器3

服务器N

管理节点

容器仓库

服务器1

服务器2

服务器3

服务器N

共享存储

Web服务器 数据库服务器

Page 39: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

39

Docker集群的优点1:弹性扩容

• 管理员在集群中加入新的服务器• 服务器自动从容器仓库下载应用程序,立即运行• 节省部署时间

服务器1

服务器2

服务器N

容器仓库

服务器3

新服务器

应用程序

Page 40: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

40

Docker集群的优点2:自动容错

• 自动容错:提高可靠性• 管理员预留一定数量服务器,平时处于空闲状态• 如果一台服务器发生损坏,容器管理工具自动挑选一台空闲服务器,

从容器仓库下载应用程序,立即运行• 任何时刻保证有足够数量的服务器在运行• 节省故障处理时间

预留1

预留2

预留3

服务器1

服务器2

服务器N

容器仓库

服务器3

应用程序

预留N

Page 41: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

41

Docker的使用和管理

• 管理工具:命令行/图形界面• 制作虚拟机镜像• 运行虚拟机• 查看虚拟机运行状态• 对有故障的虚拟机进行迁移

Page 42: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式

汇总龙芯电脑上各

种类型应用程序的

实际开发经验

page 42

项目案例

① 第4章:龙芯电脑移植Hadoop

② 第5章:Qt访问神通数据库

③ 第5章:龙芯移植RethinkDB

④ 第6章:龙芯应用公社客户端

⑤ 第6章:浏览器插件的通用变更方案

⑥ 第7章:安装程序制作工具

⑦ 第8章:动态壁纸

⑧ 第9章:龙芯移植OGRE游戏引擎

⑨ 第9章:龙芯移植NASA WorldWind

⑩ 第10章:龙芯电脑移植Portainer

⑪ 第10章:专用云平台的典型架构

Page 43: 《龙芯应用开发标准教程》 重点导读 · 第一章 龙芯电脑 龙芯和X86是“不兼容”的 • “指令集”是指一种CPU上运行的机器指令的二进制编码格式