图书介绍

嵌入式Linux软件开发从入门到精通2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

嵌入式Linux软件开发从入门到精通
  • 吕雪峰,彭文波编著 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302370833
  • 出版时间:2014
  • 标注页数:392页
  • 文件大小:51MB
  • 文件页数:406页
  • 主题词:Linux操作系统-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

嵌入式Linux软件开发从入门到精通PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 体验嵌入式系统的魅力1

1.1 嵌入式系统的定义2

1.2 嵌入式系统的历史与现状2

1.2.1 无操作系统阶段2

1.2.2 简单操作系统阶段3

1.2.3 实时操作系统阶段3

1.2.4 面向Internet阶段3

1.3 嵌入式与非嵌入式的区别4

1.4 从事嵌入式软件开发的前景4

1.4.1 优势4

1.4.2 从事嵌入式软件开发的缺点5

1.4.3 技术基本要求6

1.5 嵌入式系统的体系结构6

1.5.1 嵌入式处理器6

1.5.2 嵌入式外围设备7

1.5.3 嵌入式操作系统8

1.5.4 嵌入式应用软件9

1.6 ARM9

1.7 延伸阅读:嵌入式系统面临的关键问题10

1.8 小结11

第2章 嵌入式Linux的前世今生13

2.1 嵌入式Linux简介14

2.1.1 嵌入式Linux的优势14

2.1.2 嵌入式Linux面临的挑战15

2.1.3 发展前景16

2.1.4 Android17

2.2 嵌入式Linux系统的软件组成17

2.2.1 引导加载程序17

2.2.2 Linux内核18

2.2.3 文件系统19

2.2.4 用户应用程序21

2.3 嵌入式系统软件研发的关键技术21

2.3.1 开发流程21

2.3.2 交叉编译和链接22

2.3.3 交叉调试23

2.3.4 系统测试25

2.4 系统启动过程26

2.5 延伸阅读:开源、GPL与POSIX简介28

2.5.1 开源28

2.5.2 GPL29

2.5.3 POSIX30

2.6 小结32

第3章 零基础安装虚拟机与Linux操作系统33

3.1 VMware Workstation的安装34

3.2 配置VMware Workstation并便捷安装Fedora 1636

3.3 配置VMware Workstation手动安装Fedora 1643

3.4 安装Fedora 1647

3.5 VMware Tools的安装52

3.6 使用已安装好操作系统的虚拟机56

3.7 延伸阅读:打开Fedora 16的root账号58

3.8 小结58

第4章 快速构建嵌入式Linux开发环境59

4.1 安装交叉编译器60

4.1.1 安装交叉编译器60

4.1.2 建立链接62

4.1.3 查看交叉工具是否安装正确63

4.2 构建开发板运行所需的环境63

4.2.1 编译一级启动文件x-loader63

4.2.2 编译二级启动文件U-Boot65

4.2.3 编译内核67

4.2.4 制作文件系统镜像68

4.3 更新系统文件69

4.3.1 更新文件从SD卡启动69

4.3.2 更新文件从NAND Flash启动70

4.4 小结77

第5章 配置串口通信工具79

5.1 配置Windows XP的超级终端80

5.2 串口信息的捕获82

5.3 在Linux中配置Minicom84

5.4 小结88

第6章 配置NFS文件系统服务89

6.1 查看宿主机上的安装包90

6.2 配置网络文件系统NFS91

6.3 启动NFS服务91

6.3.1 在Fedora 16下面运行service nfs start命令失败91

6.3.2 在Fedora 16下面运行service nfs-server start失败92

6.4 本机测试NFS94

6.5 在开发板上测试NFS94

6.5.1 常见的测试过程94

6.5.2 NFS无法挂载的问题分析95

6.6 小结96

第7章 开始编写第一个程序97

7.1 在宿主机上编写第一个程序98

7.2 编写开发板上的上第一个程序99

7.3 小结102

第8章 Linux开发入门必备私房菜103

8.1 程序安装目录104

8.2 头文件104

8.3 库文件104

8.4 gcc简介106

8.5 make简介107

8.6 小结109

第9章 Shell:用户与Linux沟通的桥梁111

9.1 Shell是如何工作的112

9.2 Shell的“兄弟姐妹”113

9.3 必须熟悉的Shell命令114

9.3.1 命令行114

9.3.2 选项和参数115

9.3.3 命令行特征116

9.4 理解Shell中的特殊字符116

9.4.1 通配符116

9.4.2 引号118

9.4.3 注释符119

9.5 畅通交流:标准输入/输出和重定向120

