树莓派开始,玩转Linux(博文视点出品)pdf下载

树莓派开始,玩转Linux(博文视点出品)百度网盘pdf下载

作者:
简介:树莓派开始,玩转Linux(博文视点出品)
出版社:
出版时间:2018-06
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色

编辑推荐

适读人群 :编程初学者,以及对智能硬件开发有兴趣的读者。

随着智能硬件的发展,越来越多的人开始希望了解并使用树莓派这一流行的微型电脑。树莓派不仅适合大人玩,也非常适合孩子。本书按照“树莓派背景知识——树莓派使用——Linux使用——操作系统原理——树莓派实操项目”的顺序展开,使读者在体验玩树莓派的乐趣的同时,可以全面了解操作系统的核心概念和原理,从玩中学

内容简介

本书以树莓派基础工具,讲解Linux操作系统。树莓派是近年来流行的微型电脑,能用于各种有趣的硬件开发。树莓派中安装了Linux系统,可以充当操作系统的学习平台。本书按照“树莓派背景知识――树莓派使用――Linux使用――操作系统原理――实操项目”的顺序展开。读者不仅能体验到玩树莓派的乐趣,而且能全面了解操作系统的核心概念和原理。

作者简介

张腾飞,笔名Vamei,从事图像处理和高性能运算方面的科研,现从事智能硬件和畜牧大数据方面的创业。个人的技术博客点击量超600万,写作有Python、 Java、Linux、网络协议和数据科学方面的教程。

目录

第1部分 怎样的树莓派

第1章 树莓派的诞生 2

第2章 树莓派的心脏 7

第3章 树莓派的大脑 12

第2部分 使用树莓派

第4章 开始使用树莓派 20
4.1 解剖树莓派 20
4.2 操作系统的安装与启动 23
4.3 图形化界面 24
4.4 Scratch 26
4.5 KTurtle 27

第5章 贝壳里的树莓派 31
5.1 初试Shell 31
5.2 用命令了解树莓派 32
5.3 什么是Shell 35
5.4 Shell的选择 36
5.5 命令的选项和参数 37
5.6 如何了解一个陌生的命令 38
5.7 Shell小窍门 38

第6章 好编辑 40
6.1 图形化的文本编辑器 40
6.2 使用nano 42
6.3 语法高亮 44
6.4 文件基础操作 45

第7章 更好的树莓派 47
7.1 常见初始化配置 47
7.2 软件升级与安装 49

第8章 漂洋过海连接你 51
8.1 局域网SSH登录 51
8.2 Bonjour 53
8.3 互联网SSH登录 53
8.4 文件传输 56

第9章 时间的故事 60
9.1 NTP服务 60
9.2 时区设置 61
9.3 实时时钟 62
9.4 date的用法 65

第10章 规划小能手 67
10.1 用cron规划任务 67
10.2 用cron开机启动 68
10.3 用/etc/init.d实现开机启动 68
10.4 避免使用/etc/rc.local 71
10.5 Shell中的定时功能 71

第11章 GPIO的触手 73
11.1 GPIO简介 73
11.2 控制LED灯 74
11.3 两个树莓派之间的GPIO 75
11.4 UART编程 77
11.5 用UART连接PC 79
11.6 用UART登录树莓派 79

第12章 玩转蓝牙 80
12.1 蓝牙介绍 80
12.2 BLE介绍 82
12.3 Bluez 85
12.4 了解树莓派上的蓝牙 86
12.5 树莓派作为BLE外设 87
12.6 树莓派作为BLE中心设备 88
12.7 树莓派作为Beacon 89

第13章 你是我的眼 91
13.1 摄像头的安装与设置 91
13.2 摄像头的基本使用 92
13.3 用VLC做网络摄像头 92
13.4 用Motion做动作捕捉 93

第3部分 进入LINUX

第14章 Linux的真身 96
14.1 什么是内核 96
14.2 什么是GNU软件 98
14.3 Linux的发行版 99

