书名:用“芯”探核:龙芯派开发实战
ISBN:978-7-115-54520-6
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 胡伟武 杜安利 乔 崇 叶骐宁 等
责任编辑 俞 彬
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
这是一本介绍如何快速熟悉、掌握龙芯派开发方法的专著。本书基于龙芯派二代开发板,首先由浅入深地介绍了龙芯派二代的架构、龙芯派的启动和开发配置、Linux基本操作与常用工具等内容,帮助读者快速上手龙芯派的实际操作;然后通过Qt编程、智能家居、无人机编队系统、数字采集系统、个人路由器、网络加速、图像识别、语音关键词检索等多个项目,手把手地教给读者龙芯派的开发方法,并提供了项目代码供读者一步步学习。
本书适合工业控制、网络通信等领域的开发者,计算机相关专业的大学生,以及Linux爱好者阅读。
章节 |
作者 |
作者单位 |
---|---|---|
第01章 |
杜安利 叶骐宁 |
龙芯中科技术有限公司 |
第02章 |
杨嘉勋 |
— |
第03章 |
张磊 |
— |
第04章 |
张磊 |
— |
第05章 |
张岩 叶骐宁 |
龙芯中科技术有限公司 |
第06章 |
陈华宾 王鑫 丁代宏 |
厦门大学 |
第07章 |
林和志 章绍晨 石青州 王志川 |
厦门大学 |
第08章 |
任旭东 高飞 付江 甘振旺 张桐 张争 |
北京神州慧安科技有限公司 |
第09章 |
黄邦浪 |
深圳市路由心生科技有限公司 |
第10章 |
乔崇 孙丞廉 |
龙芯中科技术有限公司 |
第11章 |
赵俊超 兰辉艳 |
成都信息工程大学 |
第12章 |
张鹏远 刘作桢 |
中国科学院声学研究所 |
总主编
胡伟武 龙芯中科技术有限公司董事长
张 戈 龙芯中科技术有限公司副总裁
靳国杰 龙芯中科技术有限公司总裁助理
编 委
杜安利 郭同彬 叶骐宁 陈华才
编辑工作委员会
主 任
张立科
副主任
俞 彬 刘 琦
委 员
宋吉文 马 嘉 刘 涛 赵祥妮 赵 轩 张天怡
赵 一 李天骄 毕 颖 陈万寿 杨海玲 陈冀康
龙芯处理器从无到有,从基本可用到越来越好用,已经有20个年头。这20年来,龙芯团队的伙伴们挥洒汗水,走过弯路,经历过坎坷,好在都坚持下来了,成就了生命中最美好的年华。
多年来,我一直想写一些与国产CPU嵌入式开发相关的文章和教程,然而由于种种原因,未能成稿。近年来我们欣喜地看到,国产软硬件不断发展,越来越多的开发者开始涉足国产软硬件开发。但是,任何事物的发展都有漫长的过程,开发资料的匮乏是广大国产软硬件开发者遇到的普遍问题。
此次,本书的出版有赖于张鹏远、陈华宾、林和志、张友平、杨嘉勋等老师和朋友的支持,他们不仅选用龙芯派开发产品,还为本书提供了大量的实操案例。本书内容包含了内核开发、驱动移植、Qt编程、网络加速、无人机、工业控制、人工智能等时下热门的应用,也符合有志于国产化软硬件开发的初学者的学习曲线。如“第08 章 基于libmodbus开发数字采集系统”详细介绍了在龙芯派上开发基于libmodbus的用于工业控制的应用的方法,再如“第11章 使用OpenCV+Qt实现图像识别”介绍了在龙芯派上开发人工智能应用的方法。
龙芯派采用龙芯第二代嵌入式处理器—龙芯2K1000,这款处理器主要用于高端嵌入式领域。双核1GHz的性能和丰富的I/O接口赋予了基于龙芯2K1000上的应用无尽的开发可能,同时我们开放了包括内核、Bootloader、操作系统在内的所有源码,因此开发者可以自由地选择学习路径。我们希望用开放的态度,为广大关注国产软硬件发展的开发者提供一个优质的开发平台,不仅方便所有人了解国产CPU的进步,也让开发者能够快速熟悉、上手国产软硬件开发平台,在上面开发自己的软硬件设备,为我国的国产化事业做出贡献。
未来的路还很长,龙芯将砥砺前行。谨以此书献给关心、支持以及有志于从事国产软硬件产品开发的同仁们!
胡伟武,龙芯中科技术有限公司董事长
2020年12月于北京
如果你对计算机软硬件感兴趣,将不难发现近几年国产软硬件的厂商不断推陈出新,国产软硬件也在向着好用的目标不断迈进。那么,在众多国产硬件平台中,为什么推荐选择龙芯入门国产软硬件开发呢?
龙芯拥有从微控制单元(MCU)到片上最小系统(SoC)再到CPU的完整产品线,覆盖了前端采集、边缘计算转发、终端计算的完整生态链路,由广泛的行业应用带来更大的应用空间,图0.1展示了使用龙芯处理器的部分应用。对于开发者来说,在龙芯派上学习到的开发方法,同样适用于龙芯的高性能平台(龙芯3A3000和3A4000处理器),对于龙芯1号的MCU平台学习也有启发之处。目前,龙芯处理器已经应用在办公计算机、工业服务器、网络设备、工业控制、能源、交通等多个领域,国产软硬件生态体系的崛起已经形成趋势。
图0.1 使用龙芯处理器的部分应用
从“用CPU”到“造CPU”的完整流程,从指令集扩展到微处理器结构,从内核、Bootloader到操作系统,龙芯团队都坚持自己编写代码,掌握CPU设计和应用的核心技术。同时,龙芯秉持着开放的态度,建立软硬件生态,向高校开源了在行业中广泛应用的GS132和GS232指令,并开源了PMON、内核以及操作系统源码。图0.2所示是龙芯社区开源项目源码库,龙芯实现了自主与自由相得益彰。
图0.2 龙芯社区开源项目源码库
国产处理器和国外同类产品的竞争已经从性能转移到了生态。国产处理器在应用参考、开发资料方面的相对空白,为国产软硬件的开发者提供了更大的舞台,使用龙芯派作为开发平台的应用也在全国大学生嵌入式芯片与系统设计竞赛暨全国大学生智能互联创新大赛中多次斩获全国奖项。
不得不说,拿到这本书的读者是幸运的。本书涵盖了Linux内核开发、云管端系统搭建、Qt编程、图像识别等时下热门的项目,并提供了项目代码供读者一步步学习在龙芯平台进行应用开发的方法。
拿到龙芯派和这本书后,建议读者先粗略看一遍目录,选取自己感兴趣的项目,按照书中的步骤指引操作实现。一些章节还提供了实战开发内容,有余力的读者也可以按照实战开发中的方向自行探究。
本书提供了以下资源。
● 项目源码。
● 第11章的编译文件,文件名分别为opencv_contrib.tar和OPENCV-build.zip。
● 龙芯派的官方合作厂家。
读者可添加本书QQ群(群号:778927990),获取本书的相关资源及信息。
杜安利 乔崇
2020年12月
本章将带领读者从龙芯派二代的主板出发,了解龙芯派二代的接口外设,以及在龙芯派上进行软硬件开发之前,读者还需要了解的背景知识。
龙芯派二代相较于第一代产品,其接口更丰富、存储模式更合理,更加适合开发者学习使用。因此,本书的内容都是围绕龙芯派二代(以下简称龙芯派)进行构建的。图1.1是龙芯派开发板的外观。
图1.1 龙芯派开发板外观
龙芯派是一块12cm×12cm的方形主板,在它的中间有一颗方形的芯片,这就是龙芯2K1000处理器。作为片上最小系统(SoC),龙芯2K1000处理器将为龙芯派的图像处理、通用运算、I/O处理提供强劲的支撑。图1.2展示了龙芯派的接口。
图1.2 龙芯派接口一览
龙芯派的左侧是1路RS232串口,它对于嵌入式设备的调试非常重要。
龙芯派的下方从左到右依次是2路USB 2.0接口、1路USB OTG接口、1路HDMI、2路千兆网口和1个音频输入/输出接口,覆盖了使用龙芯派的显示、数据传输、网络通信等接口功能。
龙芯派的右侧是GPIO排针接口,在嵌入式开发中,很多外设的信号都是通过GPIO通信实现的,这对于嵌入式开发非常重要。GPIO排针上方是1路X1 PCIE接口,利用该接口,龙芯派可以实现多样化的高速外设扩展,比如网卡、加密卡、FPGA加速卡都可以使用这个接口,让龙芯派的功能变得更强大。PCIE接口的左侧分别是M.2 Wi-Fi插槽和2242规格的M.2 SSD(固态硬盘)插槽,M.2 Wi-Fi插槽可以接入无线网卡为龙芯派配置无线网络,龙芯派运行的内核以及文件系统都会被安装在固态硬盘中,固态硬盘已经预装好了Loongnix系统。
龙芯派的上方是电源接口和DVO显示接口,DVO显示接口可以连接LCD液晶屏。DVO显示接口右侧是EJTAG调试接口,配合龙芯的EJTAG调试器可以完成gdb调试和断点调试。
龙芯派作为一个卡片型的开发板,可以实现个人计算机上的很多功能,但是和我们日常使用的电子设备有些许不同。在进入龙芯派应用开发前,我们应该了解一些关于龙芯的基础知识。同时,我们也应该了解龙芯处理器是从何而来,为什么要从龙芯入门国产软硬件的开发。
ARM和X86对于我们来说并不陌生。现在大部分智能手机里的中央处理器(CPU),如高通的骁龙系列、华为的麒麟系列、展讯的虎贲系列,都是基于ARM指令集进行设计的。而我们的个人计算机内的CPU,如Intel的酷睿系列和AMD的锐龙系列,则是基于X86指令集设计的。
龙芯处理器和上文提及的芯片不仅在工艺上不一样,使用的指令集架构也有很大区别。龙芯处理器使用的是由龙芯团队自主设计的LoongISA指令集,可以兼容MIPS指令集。
LoongISA指令集基于MIPS指令集做了很多扩展。龙芯的高性能处理器3A4000采用的LoongISA 2.0指令集架构,已经和现在的MIPS指令集走出了完全不同的一条路。
尽管LoongISA指令集和ARM、X86乃至于MIPS指令集都有所不同,但是龙芯完成了Linux以及系统层级之上的基础件、中间件等工作,所以开发者在使用龙芯处理器时,相较于基于ARM、X86指令集的处理器其实没有本质的区别。因此,自主指令集架构并不意味着是封闭系统,由于龙芯在软件上坚持开源和开放,开发者能够自由地进行软硬件开发,安全可控与自由开源在龙芯处理器上交相辉映。
龙芯处理器起源于中科院计算所的龙芯课题组。在龙芯课题组夙兴夜寐的奋战下(见图1.3),龙芯1号处理器在2001年完成设计,2002年流片成功,是首个由中国人自主设计的高性能CPU。在研发之初,按照中国“贱名好养活”的习俗,龙芯1号处理器的小名叫“狗剩”,英文名叫“Godson”。
图1.3 龙芯课题组成员把办公室当卧室,在艰苦条件中研制龙芯
截至目前,从“狗剩”出发,龙芯已经研发量产了几十款CPU,覆盖了高性能计算、终端和边缘计算、数据采集等从高到低的算力要求,如图1.4所示。龙芯派上搭载的龙芯2K1000处理器正是龙芯在高端嵌入式领域推出的高性能处理器。
图1.4 面向不同领域需求的龙芯处理器
在很多领域,如电视机、马路上的红绿灯、智能门锁、充电桩等都有龙芯的身影。龙芯处理器作为硬件本体安全的强力支撑,为普罗大众的生活默默提供保障。