欢迎光临澳大利亚新华书店网 [登录 | 免费注册]

    • 嵌入式Linux驱动开发实践
      • 作者:朱文伟//李建英|责编:夏毓彦
      • 出版社:清华大学
      • ISBN:9787302649243
      • 出版日期:2024/01/01
      • 页数:356
    • 售价:35.6
  • 内容大纲

        人们日常生活中打交道最多的就是嵌入式系统,目前广泛使用的手机、MP3播放器、智能家用电器、无人机、自动驾驶汽车、机器人等都用到了嵌入式系统,嵌入式系统的开发占整个计算机系统开发的比重也越来越大。本书详细讲解嵌入式Linux驱动开发和设备端系统构建,并配套全书实例源代码和作者QQ答疑服务。
        本书共分12章,内容包括嵌入式系统概述、搭建Linux安全开发环境、必会的嵌入式开发应用层技术、内核模块开发、字符设备驱动、驱动模块的并发控制、块设备驱动、Linux平台驱动、基于AArch64的内核和文件系统、设备树、I2C驱动实战、SPI驱动实战。
        本书适合作为嵌入式Linux驱动开发初学者的入门书,以及嵌入式Linux开发人员的参考书,也适合作为高等院校电子、通信、自动化、计算机等专业“嵌入式操作系统”课程的教材和教学参考书。
  • 作者介绍

        朱文伟,名校计算机专业统招硕士。拥有20年C/C++、Java开发经验,主导开发过密码、图形、人工智能等方面的产品。精通Linux、Windows系统开发及数据库开发技术。著有图书《LinuxC/C++服务器开发实践》《OpenCV4.5计算机视觉开发实战:基于Python》《OpenCV 4.5计算机视觉开发实战(基于VC++)》《Qt6.X从入门到精通》《Windows C/C++加密解密实战》《密码学原理与Java实现》《Linux C与C++ 一线开发实践》《VisualC++2017从入门到精通》。
  • 目录

    第1章  嵌入式系统概述
      1.1  嵌入式系统
      1.2  Linux操作系统
      1.3  Linux作为嵌入式操作系统的优势
      1.4  嵌入式系统的开发流程
      1.5  嵌入式Linux系统的体系结构
        1.5.1  嵌入式处理器
        1.5.2  嵌入式外围硬件设备
        1.5.3  嵌入式操作系统
        1.5.4  设备驱动
        1.5.5  嵌入式应用软件
      1.6  嵌入式Linux系统的设计与实现
      1.7  Linux操作系统内核
        1.7.1  Linux内核的组成
        1.7.2  Linux内核各部分的工作机制
      1.8  Linux设备驱动程序
        1.8.1  Linux设备驱动概述
        1.8.2  设备驱动的功能
        1.8.3  设备的分类
        1.8.4  驱动的分类
        1.8.5  设备驱动与内核的关系
        1.8.6  设备驱动的结构
        1.8.7  设备驱动的设计和实现步骤
    第2章  搭建Linux驱动开发环境
      2.1  准备虚拟机环境
        2.1.1  在VMware下安装Linux
        2.1.2  开启登录时的root账号
        2.1.3  关闭内核自动更新
        2.1.4  解决Ubuntu上的vi方向键问题
        2.1.5  关闭防火墙
        2.1.6  配置安装源
        2.1.7  安装网络工具包
        2.1.8  安装基本开发工具
        2.1.9  启用SSH
        2.1.10  做个快照
        2.1.11  连接虚拟机Linux
        2.1.12  和虚拟机互传文件
      2.2  安装编译工具
      2.3  使用VS Code开发内核驱动程序
      2.4  使用Visual C++ 2017开发应用程序
    第3章  嵌入式开发必会应用层技术
      3.1  Linux启动过程
      3.2  图形模式与命令模式的切换方式
      3.3  在文件中搜索
      3.4  Linux关机和重启
      3.5  开机自启动
      3.6  查看Ubuntu的内核版本
      3.7  查看Ubuntu操作系统的版本
      3.8  配置文件的区别
      3.9  让/etc/profile文件修改后立即生效

      3.10  测试Web服务器的性能
        3.10.1  架设Web服务器Apache
        3.10.2  在Windows下测试Web服务器的性能
        3.10.3  在Linux下测试Web服务器的性能
      3.11  Linux中的文件权限
      3.12  环境变量的获取和设置
      3.13  解析命令行参数函数
    第4章  内核模块开发
      4.1  Linux内核概述
      4.2  内核模块简介
        4.2.1  何为内核模块
        4.2.2  增加内核功能的两种方法
        4.2.3  使用模块的优缺点
        4.2.4  常用的模块操作命令
        4.2.5  Linux内核程序结构
    第5章  字符设备驱动
      5.1  Linux设备框架
      5.2  字符设备的概念
      5.3  字符设备驱动
        5.3.1  file_operations结构体
        5.3.2  字符设备驱动开发步骤
        5.3.3  设备号的分配
      5.4  驱动开发的常用函数
        5.4.1  copy_from_user函数
        5.4.2  copy_to_user函数
        5.4.3  printk函数
        5.4.4  register_chrdev函数
        5.4.5  register_chrdev_region函数
        5.4.6  alloc_chrdev_region函数
        5.4.7  cdev_init函数
        5.4.8  cdev_alloc函数
        5.4.9  cdev_add函数
        5.4.10  cdev_del函数
        5.4.11  宏class_create
        5.4.12  device_create函数
        5.4.13  device_del函数
        5.4.14  unregister_chrdev函数
        5.4.15  实战字符设备驱动
      5.5  字符设备的ioctl接口
        5.5.1  什么是ioctl接口
        5.5.2  为什么要引入ioctl接口
        5.5.3  ioctl如何使用
        5.5.4  定义命令
        5.5.5  ioctl的基本应用
        5.5.6  ioctl处理结构体
      5.6  Linux虚拟驱动框架设计
      5.7  虚拟LED驱动的实现
    第6章  驱动模块的并发控制
      6.1  嵌入式Linux系统的空间组成
        6.1.1  操作系统内核

        6.1.2  操作系统的空间组成及模式
        6.1.3  用户空间访问内核空间及模式切换
      6.2  进程的基本概念
        6.2.1  进程和线程的定义
        6.2.2  进程的类型
        6.2.3  进程的内存结构
        6.2.4  多任务机制
        6.2.5  进程与程序
        6.2.6  进程标识符
        6.2.7  线程标识符
        6.2.8  线程组及其标识符TGID
        6.2.9  进程描述符
        6.2.10  会话、进程组以及控制终端
      6.3  PID的管理
        6.3.1  PID散列表
        6.3.2  PID命名空间
        6.3.3  局部ID和全局ID
        6.3.4  进程PID结构
        6.3.5  pid_link哈希表存储
      6.4  进程切换分析
        6.4.1  进程的模式和分类
        6.4.2  进程的5种基本状态
        6.4.3  进程的切换过程分析
      6.5  内核进程和线程管理编程
        6.5.1  获得进程PID结构体
        6.5.2  从命名空间下的PID找到对应的PID结构体
        6.5.3  获取进程的进程号
        6.5.4  改变PID结构体的count字段
        6.5.5  获取进程描述符信息
        6.5.6  释放进程所占用的Cache空间
        6.5.7  唤醒进程
        6.5.8  创建一个新的内核线程
        6.5.9  终止指定进程
        6.5.10  结束当前正在执行的进程
      6.6  并发控制的基本概念
        6.6.1  什么是并发
        6.6.2  临界资源与临界区
        6.6.3  原子操作
        6.6.4  并发控制的内容
        6.6.5  为何要并发控制
      6.7  设备驱动的并发控制机制
        6.7.1  并发控制的基础操作
        6.7.2  自旋锁
        6.7.3  信号量
        6.7.4  其他的并发控制机制
        6.7.5  驱动并发控制的设计方法
      6.8  内核同步编程
        6.8.1  设置原子类型的变量并读取
        6.8.2  递增递减原子变量值
        6.8.3  初始化信号量

        6.8.4  获取信号量并减1(不可中断)
        6.8.5  获取信号量并减1(可中断)
        6.8.6  在指定的时间内获取信号量
        6.8.7  释放信号量
    第7章  块设备驱动
      7.1  块设备的概念
        7.1.1  什么是块设备
        7.1.2  常用的块设备
        7.1.3  块设备和字符设备的区别
        7.1.4  块设备相关的几个单位
        7.1.5  块设备的访问
      7.2  块设备驱动程序的概念
        7.2.1  什么是块设备驱动程序
        7.2.2  为什么需要了解块设备驱动
        7.2.3  块设备驱动的组成部分
        7.2.4  块设备驱动框架
      7.3  块设备驱动的关键数据结构
        7.3.1  通用硬盘结构gendisk
        7.3.2  块设备对象结构block_device
        7.3.3  bio结构
        7.3.4  请求队列request_queue结构
        7.3.5  请求结构request
        7.3.6  磁盘操作结构block_device_operations
      7.4  块设备驱动中的I/O请求处理函数
        7.4.1  使用请求队列处理I/O请求
        7.4.2  不使用请求队列处理I/O请求
      7.5  块设备驱动编写的步骤
      7.6  重要函数
        7.6.1  注册
        7.6.2  块设备操作
      7.7  实战案例:用RAM模拟一个块设备
    第8章  Linux平台驱动
      8.1  平台设备驱动模型
        8.1.1  驱动的分隔与分离
        8.1.2  驱动的分层
        8.1.3  基本概念
        8.1.4  什么是platform总线
      8.2  platform驱动
        8.2.1  platform_driver结构体
        8.2.2  platform主要函数
        8.2.3  platform驱动框架
        8.2.4  platform_device的注册过程
      8.3  platform设备
      8.4  实现platform驱动
    第9章  基于AArch64的内核和文件系统
      9.1  认识QEMU
        9.1.1  QEMU是什么
        9.1.2  QEMU的两种执行模式
        9.1.3  QEMU的用途
        9.1.4  使用QEMU虚拟机的几种选择

      9.2  不编译运行AArch64程序
        9.2.1  准备一个现成的AArch64程序
        9.2.2  安装Linux版的QEMU
        9.2.3  下载交叉编译器
        9.2.4  让AArch64程序运行起来
      9.3  编译运行AArch64程序
      9.4  制作简易文件系统
        9.4.1  BusyBox简介
        9.4.2  编译/安装BusyBox
        9.4.3  制作根文件系统的映像文件
      9.5  非嵌入式方式启动内核
        9.5.1  BusyBox启动过程简要分析
        9.5.2  在新内核系统中运行C程序
      9.6  基本功能的完善
        9.6.1  挂载proc支持ifconfig
        9.6.2  挂载sysfs支持lspci
        9.6.3  实现文件系统可写
      9.7  QEMU用户网络模式
        9.7.1  不使用-net选项
        9.7.2  使用-net选项
      9.8  QEMU桥接网络模式
        9.8.1  网桥的概念
        9.8.2  TUN/TAP的工作原理
        9.8.3  带TAP的QEMU系统架构
        9.8.4  brctl的简单用法
        9.8.5  三个网络配置选项
        9.8.6  实战桥接模式网络
        9.8.7  手工命令创建TAP网卡
        9.8.8  使用qemu-ifup
      9.9  QEMU运行国产操作系统
        9.9.1  安装Windows版的QEMU
        9.9.2  UEFI固件下载
        9.9.3  安装麒麟操作系统
        9.9.4  运行麒麟系统
    第10章  设备树
      10.1  设备树的概念
        10.1.1  什么是设备树
        10.1.2  设备树的起源
        10.1.3  Linux内核对硬件的描述方式
        10.1.4  设备树和内核的关系
      10.2  DTS文件和DTSI文件
      10.3  DTB文件和DTC文件
      10.4  设备树框架
        10.4.1  布局与节点
        10.4.2  节点名
        10.4.3  引用
        10.4.4  cpus节点
      10.5  属性
        10.5.1  兼容性属性
        10.5.2  model属性

        10.5.3  status属性
        10.5.4  #address-cells和#size-cells
        10.5.5  reg属性
        10.5.6  ranges属性
        10.5.7  name属性
        10.5.8  device_type属性
        10.5.9  address属性
        10.5.10  interrupts属性
      10.6  设备树操作常用API
        10.6.1  device_node
        10.6.2  查找节点API
        10.6.3  提取通用属性API
        10.6.4  提取addr属性API
        10.6.5  提取resource属性API
        10.6.6  提取GPIO属性API
        10.6.7  提取irq属性API
        10.6.8  从设备树中提取MAC地址
      10.7  编写设备树并编译
    第11章  I2C驱动实战
      11.1  I2C的基本概念
        11.1.1  总线的定义
        11.1.2  什么是I2C
        11.1.3  I2C总线
        11.1.4  I2C总线规范
        11.1.5  I2C总线的特点
      11.2  I2C驱动实战
    第12章  SPI驱动实战
      12.1  SPI概述
        12.1.1  什么是SPI
        12.1.2  SPI工作模式
        12.1.3  SPI传输机制
        12.1.4  I2C和SPI的对比
      12.2  SPI驱动软件架构
        12.2.1  SPI通用设备驱动程序
        12.2.2  SPI控制器驱动程序
        12.2.3  SPI协议驱动程序
        12.2.4  队列化
      12.3  SPI虚拟驱动实战