第15章 你好,文件 101
15.1 路径与文件 101
15.2 目录 102
15.3 硬链接 103
15.4 软链接 104
15.5 文件操作 105
15.6 文件搜索 106

第16章 从程序到进程 108
16.1 指令 108
16.2 C程序 110
16.3 程序编译 111
16.4 看一眼进程 112

第17章 万物皆是文本流 114
17.1 文本流 114
17.2 标准输入、标准输出、标准错误 116
17.3 重新定向 117
17.4 管道 118
17.5 文本相关命令 119

第18章 我的地盘我做主 121
18.1 我是谁 121
18.2 root和用户创建 122
18.3 用户信息文件 124
18.4 文件权限 125
18.5 文件权限管理 127

第19章 会编程的bash(上) 129
19.1 变量 129
19.2 数学运算 131
19.3 返回代码 132
19.4 bash脚本 133
19.5 函数 136
19.6 跨脚本调用 137

第20章 会编程的bash(下) 138
20.1 逻辑判断 138
20.2 选择结构 140
20.3 循环结构 143
20.4 bash与C语言 146

第21章 完整架构 148
21.1 内核模式与系统调用 148
21.2 库函数 149
21.3 Shell 151
21.4 用户程序 151

第22章 函数调用与进程空间 153
22.1 函数调用 153
22.2 跳转 155
22.3 栈与情境切换 157
22.4 本地变量 158
22.5 全局变量和堆 159

第23章 穿越时空的信号 161
23.1 按键信号 161
23.2 kill命令 162
23.3 信号机制 163
23.4 信号处理 164
23.5 C程序中的信号 166

第4部分 深入Linux

第24章 进程的生与死 170
24.1 从init到进程树 170
24.2 fork系统调用 171
24.3 资源的fork 172
24.4 最小权限原则 174
24.5 进程的终结 174

第25章 进程间的悄悄话 177
25.1 管道 177
25.2 管道的创建 178
25.3 其他IPC方式 179

第26章 多任务与同步 185
26.1 并发与分时 185
26.2 多线程 186
26.3 竞态条件 189
26.4 多线程同步 190

第27章 进程调度 194
27.1 进程状态 194
27.2 进程的优先级 195
27.3 O(n)和O(1)调度器 196
27.4 完全公平调度器 199

第28章 内存的一页故事 201
28.1 内存 201
28.2 虚拟内存 202
28.3 内存分页 203
28.4 多级分页表 204

第29章 仓库大管家 207
29.1 外部存储设备 207
29.2 外部存储器的挂载 208
29.3 ext文件系统 209
29.4 FAT文件系统 211
29.5 文件描述符 212

第30章 鸟瞰文件树 213
30.1 /boot和树莓派启动 213
30.2 应用程序相关 214
30.3 /etc与配置 215
30.4 系统信息与设备 216
30.5 其他目录 217

第31章 分级存储 219
31.1 CPU缓存 219
31.2 页交换 220
31.3 交换空间 221
31.4 外存的缓存与缓冲 222

第32章 遍阅网络协议 225
32.1 通信与互联网协议 225
32.2 协议分层 226

第33章 树莓派网络诊断 229
33.1 基础工具 229
33.2 网络层 230
33.3 路由 231
33.4 网络监听 231
33.5 域名解析 232

第5部分 树莓派小应用

第34章 树莓派平板电脑 234
34.1 平板电脑 234
34.2 硬件介绍 234
34.3 硬件的安装 235
34.4 配置操作系统 236

第35章 天气助手 238
35.1 读取互联网API 238
35.2 发送邮件 242

第36章 架设博客 245
36.1 安装服务器软件 245
36.2 安装Typecho 247
36.3 让别人可以访问你的网站 248

第37章 离线下载 250
37.1 安装下载工具Aria2 250
37.2 Aria2的使用 251
37.3 远程使用Aria2 251
37.4 安装图形化下载管理工具 252

第38章 访客登记系统 255
38.1 编写命令行小程序 255
38.2 尝试Tkinter 257
38.3 制作访客登记系统 260
38.4 访客名片和访客拍照 261

