测试A学习顺序

现在可以把来源标清楚了。先说关键结论:

你现有的"正点原子Linux第1~4期"和购买课程,基本能覆盖测试A的驱动部分;但两套目录里都没有系统讲解TCP Socket客户端/服务器。第二步需要额外看正点原子官方的"嵌入式Linux C应用编程",它是独立课程,不属于传统第1~4期。

也就是说,不是你没找到,而是课程体系本来就把"Linux应用编程"和"Linux驱动"分开了。正点原子官方资料也分别列出Linux C应用指南和Linux驱动指南。官方资料说明

第一步:环境和Linux基本操作

主要看:正点原子第一期

课程名称:

第一期 手把手教你学Linux之Ubuntu入门篇

建议观看:

  • 第1~5讲:电脑、VMware、Ubuntu和USB设备
  • 第6.1~6.2讲:终端和Shell命令
  • 第7讲:软件安装
  • 第8讲:Linux文件系统
  • 第10讲:压缩和解压
  • 第11~13讲:用户、权限和链接
  • 第14讲:Vim
  • 第15讲:Linux C编程
  • 第16~17讲:Make与Makefile
  • 第18~19讲:Shell脚本

如果你的Ubuntu已经装好,第1~5讲可以快速浏览。正点原子第一期共20集,公开目录包含上述内容。第一期课程

实际操作看:购买课程第1份

正式课程目录 (1).json

观看路径:

text 复制代码
前置环境准备
└─ 环境搭建jetson
   ├─ 虚拟机
   ├─ 刷整机
   ├─ SDK编译烧写
   ├─ 网络通讯
   └─ 内核开发调试
      ├─ 应用层调试内核
      ├─ 内核模块调试
      └─ 设备树调试

第一步的达标任务:

  • Ubuntu能够正常编译C程序;
  • Ubuntu能连接Jetson Nano;
  • 能向Jetson传输文件;
  • 能在Jetson运行交叉编译出来的程序;
  • 能看到串口或SSH终端;
  • 能找到Jetson内核源码、设备树和模块编译环境。

第二步:Linux应用编程

测试A需要两部分:文件IO与多线程、TCP Socket。

2.1 文件IO和多线程:看购买课程第3份

正式课程目录 (3).json

文件IO

观看路径:

text 复制代码
驱动初级
└─ 阻塞非阻塞 同步异步
   ├─ 溯源
   │  └─ 并发与文件IO
   └─ 文件IO
      ├─ 标准输入输出
      ├─ 阻塞读
      └─ 非阻塞读
多线程

观看路径:

text 复制代码
驱动初级
└─ 并发控制
   └─ 多线程
      ├─ 最简多线程
      ├─ 互斥锁
      │  ├─ 最简
      │  ├─ 多线程抢票
      │  └─ 线程安全
      ├─ 信号量
      ├─ 自旋锁
      └─ 读写锁

为了完成测试A,优先看:

  • 最简多线程
  • 互斥锁最简
  • 多线程抢票
  • 线程安全
  • 信号量

用户态测试暂时不需要深入自旋锁和读写锁。

2.2 TCP Socket:现有1~4期没有完整覆盖

购买课程只有:

text 复制代码
驱动高级
└─ 网络通讯
   ├─ 流媒体
   ├─ 网络协议
   ├─ 抓包分析
   ├─ Linux网络框架
   └─ 网卡驱动

这部分偏网络原理和网卡驱动,不等于测试A需要的Socket客户端/服务器编程。

正点原子传统1~4期也没有系统讲TCP多线程服务器,所以需要增加一门免费的官方内容:

正点原子 嵌入式Linux C应用编程

正点原子Linux C应用编程

只需要学习其中:

  • 文件IO基础
  • Linux线程
  • 线程同步
  • 网络基础
  • Socket编程
  • TCP客户端
  • TCP服务器

如果B站这套视频的网络部分不完整,就配合正点原子官方的《Linux C应用编程指南》学习。官方手册明确覆盖文件IO、进程、线程和线程同步。Linux C应用编程手册

这一阶段只需要掌握以下函数:

c 复制代码
// 线程
pthread_create();
pthread_join();
pthread_detach();
pthread_mutex_init();
pthread_mutex_lock();
pthread_mutex_unlock();

// TCP服务器
socket();
bind();
listen();
accept();
recv();
send();
close();

// TCP客户端
socket();
connect();
send();
recv();
close();

第二步的练习顺序:

  1. 一个客户端连接一个服务器;
  2. 客户端向服务器发送字符串;
  3. 服务器回复字符串;
  4. 三个客户端同时连接;
  5. 每次accept()成功后创建一个线程;
  6. 每个线程独立处理一个客户端;
  7. 客户端断开后,线程释放资源。

这一步暂时完全不接GPIO、I²C和SPI。


第三步:驱动公共基础和GPIO

主要看:购买课程第3份

顺序必须这样看:

text 复制代码
驱动初级
├─ 内核模块
├─ 字符设备
├─ 平台设备
│  ├─ 最简
│  ├─ 改造字符设备成平台设备
│  ├─ 控制GPIO通用化
│  ├─ 设备树自定义属性
│  ├─ GPIO子系统
│  └─ 管脚控制子系统

具体重点:

内核模块

学习:

  • 模块入口和出口
  • 模块编译
  • insmod
  • rmmod
  • lsmod
  • dmesg
  • printk
字符设备

学习:

  • 设备号
  • cdev
  • file_operations
  • open
  • read
  • write
  • release
  • 创建设备节点
  • 用户应用通过/dev/xxx访问驱动
platform和设备树

学习:

  • platform device与platform driver
  • compatible
  • probe
  • remove
  • 设备树节点
  • 驱动与设备的匹配过程
  • 从设备树获取GPIO资源
GPIO

购买课程的准确路径:

text 复制代码
驱动初级
└─ 平台设备
   └─ GPIO子系统
      ├─ GPIO驱动
      ├─ GPIO库
      ├─ GPIO设备树
      ├─ GPIO芯片驱动
      └─ 点多个灯

辅助看:正点原子第四期

按照章节名称看:

  • Linux驱动开发与裸机开发区别
  • 字符设备驱动基础
  • 第一个Linux驱动
  • Linux LED灯驱动
  • Linux新字符设备驱动
  • Linux设备树
  • GPIO LED驱动
  • platform驱动

不用同时把两套全部看一遍。建议:

  1. 先看正点原子,快速理解基本框架;
  2. 再看购买课程,理解Jetson适配和更完整的驱动模型;
  3. 最终只在Jetson Nano上动手。

第三步达标任务:

  • 写一个GPIO字符设备驱动;
  • 生成/dev/gpio_test
  • 用户程序向设备写入1点灯;
  • 写入0灭灯;
  • 加载、卸载和重复测试无异常。

第四步:I²C和SPI驱动

4.1 I²C:主要看购买课程

路径:

text 复制代码
驱动初级
└─ I2C设备
   ├─ 框架源码
   │  ├─ 设备树帮助文档
   │  ├─ 设备树
   │  └─ I2C总线驱动
   ├─ 陀螺仪MPU6050
   ├─ OLED屏控制
   └─ 小车马达控制

测试A不必把所有案例都做完。推荐选一个真实I²C器件,例如MPU6050。

学习重点:

  • i2c_driver
  • i2c_client
  • probe
  • remove
  • 设备树
  • 从机地址
  • i2c_transfer
  • 寄存器读写
  • 用户态测试程序

辅助参考正点原子第四期第22章:

  • 第22.1讲:I²C适配器驱动框架
  • 第22.2讲:I²C设备驱动框架
  • 第22.3~22.6讲:AP3216C驱动与测试

4.2 SPI:看正点原子第四期

你买的四份课程目录中没有SPI专题,所以SPI主要使用正点原子第四期第23章:

  • 第23.1讲:SPI控制器驱动详解上
  • 第23.2讲:SPI控制器驱动详解下
  • 第23.3讲:SPI设备驱动框架与设备树
  • 第23.4讲:ICM20608驱动框架
  • 第23.5讲:寄存器读写
  • 第23.6讲:驱动完善和测试APP
  • 第23.7讲:片选引脚勘误