9.5.1 标准输入与输出120

9.5.2 输入重定向121

9.5.3 输出重定向122

9.5.4 管道124

9.6 命令替换124

9.7 实战体验:在Bash中的操作125

9.7.1 命令和文件名扩展特性125

9.7.2 命令行编辑126

9.7.3 命令历史126

9.7.4 命令别名128

9.8 定制Bash129

9.9 小结129

第10章 文本编辑利器Vi131

10.1 Vi简介132

10.1.1 命令行模式132

10.1.2 文本输入模式132

10.1.3 末行模式132

10.1.4 模式之间的切换133

10.2 Vi的进入与退出133

10.2.1 Vi的进入133

10.2.2 退出Vi134

10.3 Vi中的行号135

10.4 光标移动操作136

10.5 按字移动光标138

10.5.1 w和W命令138

10.5.2 e和E命令139

10.5.3 b和B命令139

10.6 屏幕滚动139

10.6.1 滚屏命令139

10.6.2 分页命令139

10.6.3 状态命令140

10.7 屏幕调零命令140

10.8 文本插入操作140

10.8.1 插入(Insert)命令140

10.8.2 打开(open)命令141

10.9 文本修改142

10.9.1 文本删除142

10.9.2 取消上一命令(Undo)143

10.9.3 重复命令(Redo)144

10.10 实现替换功能145

10.11 小结145

第11章 应知应会的基本函数147

11.1 文件操作函数148

11.1.1 文件的创建与打开操作148

11.1.2 对文件进行读写149

11.1.3 文件的关闭操作150

11.1.4 改变文件读写偏移位置:lseek()150

11.1.5 实例:文件的打开关闭、读写与设置文件读写指针151

11.1.6 文件描述符和流152

11.1.7 文件控制操作函数fcntl()154

11.1.8 控制设备文件参数的函数ioctl()154

11.1.9 文件的权限修改154

11.1.10 文件的属主与组群修改156

11.1.11 获得文件的状态157

11.1.12 文件的其他操作160

11.2 目录操作161

11.2.1 创建和删除目录的函数161

11.2.2 打开目录161

11.2.3 读取目录162

11.2.4 关闭目录163

11.2.5 改变工作目录的函数163

11.2.6 取得当前的工作目录163

11.2.7 实例:文件列表程序164

11.3 建立临时文件165

11.4 获取进程号170

11.5 获取节点信息170

11.6 小结173

第12章 时间问题的处理175

12.1 时钟类型176

12.1.1 硬件时钟176

12.1.2 系统时钟176

12.1.3 系统时钟与硬件时钟的关系176

12.2 UTC、CST与GMT176

12.3 Linux下常用的时间类型177

12.3.1 time t时间类型177

12.3.2 struct tm时间类型177

12.3.3 struct timeval时间类型178

12.3.4 struct timespec时间类型178

12.3.5 struct timezone179

12.3.6 获得自Epoch以来的秒数179

12.4 获得与修改系统时间180

12.5 时间格式转换182

12.5.1 asctime函数182

12.5.2 ctime函数183

12.5.3 gmtime函数184

12.5.4 localtime函数185

12.5.5 mktime函数186

12.6 使线程睡眠的时间函数186

12.6.1 sleep函数186

12.6.2 usleep函数188

12.6.3 nanosleep函数189

12.6.4 示例:为nanosleep()函数指定秒数和纳秒数190

12.6.5 alarm函数192

12.7 延伸阅读:其他函数193

12.8 小结194

第13章 简单的网络编程实战195

13.1 基础知识196

13.1.1 C/S与B/S结构196

13.1.2 UDP/TCP协议197

13.1.3 什么是Socket198

13.2 UDP套接字编程实例198

13.2.1 服务端198

13.2.2 客户端200

13.2.3 编译202

13.2.4 运行结果203

13.2.5 使用Wireshark捕获数据包203

13.2.6 UDP套接字网络编程涉及的系统调用过程204

13.2.7 建立Socket206

13.2.8 配置Socket206

13.2.9 数据传输208

13.2.10 延伸阅读:关闭Socket209

13.3 TCP套接字编程实例209

13.3.1 服务端209

13.3.2 客户端212

13.3.3 编译214

13.3.4 运行结果214

13.3.5 使用Wireshark捕获数据包215

13.3.6 TCP套接字网络编程所涉及的系统函数216

13.3.7 建立连接217

13.3.8 数据传输219

13.4 小结220

第14章 简单的线程操作实战221

14.1 为何嵌入式系统中进程不再是重点222