第39章 节能照明系统 263
39.1 传感器 263
39.2 读取传感器数据 264
39.3 控制照明电路 266

第40章 树莓派挖矿 268
40.1 比特币钱包 268
40.2 在树莓派上挖矿 270
40.3 区块链存储服务 272

第41章 高性能计算 275
41.1 Spark 275
41.2 树莓派与Spark 276
41.3 单机版?计算 277
41.4 树莓派集群 278

第42章 蓝牙即时通信 281
42.1 树莓派与蓝牙 281
42.2 蓝牙服务端 282
42.3 蓝牙客户端程序 284
42.4 服务端和客户端通信 285
42.5 实现文字聊天功能 285
42.6 数据加密传输 286

第43章 制作一个Shell 291
43.1 配置项目 291
43.2 输入输出设置 293
43.3 初步的Shell 295
43.4 文字颜色与其他配置 296
43.5 部分Shell 功能 297
43.6 Shell主程序 304

第44章 人工智能 311
44.1 树莓派的准备 311
44.2 YOLO识别 313
44.3 图形化显示结果 316

附录A 字符编码 318

附录B Linux命令速查 320

附录C C语言语法摘要 328

附录D Makefile基础 332

附录E gbd调试C程序 334

附录F 参考书目及简介 338

后记 340

前言/序言

我是抱着玩的心态开始用电脑的。自从家里有了电脑之后,我就想方设法抓起鼠标和键盘打一会儿游戏。《金庸群侠传》《仙剑》《星际》《盟军敢死队》,这些老游戏都玩了个遍。父母担心我沉迷游戏,一度没收了我的鼠标和键盘。总之,当时的电脑只是个娱乐平台。

那个时候已经在提“20世纪是计算机的世纪”。好莱坞电影开始把黑客塑造成孤胆侠客。我经常抱着《电脑报》或《大众软件》,幻想着自己成为一名侠客一般的计算机高手。但对于一个内地小城的孩子来说,深入接触计算机技术的机会很有限。我曾经很认真地找了一套计算机等级考试的书看,把二进制运算、SQL命令、QBasic语法都背得滚瓜烂熟,却因为装不好编译环境,最终没能写出一个可以使用的软件。读那些顶级黑客的传记,讲他们从小如何如何编程,一直很好奇他们是如何度过环境搭建这个难关的。后来发现,这些人都有机会接触一些编程高手,因此在他们的眼里,这根本不是太大的问题。

上大学时,我选择了物理专业。物理专业做数值模拟和数据处理,C语言和Fortran语言编程也是必修课。有了大学里的资源,编程环境的搭建变成了小菜一碟。只是自己的电脑太过老迈,动不动就要死机。当朋友们呼啸着打Dota时,我却在为Word触发的蓝屏头痛。相熟的朋友看不下去,扔给我一张光盘,要我重装Ubuntu系统。Ubuntu是当时最流行的一个Linux版本。死马当活马医,我安装了光盘上的Ubuntu。系统装好了,电脑死机的次数大为减少。不过Linux下的图像化界面确实和Windows有差距,办公软件也比不上Office。我戚戚然地把Linux当作低成本的二等方案。但无论如何,当时正值我做“大学生研究计划”,运行稳定的Linux还是救我于水火。事后请朋友吃饭,问朋友哪里来的光盘,才晓得Ubuntu的安装光盘可以免费领取。

更让我刮目相看的是Linux下的软件分发。那个时代还没有苹果App Store这样的东西。所谓的在线软件分发,就是上网下载exe安装包。用了Ubuntu之后,我需要的软件基本都可以在软件源中找到。在终端输入一行命令,编译环境就搭建好了。不用担心病毒,而且大部分情况下也不需要付费。再加上学校里有Ubuntu镜像,下载一个软件往往只需要几秒钟。于是,探索Linux下的软件成了我的一大业余爱好,我渐渐习惯了用ImageMagick来做图片处理,用FFmpeg来转换视频,用Wget来做网络下载。这些基于命令行的应用软件,再搭配bash的批处理功能,往往能实现强大的复合功能。

