迅为电子重磅发布新教程——《iTOP-RK3568开发板C应用编程手册》
本教程为RK3568开发板的教程系列手册,旨在帮助用户对于应用编程进行入门学习,适用于 Linux 应用编程初学者。
系统编程指的是在Linux操作系统下对应用程序进行的编程,也叫做应用编程,编写好的应用程序运行在Linux操作系统的用户空间,通过直接或间接的调用系统调用 API 完成相应的功能和逻辑。Linux系统的整体结构如下图所示:
手册将根据上述结构对Linux系统编程的各个部分进行详细的讲解。
教程亮点
1.内容更全面470+页文档、15W+字数、100+配套代码 讲解更细致,理解更清晰
2.设置更科学:前16章为基础知识部分,会对系统编程的知识点进行分类讲解,在讲解之后会有着对应的实验,而17-27章为实际应用部分,对系统编程基础知识和开发板软件部分进行了整合,可以巩固我们学到的知识,为本手册的重点。
适用人群
本手册的面向对象为C应用编程初学者,但仍旧需要读者有C语言基础并且熟悉Linux基本操作。其中C语言基础在网络上相关的教程已经有很多了,大家可以自行学习,而Linux基本操作大家可以参考迅为在bilibili的视频和对应的手册进行学习。
教程目录
第1章 你好!系统编程
1.1什么是系统编程?
1.2内核空间和用户空间
1.2.1 为什么区分内核空间和用户空间
1.2.2 内核态和用户态
1.3系统调用
1.4 C语言库函数
1.5 main函数形参
第2章 文件IO
2.1文件描述符
2.2 打开文件
2.3 关闭文件
2.4 读文件
2.5 写文件
2.6 lseek
2.7综合练习(一)
第3章 标准IO
3.1 FILE指针
3.2 打开文件
3.3 关闭文件
3.4 读文件
3.5 写文件
3.6 fseek
3.7检查和复位状态
第4章 目录IO和文件属性
4.1 创建目录
4.2 打开和关闭目录
4.3 读取目录内容
4.4 综合练习(二)
4.5 获取文件属性
4.6 检查文件权限
4.7 修改文件权限
4.8 软链接与硬链接
4.8.1 创建硬链接
4.8.2 创建软链接
4.8.3 读取软链接文件
4.9 文件删除
4.9.1 删除文件(系统调用)
4.9.2 删除文件(C库函数)
4.10 文件重命名
第5章 缓冲IO
5.1 内核缓冲
5.2 stdio缓冲
5.2.1设置缓冲区
5.2.2 刷新stdio缓冲区
5.3 刷新内核缓冲区
5.4 绕过内核缓冲
5.5 缓冲IO总结
第6章 字符串操作
6.1 字符串输入/输出
6.1.1字符串输出
6.1.2字符串输入
6.2 获取字符串长度
6.3 字符串拼接
6.4 字符串拷贝
6.5 内存填充
6.6 字符串比较
6.7 字符串查找
6.8 字符串类型转换
6.8.1字符串转整型
6.8.2字符串转浮点型
第7章 格式化IO
7.1 格式化输出
7.2 输出格式控制字符串
7.3 格式化输入
7.4 输入格式控制字符串
第8章 进程基础
8.1 进程和程序
8.2 进程号
8.3 获取进程PID
8.3.1 获取进程PID
8.3.2 获取父进程PID
8.4 进程的环境变量
8.4.1 获取环境变量
8.4.2 添加环境变量
8.4.3 修改环境变量
8.4.4 删除环境变量
8.4.5 清空环境变量
8.5进程内存布局
第9章 信号基础
9.1 什么是信号?
9.2 信号的处理
9.3 信号类型和默认行为
9.4 进程对信号的处理
9.5 向进程发送信号
9.5.1 向指定进程发送信号
9.5.2 向自身发送信号
9.5.3 定时信号
9.5.4 休眠信号
第10章 进程深入
10.1创建进程
10.1.1 创建进程(fork)
10.1.2 创建进程(vfork)
10.2终止进程
10.3监视子进程
10.3.1僵尸进程与孤儿进程
10.3.2子进程资源回收(wait)
10.3.3子进程资源回收(waitpid)
10.3.4 SIGCHLD 信号
10.4执行新程序
10.4.1 execve()函数
10.4.2 exec族函数
10.4.3 system()函数
10.5守护进程
10.5.1什么是守护进程
10.5.2创建守护进程
第11章 进程间通信
11.1 进程间通信简介
11.2 管道
11.2.1 无名管道
11.2.2 有名管道
11.3 消息队列
11.4 信号量
11.5 共享内存
第12章 线程
12.1 什么是线程?
12.2 创建线程
12.3 获取线程ID
12.4 终止线程
12.5 回收线程
12.6 取消线程
12.7 分离线程
第13章 线程同步-互斥锁
13.1 什么是线程同步?
13.2 互斥锁的概念
13.3 互斥锁初始化
13.3.1 动态初始化
13.3.2 静态初始化
13.4 获取互斥锁(1)
13.5 释放互斥锁
13.6 获取互斥锁(2)
13.7 销毁互斥锁
13.8 互斥锁死锁
第14章 存储映射 I/O
14.1 建立映射区
14.2 解除映射关系
14.3 映射区数据同步
14.4 父子进程间通信
14.5 无血缘关系进程间通信
第15章 库和伪文件系统
15.1 静态库
15.1.1什么是静态库?
15.1.2静态库的制作与使用
15.2 动态库
15.2.1什么是动态库?
15.2.2动态库的制作与使用
15.3 procfs文件系统
15.4 sysfs文件系统
第16章 阻塞与IO多路复用
16.1 阻塞与非阻塞
16.1.1阻塞与非阻塞的概念
16.1.2阻塞/非阻塞I/O读文件
16.1.3 fcntl函数
16.1.4非阻塞I/O并发读取
16.2 I/O多路复用
16.2.1 IO多路复用的概念
16.2.2 select函数
16.2.3 poll函数
第17章 环境设置和文件系统说明
17.1 开发板使用文件系统的说明
17.2设 置交叉编译器
17.3 nfs实现共享目录
17.3.1搭建NFS服务器
17.3.2 NFS共享目录使用
第18章 LED应用编程
18.1 应用层操控硬件的两种方式
18.2 LED硬件控制方式
18.3 编写LED应用程序
18.4 开发板测试
第19章 GPIO应用编程
19.1应用层如何操控GPIO
19.2 GPIO输出应用编程
19.2.1编写应用程序
19.2.2开发板测试
19.3 GPIO输入应用编程
19.3.1编写应用程序
19.3.2开发板测试
19.4 GPIO输入中断编程
19.4.1编写应用程序
19.4.2开发板测试
第20章 看门狗应用编程
20.1看门狗介绍
20.2 ioctl函数
20.3看门狗应用编程介绍
20.3.1获取设备功能
20.3.2获取超时时间
20.3.3设置超时时间
20.3.4开启和关闭看门狗
20.3.5喂狗操作
20.4看门狗实验
20.4.1编写应用程序
20.4.2开发板测试
第21章 串口应用编程
21.1串口介绍
21.2串口设备节点介绍
21.3 struct termios结构体
21.3.1输入模式
21.3.2输出模式
21.3.3控制模式
21.3.4本地模式
21.3.5特殊控制字符
21.4 终端的三种工作模式
21.4.1规范模式
21.4.2非规范模式
21.4.3原始模式
21.5 配置参数的获取
21.6 对串口终端进行配置
21.6.1配置串口终端为原始模式
21.6.2接收使能
21.6.3设置串口的波特率
21.6.4设置数据位大小
21.6.5设置奇偶校验位
21.6.6设置停止位
21.6.7设置 MIN 和 TIME
21.6.8缓冲区的处理
21.6.9配置的写入
21.7 串口实验
21.7.1编写应用程序
21.7.2开发板测试
第22章 PWM应用编程
22.1什么是PWM?
22.2应用层操控PWM
22.3 PWM应用编程
22.3.1编写应用程序
22.3.2开发板测试
第23章 输入设备应用编程
23.1输入类设备编程介绍
23.1.1什么是输入设备?
23.1.2 input子系统
23.1.3读取数据的流程
23.1.4数据的解析
23.2键盘按键应用编程
23.2.1编写按键输入应用程序
23.2.2开发板测试
23.2.3编写键盘输入应用程序
23.2.4开发板测试
23.3触摸屏应用编程
23.3.1 触摸设备的讲解
23.3.2 单点触摸和多点触摸
23.3.3 事件上报的顺序
23.3.4触摸屏上报数据分析
23.3.5获取触摸屏的信息
23.3.6单点触摸应用实验
23.3.7多点触摸应用实验
第24章 FrameBuffer应用编程
24.1什么是FrameBuffer?
24.2 LCD基础知识
24.2.1分辨率
24.2.2像素格式
24.2.3 LCD成像步骤
24.2.4 LCD屏幕时序
24.3 LCD应用编程介绍
24.3.1 FrameBuffer操作步骤
24.3.2屏幕参数信息的获取
24.4 LCD应用编程实验
24.4.1 LCD屏幕参数信息获取实验
24.4.2 LCD屏幕画线实验
第25章V4L2摄像头应用编程
25.1 什么是V4L2?
25.2 V4L2视频采集原理
25.3 V4L2 摄像头应用编程介绍
25.3.1 V4L2视频采集步骤
25.3.2 ioctl参数介绍
25.3.3 v4l2设备操作流程
25.4 V4L2摄像头应用编程实验
第26章 网络基础知识学习
26.1协议的概念
26.2 OSI 7层网络模型
26.2.1 OSI的来源
26.2.2 OSI七层模型的划分
26.2.3各层功能定义
26.3 TCP/IP四层模型
26.4数据的封装与解封装
26.4.1数据封装过程
26.4.2数据解封装过程
26.5常用网络术语
26.5.1 IP地址
26.5.2子网掩码
26.5.3网关
26.5.4广播地址
26.5.5路由(route)
26.5.6路由器工作原理
26.5.7路由表(Routing Table)
26.5.8路由条目
26.5.9缺省路由条目
26.5.10路由节点
26.5.11以太网交换机工作原理
26.5.12 hub工作原理
26.5.13半双工/全双工
26.5.14 DNS服务器
26.5.15局域网(LAN)
26.5.16广域网(WAN)
26.5.17端口
26.5.18 MTU
26.6典型协议
26.7 TCP协议
26.7.1 TCP协议简介
26.7.2 TCP协议的特性
26.7.3 TCP报文格式
26.7.4 建立TCP连接:三次握手
26.7.5 关闭TCP连接:四次挥手
26.7.6 TCP状态说明
26.8 UDP协议
第27章 socket 应用编程
27.1什么是socket?
27.2网络字节序
27.3 IP地址转换函数
27.3.1 二进制转换为十进制
27.3.2 十进制转换为二进制
27.4 socket编程接口介绍
27.4.1打开网络端点
27.4.2 IP和端口号的绑定
27.4.3进入监听状态
27.4.4等待连接请求
27.4.5连接服务器
27.4.6数据的发送和接收
27.4.7关闭套接字
27.5 socket编程实验
27.5.1编写服务端程序
27.5.2编写客户端程序
27.5.3测试
关注“迅为电子”微信公众号,不定期分享教程、资料和行业干货及产品一线资料。