第1章嵌入式系统概述 1.1嵌入式系统简介 1.1.1嵌入式系统的产生 1.1.2嵌入式系统的定义、特点和分类 1.1.3嵌入式系统的典型组成 1.2嵌入式微处理器 1.2.1嵌入式微处理器简介 1.2.2主流嵌入式微处理器 1.3嵌入式操作系统 1.3.1嵌入式Linux 1.3.2QNX 1.3.3Huawei LiteOS 1.3.4Android 1.3.5μC/OS-Ⅱ 1.3.6VxWorks 1.3.7RT-Thread 1.4嵌入式系统的应用领域和发展趋势 1.4.1嵌入式系统的应用领域 1.4.2嵌入式系统的发展趋势 1.5本章小结 第2章RISC-V处理器架构 2.1RISC-V架构简介 2.1.1RISC-V架构的发展及推广 2.1.2RISC-V架构特点 2.1.3RISC-V架构处理器芯片 2.2RISC-V寄存器 2.2.1通用寄存器 2.2.2控制与状态寄存器 2.2.3程序指针寄存器PC 2.3RISC-V权限模式 2.4RISC-V指令集 2.4.1RISC-V指令编码格式 2.4.2RISC-V指令长度编码 2.4.3RISC-V寻址方式 2.4.4RV32I指令简介 2.5RISC-V异常与中断 2.5.1同步异常和异步异常 2.5.2RV32权限模式和异常 2.5.3机器模式异常相关的CSR寄存器 2.5.4异常与中断响应过程 2.6本章小结 第3章昉·星光 2(VisionFive 2)RISC-V单板计算机 3.1JH-7110(昉·惊鸿-7110)处理器 3.1.1JH-7110处理器简介 3.1.2JH-7110处理器内部各模块介绍 3.1.3JH-7110处理器地址映射 3.2VisionFive 2 RISC-V单板计算机简介 3.2.1VisionFive 2 RISC-V单板计算机组成 3.2.2VisionFive 2 RISC-V单板计算机外设 3.3快速使用 VisionFive 2 RISC-V单板计算机 3.3.1将操作系统烧录到Micro-SD卡上并扩展分区 3.3.2更新SPL和U-Boot 3.4本章小结 第4章Linux基础 4.1Linux和Shell 4.2常见Linux发行版本 4.3Linux文件管理 4.3.1查看文件 4.3.2元字符 4.3.3隐藏文件 4.3.4查看文件内容 4.3.5统计单词数目 4.3.6复制文件 4.3.7重命名文件 4.3.8删除文件 4.4Linux目录 4.4.1主目录 4.4.2绝对路径和相对路径 4.4.3创建目录 4.4.4删除目录 4.4.5改变所在目录 4.4.6重命名目录 4.5Linux文件权限和访问模式 4.5.1查看文件权限 4.5.2文件访问模式 4.5.3目录访问模式 4.5.4改变权限 4.5.5更改所有者和用户组 4.6Linux环境变量 4.6.1.profile文件 4.6.2设置终端类型 4.6.3设置PATH变量 4.6.4设置命令提示符 4.6.5常用环境变量 4.7Linux yum 和Linux apt 软件包管理器 4.7.1Linux yum软件包管理器 4.7.2Linux apt 软件包管理器 4.8Linux常用服务 4.8.1Linux磁盘管理 4.8.2SSH服务 4.8.3minicom 4.9本章小结 第5章Linux内核 5.1Linux内核概述 5.1.1GNU/Linux的基本体系结构 5.1.2Linux内核版本及特点 5.1.3Linux内核的主要架构及功能 5.1.4Linux内核源码目录结构 5.2Linux进程管理 5.2.1进程的表示和切换 5.2.2进程、线程和内核线程 5.2.3进程描述符task_struct的几个特殊字段 5.2.4kernel_clone函数 5.2.5进程的创建 5.2.6线程和内核线程的创建 5.2.7进程的执行——exec函数族 5.2.8进程的终止 5.2.9进程的调度 5.3Linux内存管理 5.3.1Linux内存管理概述 5.3.2Linux虚拟存储空间及分布 5.3.3进程空间描述 5.3.4物理内存管理(页管理) 5.3.5基于Slab分配器的管理技术 5.3.6内核非连续内存分配(vmalloc) 5.3.7页面回收简述 5.4Linux模块 5.4.1LKM 的编写和编译 5.4.2LKM的内核表示 5.4.3模块的加载与卸载 5.4.4模块主要命令 5.5Linux中断管理 5.5.1Linux中断的一些基本概念 5.5.2通用中断子系统 5.5.3主要数据结构 5.6本章小结 第6章Linux文件系统 6.1Linux文件系统概述 6.2Ext2/Ext3/Ext4文件系统 6.3嵌入式文件系统 6.3.1嵌入式文件系统概述 6.3.2JFFS2嵌入式文件系统 6.4ramfs和ramdisk文件系统 6.4.1ramfs 6.4.2ramdisk文件系统 6.5根文件系统 6.5.1根文件系统概述 6.5.2根文件系统的制作工具——Busybox 6.5.3制作根文件系统 6.6本章小结 第7章嵌入式Linux系统移植 7.1BootLoader基础 7.1.1BootLoader基本概念 7.1.2BootLoader的操作模式 7.1.3BootLoader的典型结构 7.1.4常见的BootLoader 7.1.5U-Boot概述 7.1.6RISC-V架构的 U-Boot 引导过程 7.1.7U-Boot环境变量 7.1.8U-Boot命令 7.1.9U-Boot对设备树的支持 7.2JH-7110的启动流程分析 7.2.1启动模式设置 7.2.2启动资源 7.2.3BootROM 7.2.4SPL 7.2.5OpenSBI 7.2.6U-Boot 7.3JH-7110的U-Boot编程基础知识 7.3.1配置 7.3.2接口描述 7.3.3调试方法 7.4交叉开发环境与交叉编译工具链 7.4.1主机与目标机的连接方式和文件传输方式 7.4.2交叉编译环境的建立 7.4.3交叉编译工具链概述 7.4.4交叉编译工具链的主要工具 7.4.5RISC-V gcc工具链 7.4.6Makefile基础 7.4.7clang与LLVM 7.5嵌入式RISC-V Linux系统移植过程 7.5.1BootLoader移植 7.5.2内核的配置、编译和移植 7.6本章小结 第8章设备驱动程序设计 8.1设备驱动程序开发概述 8.1.1Linux 设备驱动程序分类 8.1.2驱动程序的处理过程 8.1.3设备驱动程序框架 8.1.4驱动程序的加载 8.2内核设备模型 8.2.1设备模型功能 8.2.2sysfs概述 8.2.3sysfs的实现机制kobject 8.2.4设备模型的组织——platform总线 8.3设备树 8.4GPIO设计案例 8.4.1GPIO概述 8.4.2配置 8.4.3接口描述 8.4.4示例 8.5I2C总线设计案例 8.5.1I2C总线介绍 8.5.2I2C驱动程序框架 8.5.3配置 8.5.4接口描述 8.5.5通用示例 8.6SPI设计案例 8.6.1配置 8.6.2SPI驱动程序框架 8.6.3接口描述 8.6.4示例 8.7UART设计案例 8.7.1简介 8.7.2配置 8.7.3接口描述 8.7.4UART示例 8.8本章小结 第9章VisionFive 2单板机开发案例 9.1Python驱动蜂鸣器案例 9.1.1连接硬件 9.1.2执行演示代码 9.1.3程序源码 9.2Python开发温湿度监测系统案例 9.2.1连接硬件 9.2.2执行演示代码 9.2.3程序源码 9.3Python驱动LCD屏显案例 9.3.1连接硬件 9.3.2执行演示代码 9.3.3程序源码 9.4Python读取GPS数据案例 9.4.1连接硬件 9.4.2执行演示代码 9.4.3程序源码 9.5本章小结 参考文献