14.1.1 进程与线程222

14.1.2 线程的优势222

14.1.3 我们的问题223

14.1.4 进程通信的统一方式:Socket通信224

14.1.5 简单的线程操作224

14.2 创建线程227

14.3 获得本线程的标识符228

14.4 结束线程228

14.5 延伸阅读:操作线程共享变量229

14.6 小结232

第15章 重点剖析:线程同步实例233

15.1 互斥锁234

15.1.1 再谈线程共享变量的操作235

15.1.2 互斥锁的创建237

15.1.3 互斥锁的销毁238

15.1.4 互斥锁的操作238

15.2 读写锁239

15.2.1 读写锁实例239

15.2.2 读写锁的创建241

15.2.3 获取读写锁中的读锁242

15.2.4 获取读写锁中的写锁243

15.2.5 解除锁定的读写锁243

15.2.6 销毁读写锁244

15.3 条件变量245

15.3.1 忙等待245

15.3.2 条件变量247

15.3.3 条件变量的创建249

15.3.4 条件变量的销毁249

15.3.5 条件变量的等待和激发249

15.3.6 互斥锁和条件变量的结合使用250

15.4 线程死锁253

15.5 延伸阅读:解决死锁的方法255

15.5.1 解决方法一255

15.5.2 解决方法二256

15.6 小结258

第16章 进阶私房菜:再谈线程259

16.1 线程参数的传递260

16.1.1 单个参数传递260

16.1.2 多个参数传递261

16.2 线程私有数据263

16.2.1 创建key266

16.2.2 删除key267

16.2.3 读写key267

16.3 修改线程属性267

16.3.1 可以修改的线程属性268

16.3.2 修改线程参数示例271

16.4 延伸阅读:线程池275

16.4.1 为什么需要线程池275

16.4.2 构建线程池框架276

16.4.3 简单的线程池示例276

16.5 小结285

第17章 进阶私房菜:再谈网络编程287

17.1 对SIGPIPE信号的处理288

17.1.1 示例1:SIGPIPE信号的默认处理288

17.1.2 示例2:重定义SIGPIPE信号的默认动作293

17.1.3 示例3:忽略SIGPIPE信号295

17.1.4 示例4:直接使用MSG_NOSIGNAL标识296

17.2 修改Socket缓冲区的大小297

17.2.1 setsockopt函数与getsockopt函数297

17.2.2 示例:修改Socket缓冲区的大小299

17.3 检测服务器与客户端的连接是否有效302

17.4 服务器的多线程处理304

17.4.1 客户端305

17.4.2 服务器309

17.5 延伸阅读:重新bind312

17.5.1 TIME WAIT的两个作用312

17.5.2 如何结束TIME WAIT状态313

17.5.3 实现可立即重启的服务器314

17.6 小结315

第18章 重点突破:网络编程的字节流处理317

18.1 面向字节流的分包问题318

18.1.1 数据包的常见结构318

18.1.2 线程间数据的交互——环形缓冲区的实现319

18.1.3 环形缓冲区319

18.1.4 封包与解包328

18.1.5 网络整合使用实例329

18.1.6 错误数据包的测试335

18.2 再谈生产者与消费者的示例346

18.3 小结352

第19章 嵌入式B/S架构开发要点353

19.1 几种嵌入式Web服务器的比较354

19.1.1 Boa354

19.1.2 thttpd354

19.1.3 Mimi_httpd355

19.1.4 Mongoose355

19.1.5 Lighttpd356

19.1.6 AppWeb356

19.1.7 Apache357

19.2 Boa简介357

19.3 移植与测试Boa的环境配置358

19.4 Boa的移植358

19.4.1 下载源代码358

19.4.2 编译358

19.4.3 安装到开发板的Linux文件系统360

19.4.4 配置361

19.4.5 测试361

19.5 使用CGI363

19.5.1 简介363

19.5.2 配置目标板文件系统363

19.5.3 编写HelloCGI.c程序364

19.5.4 交叉编译364

19.5.5 测试364

19.6 复杂网页测试367

19.6.1 设置目标板文件系统/var/www的目录结构367

19.6.2 编制index.html368

19.6.3 测试369

19.7 小结371

第20章 SQLite数据库移植与实战373

20.1 SQLite的特性374

20.2 SQLite的移植过程374

20.2.1 移植的环境374

20.2.2 移植步骤375

20.3 如何使用Linux C操作SQLite376

20.4 数据库的并发访问379

20.5 小结384

附录A 网络分析工具Wireshark的使用385

热门推荐