搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
嵌入式Linux驱动开发实践
0.00     定价 ¥ 89.00
图书来源: 浙江图书馆(由JD配书)
此书还可采购25本,持证读者免费借回家
  • 配送范围:
    浙江省内
  • ISBN:
    9787302649243
  • 作      者:
    朱文伟,李建英
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2024-01-01
收藏
编辑推荐

嵌入式开发的涉及面很广,必须集中某个知识点学透相关知识,才能从事这方面的基本开发工作,然后在工作中不断提高。那应该如何进行学习呢?笔者的经验是分两大块来学,分别是主机端的驱动和设备端的系统构建。

本书内容经过精心设计,使用Linux虚拟机来学习驱动开发,并使用QEMU软件模拟一个开发板来学习设备端系统的构建,降低读者学习成本和入门门槛。


展开
作者简介

朱文伟,名校计算机专业统招硕士,20多年C\C++、Java开发经验。主导开发过密码、图形、人工智能等产品。精通Linux、Windows系统开发及数据库开发技术。著有图书:

《高性能Linux网络编程核心技术揭秘》《Linux C/C++服务器开发实践》《Qt 6.x从入门到精通》《PyQt 5从入门到精通》《Linux C与C++ 一线开发实践》《Visual C++2017从入门到精通》《Windows C/C++加密解密实战》《密码学原理与Java实现》《OpenCV 4.5计算机视觉开发实战(基于VC++)》《OpenCV 4.5计算机视觉开发实战:基于Python》。


展开
目录


第 1 章  嵌入式系统概述 1

1.1  嵌入式系统 1

1.2  Linux操作系统 2

1.3  Linux作为嵌入式操作系统的优势 2

1.4  嵌入式系统的开发流程 4

1.5  嵌入式Linux系统的体系结构 5

1.5.1  嵌入式处理器 5

1.5.2  嵌入式外围硬件设备 5

1.5.3  嵌入式操作系统 6

1.5.4  设备驱动 6

1.5.5  嵌入式应用软件 6

1.6  嵌入式Linux系统的设计与实现 6

1.7  Linux操作系统内核 7

1.7.1  Linux内核的组成 7

1.7.2  Linux内核各部分的工作机制 8

1.8  Linux设备驱动程序 12

1.8.1  Linux设备驱动概述 12

1.8.2  设备驱动的功能 13

1.8.3  设备的分类 13

1.8.4  驱动的分类 14

1.8.5  设备驱动与内核的关系 16

1.8.6  设备驱动的结构 17

1.8.7  设备驱动的设计和实现步骤 19

第 2 章  搭建Linux驱动开发环境 22

2.1  准备虚拟机环境 22

2.1.1  在VMware下安装Linux 22

2.1.2  开启登录时的root账号 25

2.1.3  关闭内核自动更新 27

2.1.4  解决Ubuntu上的vi方向键问题 27

2.1.5  关闭防火墙 27

2.1.6  配置安装源 28

2.1.7  安装网络工具包 28

2.1.8  安装基本开发工具 29

2.1.9  启用SSH 29

2.1.10  做个快照 30

2.1.11  连接虚拟机Linux 31

2.1.12  和虚拟机互传文件 42

2.2  安装编译工具 42

2.3  使用VS Code开发内核驱动程序 43

2.4  使用Visual C++ 2017开发应用程序 48

第 3 章  嵌入式开发必会应用层技术 51

3.1  Linux启动过程 51

3.2  图形模式与命令模式的切换方式 53

3.3  在文件中搜索 53

3.4  Linux关机和重启 54

3.5  开机自启动 55

3.6  查看Ubuntu的内核版本 56

3.7  查看Ubuntu操作系统的版本 57

3.8  配置文件的区别 57

3.9  让/etc/profile文件修改后立即生效 58

3.10  测试Web服务器的性能 59

3.10.1  架设Web服务器Apache 59

3.10.2  在Windows下测试Web服务器的性能 60

3.10.3  在Linux下测试Web服务器的性能 61

3.11  Linux中的文件权限 66

3.12  环境变量的获取和设置 66

3.13  解析命令行参数函数 69

第 4 章  内核模块开发 70

4.1  Linux内核概述 70

4.2  内核模块简介 71

4.2.1  何为内核模块 71

4.2.2  增加内核功能的两种方法 72

4.2.3  使用模块的优缺点 72

4.2.4  常用的模块操作命令 72

4.2.5  Linux内核程序结构 73

第 5 章  字符设备驱动 76

5.1  Linux设备框架 76

5.2  字符设备的概念 77

5.3  字符设备驱动 80

5.3.1  file_operations结构体 80

5.3.2  字符设备驱动开发步骤 82

5.3.3  设备号的分配 85

5.4  驱动开发的常用函数 86