正点原子第四期

学习重点:

  • spi_driver
  • spi_device
  • probe
  • remove
  • spi_message
  • spi_transfer
  • spi_sync
  • SPI模式
  • 速率
  • 片选
  • 设备树

注意:课程使用i.MX6ULL,最后必须将设备树和硬件适配改成Jetson Nano版本。

第四步达标任务:

  • I²C驱动能够读写一个实际器件;
  • SPI驱动能够读写一个实际器件;
  • 分别提供/dev/i2c_test/dev/spi_test
  • 本地测试程序可以稳定访问。

第五步:整合测试A

这一部分没有对应视频,需要将前四步代码组合起来。

第一轮:只做TCP

text 复制代码
Client 1 ─┐
Client 2 ─┼─→ Jetson TCP Server
Client 3 ─┘

三个客户端能同时连接、通信和退出。

第二轮:只做驱动

在Jetson本机执行:

text 复制代码
gpio_test_app → /dev/gpio_test
i2c_test_app  → /dev/i2c_test
spi_test_app  → /dev/spi_test

三个驱动分别运行正常。

第三轮:网络控制驱动

服务器收到命令后操作设备文件:

text 复制代码
LED_ON
LED_OFF
I2C_READ
I2C_WRITE
SPI_READ
SPI_WRITE

建议统一协议:

text 复制代码
设备类型 命令 参数

例如:

text 复制代码
GPIO WRITE 1
I2C READ 0x75
SPI READ 0x00

第四轮:整理交付物

至少保留:

  • 客户端源码
  • 服务器源码
  • 三个驱动源码
  • 设备树修改
  • Makefile
  • 编译过程
  • 加载和卸载步骤
  • 测试截图
  • dmesg日志
  • 问题及解决记录

最终学习来源总表

步骤 主要来源 具体内容
1 环境基础 正点第一期 命令、Vim、GCC、Makefile
1 Jetson环境 买课第1份 Jetson、SDK、串口、网络、内核和设备树调试
2 文件IO 买课第3份 阻塞非阻塞 → 文件IO
2 多线程 买课第3份 并发控制 → 多线程
2 TCP Socket 正点官方Linux C应用编程 客户端、服务器、多线程网络通信
3 驱动基础 买课第3份 模块、字符设备、platform、GPIO
3 辅助理解 正点第四期前半部分 字符设备、LED、设备树、platform
4 I²C 买课第3份 I²C设备章节
4 SPI 正点第四期第23章 SPI框架、设备树、ICM20608
5 综合联调 自己完成 TCP多线程与三个设备驱动整合

所以你现在的开课顺序是:

text 复制代码
正点第一期必要部分
→ 买课第1份Jetson环境
→ 买课第3份文件IO和多线程
→ 补正点Linux C应用编程中的TCP Socket
→ 买课第3份内核模块、字符设备、platform、GPIO
→ 买课第3份I²C
→ 正点第四期第23章SPI
→ 完成测试A

其中最容易误解的一点是:正点原子传统第1~4期不等于完整Linux应用编程课程。测试A中的TCP多线程,需要另外补正点原子的Linux C应用编程内容。

相关推荐
传奇开心果编程1 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
迪丽热爱1 小时前
多媒体应用16-830(补)
学习
潜心一志3 小时前
HALCON软件——基础语法
学习·计算机视觉
babe小鑫3 小时前
信息与计算科学专业应届生面试 怎么证明自己能解决业务问题
学习·r语言·excel
天国梦4 小时前
实测天学网AI作文批改:三篇作文,语法纠错与语篇逻辑的真实表现
人工智能·学习
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(75):TiMem——用时间记忆树实现长期记忆的层级巩固
论文阅读·人工智能·学习·开源·github
外收内放4 小时前
Python与AI应用(项目开发实战:AI智能伴侣第三版)
python·学习·ai编程
pddqjd5 小时前
顺德区中考美术集训画室概念释义与核心服务要点梳理
学习
传奇开心果编程5 小时前
【Jetpack Compose基础语法学与练】第7课 if条件渲染 + 列表基础(LazyColumn)
学习·ui·kotlin·android jetpack