新書推薦:
《
有趣的中国古建筑
》
售價:NT$
305.0
《
十一年夏至
》
售價:NT$
347.0
《
如何打造成功的商业赛事
》
售價:NT$
408.0
《
万千教育学前·透视学前儿童的发展:解析幼儿教师常问的那些问题
》
售價:NT$
265.0
《
慈悲与玫瑰
》
售價:NT$
398.0
《
启蒙的辩证:哲学的片简(法兰克福学派哲学经典,批判理论重要文本)
》
售價:NT$
347.0
《
云中记
》
售價:NT$
347.0
《
中国古代妇女生活(中国古代生活丛书)
》
售價:NT$
214.0
|
編輯推薦: |
结合国内多所知名高校的“嵌入式系统设计”课程教学大纲和目前嵌入式系统相关就业的需求,在总结教学团队丰富教学经验的基础上,作者重新梳理知识框架编写了本书,力求层次清楚,概念清晰,内容翔实,可操作性强。首先,本书从嵌入式应用的角度出发,介绍嵌入式操作系统的简单应用,使读者掌握嵌入式操作系统的基本操作和基本原理。其次,介绍Linux高级编程,使读者掌握Linux高级编程的核心内容,提升应用开发与系统综合管理的能力。最后,介绍Linux内核知识,使读者掌握驱动开发的方法,力争从实际应用的角度,培养读者的逻辑思维和创新思维,提高他们分析、解决实际工程问题的能力。
从零开始 轻松入门 理论知识阐述清晰,注重内容的实用性和可读性。章节衔接连贯,注重方法介绍与实际操作相结合,便于理解和运用,轻松入门。图文并茂 操作简单 从读者的认知规律编排内容,本书系统配置、代码运行均以图形或运行结果展示,将抽象问题形象化,复杂问题简单化,零散问题系统化,具有较强的实用和参考价值。实例引导 专业经典 书中给出了一百多个典型实例,实例讲解过程详尽,深入浅出,激发读者的学习兴趣,启迪创新思维。学以致用 注重实践 坚持“
|
內容簡介: |
本书系统论述了基于ARM 处理器的嵌入式Linux 系统开发的原理、方法与实践。全书共14 章,包括Linux 概述与系统管理、Linux 编程工具及网络配置、Linux 脚本编程、Linux 内核开发基础和Linux 驱动开发基础与调试等内容。
本书融汇作者在Linux 系统教学、科研和实际项目研发中的经验,实践性强。在内容编排上,按照读者学习的一般规律,结合大量实例讲述,使读者能高效地掌握嵌入式Linux 系统的基本原理和应用方法。
本书既可作为高等院校相关专业的教材,也可作为从事嵌入式系统开发人员的参考用书。
|
關於作者: |
冯新宇:黑龙江科技大学电气与控制工程学院教授、硕士研究生导师,测控技术与仪器系副主任。兼任国家电网黑龙江省电力公司、哈尔滨市科技局项目评审专家。长期从事嵌入式系统、电气设备状态监测与矿山安全监控领域的教学和研究工作。主持及参与国家级、省部级及企业合作科研项目20余项。出版著作12部,代表性著作有《ARM Cortex-M3嵌入式系统原理及应用》《四旋翼无人飞行器设计》与《ADS2009射频电路设计与仿真》。
|
目錄:
|
第一部分 Linux系统及基本操作
第1章 Linux概述与系统管理 3
微课视频:135分钟
1.1 嵌入式系统概述 3
1.1.1 嵌入式系统的发展趋势 3
1.1.2 嵌入式系统的特点 4
1.1.3 嵌入式系统的组成 4
1.1.4 典型嵌入式操作系统 5
1.2 嵌入式Linux基础 6
1.2.1 Linux发行版本 7
1.2.2 Linux定制安装 8
1.3 Linux常用命令 13
1.3.1 系统管理相关命令 14
1.3.2 文件管理相关命令 15
1.3.3 备份压缩相关命令 24
1.3.4 网络通信相关命令 26
1.3.5 其他常用命令 30
1.4 系统升级与配置 34
1.5 习题 35
第2章 Linux编程工具及网络配置 36
微课视频:157分钟
2.1 编辑器 36
2.1.1 vi编辑器介绍 36
2.1.2 vi编辑器的各模式功能键 37
2.2 程序编译与调试 41
2.2.1 gcc编译流程 41
2.2.2 gcc编译选项分析 42
2.2.3 gdb程序调试 46
2.3 Makefile 54
2.3.1 Makefile的书写规则 54
2.3.2 Makefile中变量的使用 54
2.4 服务器配置 55
2.4.1 samba服务器 55
2.4.2 NFS服务器 59
2.4.3 TFTP服务器 61
2.5 习题 64
第3章 Linux脚本编程 65
微课视频:59分钟
3.1 常用shell命令 65
3.2 脚本编写基础 66
3.2.1 特殊字符 66
3.2.2 变量和参数 68
3.2.3 退出和退出状态 70
3.3 流程控制 71
3.3.1 条件测试 71
3.3.2 操作符相关主题 73
3.3.3 循环控制 74
3.3.4 测试与分支 77
3.4 习题 80
第二部分 Linux系统高级编程
第4章 C语言进阶 83
微课视频:344分钟
4.1 C语言的基础知识 83
4.2 数据类型 84
4.2.1 数据类型的分类 84
4.2.2 常量和变量 86
4.2.3 进制 87
4.2.4 字符 88
4.2.5 转义字符与字符集 88
4.2.6 类型转换 88
4.2.7 输入/输出 92
4.2.8 运算符 95
4.3 控制语句 98
4.3.1 分支语句 98
4.3.2 循环语句 101
4.4 数组与字符串 109
4.4.1 数组的定义 109
4.4.2 数组本质探讨 110
4.4.3 一维数组和二维数组 111
4.4.4 字符串 113
4.5 函数 115
4.5.1 函数的定义 115
4.5.2 函数的深度剖析 116
4.5.3 函数的作用剖析 116
4.6 指针 120
4.6.1 指针本质概述 120
4.6.2 连续空间的内存地址 121
4.6.3 指针变量 121
4.6.4 指针数组和指针的指针 123
4.6.5 函数和指针 125
4.7 预处理指令 130
4.7.1 宏定义 130
4.7.2 #include 131
4.7.3 条件编译 132
4.8 习题 133
第5章 文件I/O编程 135
微课视频:74分钟
5.1 文件和目录 135
5.2 目录操作 137
5.3 文件操作 143
5.3.1 基本概念 143
5.3.2 检查文件及确定文件的权限 145
5.3.3 创建文件 146
5.3.4 打开文件 147
5.3.5 关闭文件 149
5.3.6 删除文件 150
5.3.7 文件指针移动 153
5.3.8 其他常用函数 156
5.4 设备控制 159
5.5 Linux时间编程 168
5.5.1 取得目前的时间 168
5.5.2 取得目前时间和日期 168
5.5.3 取得当地目前时间和日期 170
5.5.4 将时间结构数据转换成经过的秒数 170
5.5.5 设置目前时间 171
5.5.6 取得当前时间 171
5.5.7 将时间和日期以ASCII码格式表示 173
5.5.8 将时间和日期以字符串格式表示 173
5.6 习题 177
第6章 进程控制 179
微课视频:53分钟
6.1 进程控制概述 179
6.1.1 进程的定义 179
6.1.2 进程控制模块 180
6.1.3 分配进程描述符 181
6.1.4 进程的创建 181
6.1.5 进程状态 182
6.1.6 进程调度 184
6.1.7 虚拟内存 185
6.1.8 文件锁 186
6.2 进程控制编程 186
6.2.1 启动进程 186
6.2.2 等待进程 193
6.2.3 终止进程 195
6.2.4 守护进程 201
6.3 习题 203
第7章 进程间通信 204
微课视频:77分钟
7.1 进程间通信概述 204
7.2 管道通信 206
7.2.1 无名管道 206
7.2.2 命名管道 209
7.3 消息队列 212
7.3.1 键值 212
7.3.2 创建消息队列 213
7.3.3 发送消息队列 214
7.3.4 接收消息队列 214
7.3.5 控制消息队列 214
7.4 信号 217
7.4.1 信号处理的方式 218
7.4.2 信号操作指令 218
7.5 信号量 226
7.5.1 信号量创建 226
7.5.2 信号量操作 227
7.6 共享内存 233
7.6.1 共享内存创建 233
7.6.2 共享内存的操作 235
7.6.3 共享内存段连接到本进程空间 235
7.6.4 共享内存解除 236
7.7 习题 240
第8章 多线程技术 241
微课视频:30分钟
8.1 Linux多线程概念 241
8.2 Linux线程实现 242
8.2.1 线程创建 242
8.2.2 线程退出 244
8.2.3 线程等待 247
8.2.4 线程标识获取 249
8.2.5 线程清除 250
8.3 线程函数传递及修改线程的属性 254
8.3.1 线程函数传递 254
8.3.2 绑定属性 256
8.3.3 分离属性 257
8.3.4 优先级属性 258
8.3.5 线程栈属性 260
8.3.6 线程的互斥 263
8.3.7 线程的同步 266
8.3.8 信号量 269
8.4 习题 272
第9章 网络编程 273
微课视频:102分钟
9.1 基本概念 273
9.1.1 协议与体系结构 273
9.1.2 数据传输流程 274
9.1.3 常用的命令 275
9.1.4 网络地址 279
9.1.5 IP设置项 280
9.1.6 端口 281
9.2 TCP/IP 281
9.2.1 整体构架概述 281
9.2.2 IP 283
9.2.3 ICMP 285
9.2.4 UDP 285
9.2.5 TCP 286
9.2.6 TCP连接的建立 288
9.3 Socket编程接口介绍 288
9.3.1 建立一个Socket通信 288
9.3.2 对Socket绑定 289
9.3.3 等待连接 290
9.3.4 建立Socket连线 291
9.3.5 发送和接收函数 292
9.3.6 关闭套接字 293
9.4 服务器和客户端的信息函数 294
9.4.1 字节转换函数 294
9.4.2 IP和域名的转换 295
9.4.3 IP地址转换函数 297
9.4.4 服务信息函数 299
9.5 用户数据报发送 299
9.5.1 recvfrom 299
9.5.2 sendto 300
9.6 高级套接字函数 303
9.6.1 recvmsg 303
9.6.2 sendmsg 304
9.7 套接字选项 304
9.7.1 getsockopt() 305
9.7.2 setsockopt() 305
9.7.3 ioctl 306
9.8 服务器模型 306
9.8.1 循环服务器:UDP服务器 306
9.8.2 循环服务器:TCP服务器 307
9.8.3 并发服务器:TCP服务器 311
9.8.4 并发服务器:多路复用I/O 312
9.8.5 并发服务器:UDP服务器 313
9.9 Socket编程应用 316
9.9.1 编写服务器程序 316
9.9.2 编写客户端程序 318
9.9.3 编译测试 319
9.10 习题 320
第三部分 嵌入式系统驱动开发
第10章 内核开发基础 323
10.1 嵌入式开发环境的搭建 323
10.1.1 交叉编译工具链 324
10.1.2 超级终端软件 326
10.2 Linux内核简介 327
10.2.1 Linux内核 328
10.2.2 Linux内核源代码 330
10.2.3 Linux内核配置及裁剪 332
10.2.4 设备树介绍 335
10.2.5 内核启动简单流程分析 344
10.3 文件系统 347
10.3.1 文件系统分类 347
10.3.2 文件系统主要目录 347
10.3.3 文件启动流程 348
10.4 习题 357
第11章 BootLoader 358
11.1 BootLoader介绍 358
11.1.1 BootLoader的安装和启动 359
11.1.2 BootLoader的操作模式 359
11.1.3 BootLoader与主机之间的通信方式 359
11.1.4 常用BootLoader介绍 360
11.2 u-boot介绍 360
11.2.1 目录结构 361
11.2.2 u-boot的主要功能 365
11.2.3 u-boot的工具 365
11.3 u-boot工作流程 366
11.3.1 _start()函数 366
11.3.2 _main()函数 369
11.3.3 board_init_f()函数 370
11.3.4 relocate_code()函数 370
11.3.5 board_init_r()函数 372
11.4 u-boot编译 376
11.5 习题 377
第12章 Linux驱动开发基础与调试 378
12.1 设备驱动简介 378
12.1.1 设备类型分类 378
12.1.2 内核空间和用户空间 379
12.1.3 驱动程序层次结构 380
12.1.4 驱动程序与外界接口 380
12.2 打印调试 381
12.3 综合案例——驱动程序加载 383
12.3.1 静态加载 383
12.3.2 动态加载 389
12.4 习题 392
第13章 字符设备驱动 393
13.1 字符设备驱动基础 393
13.1.1 关键数据结构 393
13.1.2 设备驱动开发的基本函数 395
13.1.3 设备文件和设备号 400
13.1.4 加载和卸载驱动程序 401
13.2 LED设备驱动程序 402
13.2.1 硬件电路 402
13.2.2 驱动程序分析 403
13.2.3 测试验证 409
13.3 按键设备驱动程序 410
13.3.1 按键模块硬件电路 410
13.3.2 Linux input子系统 411
13.3.3 驱动程序分析 413
13.3.4 测试验证 422
13.4 习题 423
第四部分 硬 件 平 台
第14章 硬件平台介绍 427
14.1 硬件参数 427
14.2 软件参数 428
14.3 可完成实验 428
参考文献 430
视频目录
视 频 名 称
时长/分
视频二维码位置
第1集 VMware安装步骤
4
1.2.2节节首
第2集 Ubuntu操作系统安装
9
1.2.2节节尾
第3集 Linux指令操作1
52
1.3.1节节首
第4集 Linux指令操作2
70
1.3.3节节首
第5集 vi和gcc讲解
71
2.2.1节节首
第6集 gdb调试
22
2.2.3节节首
第7集 samba配置
34
2.4.1节节首
第8集 nfs服务器
14
2.4.2节节首
第9集 TFTP服务器
6
2.4.3节节首
第10集 samba多机实验操作扩展
5
2.5节习题5
第11集 nfs多机实验操作扩展
5
2.5节习题6
第12集 脚本开篇介绍
6
3.1节节首
第13集 脚本编程1
25
3.1节节末
第14集 脚本编程2
28
3.3节节首
第15集 数据类型
54
4.2.1节节首
第16集 输入输出函数
32
4.2.7节节首
第17集 控制语句
54
4.3.1节节首
第18集 数组与字符串
33
4.4.1节节首
第19集 函数
24
4.5.1节节首
第20集 指针概述
35
4.6.1节节首
第21集 指针数组
44
4.6.4节节首
第22集 函数指针
43
4.6.5节节首
第23集 目录操作
16
5.2.1节节首
第24集 文件操作
20
5.3.1节节首
第25集 设备控制
15
5.4.1节节首
第26集 Linux时间编程
23
5.5.1节节首
第27集 进程控制概述
20
6.1.1节节首
第28集 进程控制编程
33
6.2.1节节首
第29集 管道通信
25
7.2.1节节首
第30集 消息队列
10
7.3.1节节首
|
內容試閱:
|
第2版前言
近年来,“嵌入式系统原理及应用”课程在全国多所高校都有开设,我们编写的最早的一本教材《ARM9嵌入式开发基础与实例进阶》在2012年由清华大学出版社出版,本书也是在此基础上经过多年的教学和科研积累重新编写完成的。“嵌入式系统原理及应用”课程在不同的学校,教学内容差异很大,授课的侧重点也不同,如单片机(51、STM32)、微机原理、操作系统都可以归到嵌入式系统范畴。典型的嵌入式产品开发涉及内容很广,一本书很难覆盖。从近几年学生的就业情况来看,嵌入式应用软件开发、驱动开发、硬件设计的工作岗位较多,而且对应的领域呈现专业细分趋势。基于此,在教学过程中我们试图给学生一个全面的学习线路,让学生沿着这条线路学习,深入了解嵌入式领域。传统的嵌入式开发包括硬件设计、板级支持、应用程序开发、驱动程序开发等。
本书的内容主线:嵌入式操作系统Ubuntu的使用→应用程序开发→内核→简单驱动程序开发。因为学时限制,对于大部分开设该课程的院校,其授课内容只能到第9章网络编程,这些内容相当于嵌入式系统学习的入门知识。而后面的内容,如内核、驱动程序开发,对于嵌入式系统整个体系又非常重要。通过前9章的课堂学习,部分学生觉得适合学习这门课,想继续该领域的研究,这些学生可以利用开发板完成内核驱动等相关知识的学习,掌握其核心内容。这次改版删除了比较难的知识点:块设备驱动和网络设备驱动。这些知识点涉及内容较多,限于篇幅,无法讲述清楚,对于已经熟练掌握了字符设备驱动的学生建议参考更为专业的资料学习。
本书第2版与第1版相比,主要的改动如下:一是操作系统由“红帽5”改为Ubuntu操作系统,目前Ubuntu操作系统在实际应用中更为普遍,支持也更友好,本书中所有的代码均用Ubuntu重新编译,同样适用于不同的ARM处理器平台;二是所有的代码在i.MX8平台验证通过,该平台由北京博创智联科技有限公司提供,i.MX8平台属于嵌入式人工智能教学科研平台,对于嵌入式的后续学习,如深度学习、人工智能和算法相关的课程都可以使用;三是结合现代教学手段讲解,书中重要知识点通过微课视频的方式呈现,让初学者快速上手,同时还提供程序代码、教学大纲、教学课件、开源工具、实验指导等配套 资源。
嵌入式系统开发涉及内容较多,只要坚持学习,有疑问之处通过多种方式解决,举一反三,相信一定能够掌握。
本书第1~5章由蒋洪波编写,第6~9章由程坤编写,第10~14章由冯新宇编写,全书由冯新宇负责统编,第4~9章视频讲解内容由程坤录制完成,其他视频内容由冯新宇录制完成。
在本书再版过程中得到了北京博创智联科技有限公司的大力支持,该公司提供了全套的实验平台,感谢蒋辉军研发总监的技术支持,陆海军总经理、张经纬副总经理的协调配合。特别感谢清华大学出版社盛东亮编辑多年给予的支持。
感谢广大读者的支持,希望本书对您的学习和工作有所帮助,也希望您把对本书的意见和建议反馈给我们。
作 者
2023年10月
第1版前言
嵌入式系统及其应用是一个庞大的知识体系,笔者在多年的授课过程中,也很难选择一本合适的书作为本科生的授课教材。结合课堂讲稿和学生的部分毕业设计内容,以及在学生学习过程中经常遇到的问题,笔者整理成本书——《嵌入式Linux系统开发——基于ARM处理器通用平台》,之所以这么命名,是打破了以前ARM9体系或者ARM11体系的框架。Linux操作系统在ARM9之上的处理器均有较好的兼容,读者稍加修改,代码就能应用,所以命名时就回避了某一款处理器的限定。关于嵌入式有太多的内容可以介绍,本书侧重应用,并介绍了当前嵌入式的发展。
嵌入式系统无疑是当前热门、很有发展前途的IT应用领域。嵌入式系统用在某些特定的专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时还对实时响应等要求很高。特别是随着消费家电的智能化,嵌入式更突显重要。像我们平时常见的手机、PDA、电子字典、可视电话、数字相机、数字摄像机、机顶盒、高清电视、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航空航天设备等都是典型的嵌入式系统。
嵌入式系统是软硬件结合的产品,从事嵌入式开发的人员主要分为如下两类。
一类是无线电相关专业出身的人员,如电子工程、通信工程等专业出身的人员,主要从事硬件设计,有时需要开发一些与硬件关系密切的底层软件(如BootLoader、Board Support Package)、初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂的软件系统往往力不从心(如嵌入式操作系统原理和复杂的应用软件等)。
另一类是软件、计算机专业出身的人员,主要从事嵌入式操作系统和应用软件的开 发。如果学软件的人员对硬件原理和接口有较好的掌握,也完全可以编写BSP和硬件驱动程序。嵌入式硬件设计完成后,各种功能就全靠软件来实现。嵌入式设备的增值很大程度上取决于嵌入式软件,设备越智能,系统越复杂,软件的作用也就越关键,这是目前的发展趋势。
目前,国内外嵌入式的相关人才都很稀缺。一方面,该领域入门门槛较高,不仅要了解较底层的软件(如操作系统级、驱动程序级软件),对软件专业水平要求较高(如嵌入式系统对软件设计的时间和空间效率要求较高),而且还必须熟悉硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,该领域较新,发展太快,很多软、硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、MPEG技术、无线通信协议等),掌握这些新技术的人较少。嵌入式人才稀缺的根本原因可能是大多数人无条件接触该领 域,这需要相应的嵌入式开发板和软件,另外需要有经验的人员进行开发流程的指导。
与企业计算等应用软件的开发人员不同,嵌入式领域人才的工作强度通常较低,收入却很高。而从事企业应用软件的IT人员,开发完这个用户的系统,又要去开发下个用户的系统,并且每个用户的需求和完成时间都必须按客户要求改变,往往疲于奔命,重复劳动。相比而言,开发嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事,所开发的产品通常是通用的,不会因客户的不同而修改(或只是对软件进行一些小修补)。某一型号的产品开发完成后,往往有较长的一段空闲时间,可进行充电和休整。另外,从事嵌入式软件开发的人员的工作范围相对狭窄,所涉及的专业技术范围比较小(如ARM、RTOS、MPEG、802.11等),随着时间的累积,经验也逐渐累积,寥寥数语的指导就足够让初学者琢磨半年。如果从事应用软件开发,可能不同的客户的软件开发平台也完全不同,这会使得开发工作也相对更加辛苦。
嵌入式开发更注重的是练习,而嵌入式系统开发设计最难的是入门,所涉及知识较多,初学者很难从纷杂的知识中快速上手学习,现在市面上用于嵌入式开发的学习板比比皆是,价格都比较低廉,读者可以购买一款相对通用的开发板,按照书中的操作练习,一步一步进行嵌入式开发的学习。任何知识的学习都是由浅入深,由感性认识到理性认识,掌握了本书的内容,相信读者一定能够掌握嵌入式入门开发的基本要领。
本书主要由冯新宇编写。此外,第11~15章由蒋洪波编写。参与编写的还有杨昕宇、刘宇莹、刘琳、史殿发、孟莹等。
感谢广州碾展公司的技术支持!感谢您选择了本书,希望我们的努力对您的工作和学习有所帮助,也希望您把对本书的意见和建议反馈给我们。
作 者
2017年4月
|
|