我也越来越享受Linux系统提供的编程环境。在写C语言和Fortran语言作业时,我就开始用vim编写自己的作业,用GCC和GFortran来编译,再用GDB来调试。这个过程要比Windows下的IDE麻烦。但当接触其他语言时,相同的工具可以复用,不用每一次都花费大量时间来熟悉全新的IDE。后来在Linux下学习Python语言时,很容易就可以上手。如果说编程是去游乐园,那么Linux为入园玩耍提供了直通车。想起小时候为编译环境苦恼的自己,真想穿越时空送去一张Ubuntu的安装盘。

我觉得对于一个电脑爱好者来说,Linux最美的地方就是开放。Linux的开放可以分为多个层面。软件层面是开放的,用户可以免费使用。文档也是开放的,你可以在终端下用man命令方便地查询。操作系统是开放的,你可以自由地调整系统,也可以深入了解其原理。代码上亦是开放的,你随时可以看到世界上顶级程序员写的源代码。在Linux系统下,“实现”和“如何实现”是合二为一的。吃鱼的同时,钓鱼的本事也可以学到。因此,Linux提供了一个绝佳的学习平台。

后来,太太送给我一部树莓派作为生日礼物。我惊喜地发现,树莓派使用的操作系统正是Linux。更棒的是,树莓派的底层硬件也很开放。它可以方便地通过有线或无线的方式和硬件外设进行连接。它对使用方式没有太多限制。于是,在后来的智能硬件创业项目,我总是在研发版本中使用树莓派。无论是作为硬件的树莓派,还是作为软件的Linux,都遵循了相同的规律:开放战胜了封闭。知识的共享带来了更加活跃的创造力,也给社会带来了协同合作的机会。

几年前,我读到印度的一个公益项目。这个项目募集旧电脑,在电脑上安装Linux系统,再发放给贫困地区的儿童使用。这个项目不仅给孩子们带来了欢乐,还改变了他们的命运。当树莓派发布的新闻出来时,我想到的就是这款微型电脑的社会意义。后来读到树莓派之父厄普顿发明这台小电脑的初衷,果然也是教育。我由此确信,有很多人和我抱着相同的见解。

如今,“科技取代人类”的言论甚嚣尘上,很多人对技术霸权顶礼膜拜,对人类的未来充满绝望。其实,科技本身是中性的。科技可以取代人们的工作,也可以帮助人们更好地就业。像树莓派和Linux这样的技术,尊重了用户本身的创造力。它们用一种开放协作的态度,提高了社会的温度。我也一直抱着这样的理念,坚持在博客上分享自己的所知。我还记得自己在探索计算机时无路可循的尴尬。即使是出于简单的同理心,我也希望自己的分享能帮助任何一个在门槛上抓耳挠腮的学习者。

借着这股心劲,我克服了写作困难,投入这本书的写作中。我希望这本书能以树莓派硬件为平台,全面讲解Linux原理。全靠昕梓的通力合作,我才能顺利完成这个野心勃勃的目标。杜鹃、陈思为帮我审读了全书,提出了大量的修改意见,让书稿变得真正可读。安娜会在关键的时候给我们提供任何所需的帮助,全程引导了写作过程。最后,这本书还要感谢上海地铁11号线。全靠这班地铁上的空座位,我才能坐着写出大部分文字。

在设计本书内容时,昕梓和我决定尊重读者,不避讳艰深的内容。毕竟,树莓派本身只是一个入口。这个入口的背后有着丰富的操作系统知识。无论是编程,还是深入理解计算机,一定深度的操作系统知识都不可或缺。我们会从树莓派的基本使用讲起,一直深入操作系统原理本身。在第5部分,我们还加入了基于树莓派的实践项目,希望能抛砖引玉,激发用户的创造力。当然,篇幅所限,也不得不舍弃一些细节,但我相信,只要体验到边玩边学电脑的乐趣,那么其他技术的掌握也都可以沿着相同的轨迹重复进行。

那样的话,这本书就没有遗憾了。


Vamei

2018.2.25