5.4.1  copy_from_user函数 86

5.4.2  copy_to_user函数 87

5.4.3  printk函数 88

5.4.4  register_chrdev函数 89

5.4.5  register_chrdev_region函数 91

5.4.6  alloc_chrdev_region函数 91

5.4.7  cdev_init函数 91

5.4.8  cdev_alloc函数 92

5.4.9  cdev_add函数 93

5.4.10  cdev_del函数 95

5.4.11  宏class_create 95

5.4.12  device_create函数 96

5.4.13  device_del函数 96

5.4.14  unregister_chrdev函数 97

5.4.15  实战字符设备驱动 97

5.5  字符设备的ioctl接口 106

5.5.1  什么是ioctl接口 106

5.5.2  为什么要引入ioctl接口 106

5.5.3  ioctl如何使用 106

5.5.4  定义命令 107

5.5.5  ioctl的基本应用 109

5.5.6  ioctl处理结构体 112

5.6  Linux虚拟驱动框架设计 114

5.7  虚拟LED驱动的实现 116

第 6 章  驱动模块的并发控制 122

6.1  嵌入式Linux系统的空间组成 122

6.1.1  操作系统内核 122

6.1.2  操作系统的空间组成及模式 123

6.1.3  用户空间访问内核空间及模式切换 123

6.2  进程的基本概念 124

6.2.1  进程和线程的定义 124

6.2.2  进程的类型 125

6.2.3  进程的内存结构 125

6.2.4  多任务机制 126

6.2.5  进程与程序 126

6.2.6  进程标识符 127

6.2.7  线程标识符 129

6.2.8  线程组及其标识符TGID 129

6.2.9  进程描述符 131

6.2.10  会话、进程组以及控制终端 138

6.3  PID的管理 139

6.3.1  PID散列表 140

6.3.2  PID命名空间 140

6.3.3  局部ID和全局ID 142

6.3.4  进程PID结构 143

6.3.5  pid_link哈希表存储 143

6.4  进程切换分析 145

6.4.1  进程的模式和分类 145

6.4.2  进程的5种基本状态 146

6.4.3  进程的切换过程分析 147

6.5  内核进程和线程管理编程 148

6.5.1  获得进程PID结构体 148

6.5.2  从命名空间下的PID找到对应的PID结构体 149

6.5.3  获取进程的进程号 150

6.5.4  改变PID结构体的count字段 151

6.5.5  获取进程描述符信息 152

6.5.6  释放进程所占用的Cache空间 153

6.5.7  唤醒进程 154

6.5.8  创建一个新的内核线程 156

6.5.9  终止指定进程 158

6.5.10  结束当前正在执行的进程 159

6.6  并发控制的基本概念 160

6.6.1  什么是并发 160

6.6.2  临界资源与临界区 160

6.6.3  原子操作 160

6.6.4  并发控制的内容 161

6.6.5  为何要并发控制 161

6.7  设备驱动的并发控制机制 162

6.7.1  并发控制的基础操作 162

6.7.2  自旋锁 164

6.7.3  信号量 165

6.7.4  其他的并发控制机制 166

6.7.5  驱动并发控制的设计方法 167

6.8  内核同步编程 170

6.8.1  设置原子类型的变量并读取 170

6.8.2  递增递减原子变量值 171

6.8.3  初始化信号量 172

6.8.4  获取信号量并减1(不可中断) 173

6.8.5  获取信号量并减1(可中断) 174

6.8.6  在指定的时间内获取信号量 175

6.8.7  释放信号量 176

第 7 章  块设备驱动 178

7.1  块设备的概念 178

7.1.1  什么是块设备 178

7.1.2  常用的块设备 178

7.1.3  块设备和字符设备的区别 179

7.1.4  块设备相关的几个单位 180

7.1.5  块设备的访问 181

7.2  块设备驱动程序的概念 182

7.2.1  什么是块设备驱动程序 182

7.2.2  为什么需要了解块设备驱动 182

7.2.3  块设备驱动的组成部分 183

7.2.4  块设备驱动框架 184

7.3  块设备驱动的关键数据结构 187

7.3.1  通用硬盘结构gendisk 187

7.3.2  块设备对象结构block_device 188

7.3.3  bio结构 189

7.3.4  请求队列request_queue结构 189

7.3.5  请求结构request 190

7.3.6  磁盘操作结构block_device_operations 191

7.4  块设备驱动中的I/O请求处理函数 192

7.4.1  使用请求队列处理I/O请求 192

7.4.2  不使用请求队列处理I/O请求 192

7.5  块设备驱动编写的步骤 193

7.6  重要函数 193

7.6.1  注册 193

7.6.2  块设备操作 194

7.7  实战案例:用RAM模拟一个块设备 195



展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证