
王利涛嵌入式工程师自我修养系列视频教程
来自 网络整理·免费领取学习资源
5,477 领取 · 7,331 收藏更新于 2026年9月20日
这份资料来自网络整理2026年的付费VIP课,内容以视频为主,对应《王利涛嵌入式工程师自我修养系列视频教程》。官网需要单独购买,有集上可以免费领取。
课程包含四个专题:
Linux内核编程,Linux系统编程,Linux高级编程,Linux三剑客
网盘截图:
课程目录
- 王利涛-linux 三剑客
- 零基础玩转Linux+Ubuntu
- 3.6 源码软件包的编译、安装、卸载
- 1.2 Linux和Ubuntu的关系
- 2.5 Make工程管理
- 4.4 FTP服务器配置及使用
- 3.9 使用wine安装Windows应用软件
- 3.7 制作自己的deb软件安装包
- 3.3 用户账户管理
- 2.3 shell脚本入门
- 2.1 linux基本命令使用
- 4.3 SSH远程登录
- 3.2 文件系统管理
- 1.3 ubuntu16.04安装以及新特性介绍
- 1.1 课程简介及Linux学习路线介绍
- 3.5 进程管理
- 3.4 文件访问权限
- 3.1 什么是环境变量
- 2.4 vi及vim入门
- 2.2 Linux高级命令简单使用
- 4.1 NFS服务器配置及使用
- 4.2 Samba服务器配置及使用
- 1.4 X-window和桌面环境KDE、GNOME
- 3.8 使用apt安装卸载软件
- vim从入门到精通-第2季
- 0.vim演示视频
- 14.保存会话信息
- 5.使用taglist显示函数、宏、结构体列表
- 12.C文件和头文件快速切换
- 1.vim配置与配置文件
- 10.C语言插件的使用
- 11.Supertab插件
- 8.使用quickfix显示错误列表和跳转
- 13.书签的使用
- 15.小结与作业
- 7.cscope查找工具的使用
- 6.使用Winmanager插件显示文件列表窗口
- 3.vim脚本语法
- 2.按键映射
- 9.添加注释
- 4.在函数、变量、宏之间来回跳转
- Linux三剑客配套代码PPT
- 嵌入式软件调试
- 专题1:软件调试理论基础
- 4.debug文件和release文件的区别
- 7.JTAG和Jlink调试原理及区别
- 1.软件调试基础
- 2.常用的软件调试方法
- 5.断点和单步是怎么实现的?
- 6.仿真器调试原理
- 3.常见的错误类型
- 专题3:Linux内核日志打印技巧
- 嵌入式软件调试专题(3)源代码
- 2
- hello.c
- Makefile
- 5
- hello.c
- Makefile
- 7
- hello.c
- Makefile
- 9
- dump.c
- 8
- app
- chardev_app.c
- test
- vim.txt
- hello.c
- hello.log
- driver
- Makefile
- char.c
- 1
- arm-driver
- Makefile
- hello.c
- x86-driver
- Makefile
- hello.c
- console.sh
- 10
- my-proc-test
- Makefile
- my_proc.c
- my-proc
- Makefile
- my_proc.c
- 6
- Makefile
- hello.c
- 10.使用proc与内核进行交互
- 9.内核转储
- 8.strace命令
- 2.printk打印数据格式与打印等级
- 4.printk实现机制分析(二):内核实现与日志系统
- 3.printk实现机制分析(一):控制台、终端和串口之间的关系
- 5.printk实现机制分析(三):printk打印配置
- 1.实验环境介绍
- 7.动态调试
- 6.打印函数调用栈
- 专题2:printf函数打印高阶技巧
- 5.打印等级控制
- 1.输出重定向
- 4.打印开关控制
- 2.打印文件名、函数名、行号
- 3.打印缓冲问题
- Makefile工程实践(第2季)
- chap5 头文件管理及路径指定
- chap10 软件打包测试及发布
- chap3 使用Autotools宏和变量配置flat项目
- chap2 Autotools发展史
- chap8 使用第三方静态库和动态库
- chap9 deep目录结构的makefile及库的多目录构建
- chap1 什么是Autotools、automake、Autoconf
- chap4 shallow目录结构的makefile
- chap7 使用libtool构建动态链接库
- chap6 构建目标文件
- vim从入门到精通
- vim从入门到精通-第2季
- vim从入门到精通(第2季)-插件定制
- 零基础玩转Linux+Ubuntu
- Linux发行版之间的关系
- Git零基础实战
- 使用QEMU搭建u-boot+linux+NFS开发环境
- 课程PPT&代码
- Makefile工程实践
- Makefile_lesson_code.tar
- Makefile工程实践
- C语言实战之学生成绩管理系统
- 8.编码(2)之数据存储模块
- 12.编码(6)之成绩统计
- 6.详细设计
- 14.代码优化及测试流程
- 2.软件开发基本流程
- 5. 概要设计
- 9.编码(3)之成绩添加、成绩删除
- 3.可行性分析及项目开发计划
- 4.需求分析
- 7.编码(1)之工程创建、成绩打印
- 15.安装安装包制作及发布
- 1.课程及项目简介
- 13.编码(7)之人机交互菜单和模块集成
- 10.编码(4)之成绩查询
- 11.编码(5)之成绩修改
- C语言那些事儿
- 11-1 结构体的基本概念
- 5-7 条件运算符
- 12-6 其它预处理命令
- 1-5 C语言为什么这么难学?
- 5-1 运算符与表达式
- 7-1 结构化程序设计和流程图
- 5-2 算术运算符
- 5-4 关系运算符
- 10-6 指向字符串的指针
- 8-3 函数的嵌套与递归
- 5-8 逗号表达式
- 2-5 程序到底是怎么运行的?
- 11-6 枚举
- 9-2 二维数组
- 11-9 复合字面量
- 9-1 数组的基本概念
- 9-4 字符串处理函数
- 11-8 结构体成员为柔性数组(C99)
- 5-6 位逻辑运算符
- 8-8 多个C源文件组织方式
- 10-4 指向二维数组的指针
- 8-2 函数的参数
- 8-4 变量的作用域
- 9-5 数组作为函数的参数
- 8-10 内联函数
- 12-3 一些预定义的宏
- 5-5 逻辑运算符
- 1-2 学习C语言的重要性
- 5-3 赋值运算符
- 10-7 指向指针的指针
- 6-2 格式输入函数scanf
- 4-6 复数类型_Complex(C99)
- 10-5 指针数组
- 11-3 指向结构体的指针
- 10-12 restrict关键字修饰指针
- 14-3 文件的读写函数
- 7-4 循环结构程序设计
- 14-4 文件状态监测函数
- 10-1 指针的基本概念
- 9-3 字符数组与字符串
- 3-6 程序调试技巧
- 6-3 字符输入输出函数
- 12-1 预处理的基本概念
- 2-4 可执行程序是怎么生成的?
- 9-6 变长数组
- 10-9 函数指针
- 3-1 hello world程序分析
- 2-7 制作自己的第一个程序安装包
- 4-3 浮点型数据
- 3-2 标识符与关键字
- 7-3 选择程序设计
- 4-2 字符型数据
- 10-8 指向函数的指针
- 1-3 C语言及标准的发展过程
- 13-3 内存泄露与野指针
- 3-4 二进制计数制及和其它进制转换
- 14-2 文件的打开与关闭
- 14-5 文件的随机读写
- 7-2 顺序程序设计
- 1-1 你真的了解C语言吗
- 5-9 C语言的序列点(C99)
- 4-1 整型类型数据
- 13-2 动态内存申请函数
- 3-5 数据在内存中的表示
- 2-2 计算机基本原理介绍
- 8-12 开发自己的函数库
- 10-11 指针数组作为main函数参数
- 8-6 变量的存储类型
- 2-3 计算机编程语言的发展
- 2-6 程序安装原理及过程分析
- 14-1 文件的基本概念
- 11-5 共用体
- 13-1 动态内存管理
- 8-9 内部函数与外部函数
- 6-5 printf家族其它函数
- 4-5 布尔类型_Bool(C99)
- 10-3 指向数组的指针
- 11-2 结构体数组
- 8-1 函数的基本概念
- 4-4 类型转换
- 8-11 库函数基础
- 10-2 指向变量的指针
- 8-5 变量的链接属性
- 12-2 宏定义
- 11-7 使用typedef定义数据类型
- 12-5 条件编译
- 6-4 字符串输入输出函数
- 8-7 关键字volatile
- 5-10 一些容易出错的优先级
- 12-4 头文件包含
- 1-4 C语言的特点
- 11-4 结构体函数
- 3-3 常量与变量
- 6-1 格式输出函数printf
- 2-1 开发环境安装及使用
- 10-10 const关键字修饰指针
- 嵌入式软件调试
- 专题3:Linux内核日志打印技巧
- 6.打印函数调用栈
- 7.动态调试
- 2.printk打印数据格式与打印等级
- 5.printk实现机制分析(三)--printk打印配置
- 4.printk实现机制分析(二)--内核实现和日志系统
- 8.strace命令
- 1.内核实验环境介绍
- 10.使用proc文件系统与内核交互
- 3.printk实现机制分析(一)--控制台、终端和串口之间的关系
- 9.内核转储
- 专题1:软件调试理论基础
- 6.仿真器调试原理
- 2.常用的软件调试方法
- 3.常见的错误类型
- 1.什么是软件调试?
- 5.断点和单步是怎么实现的?
- 7.JTAG和Jlink调试原理及区别
- 4.debug文件和release文件的区别
- 专题2:printf函数打印高阶技巧(免费)
- 1.输出重定向_片头
- 4.打印开关控制
- 3.打印缓冲问题
- 2.打印文件名、函数名、行号
- 5.打印等级控制
- 1.输出重定向
- Git零基础实战
- 6.1 commit对象与存储
- 6.7 将多个提交合并为一个提交
- 7.1 分支的基本概念
- 3.3 分支和标签简单使用
- 7.10 恢复已删除分支的提交
- 7.6 挑选合并
- 5.2 文件删除
- 7.7 分支衍合
- 4.3 git引用:分支和标签
- 9.1 标签的远程操作
- 6.2 查看提交历史:git log
- 10.5 Git+Repo+Gerrit环境介绍
- 5.5 撤销本地仓库的修改
- 2.1 在Windows下面安装git
- 4.1 Git基本概念:工作区、暂存区和版本库
- 6.9 恢复隐藏的历史
- 3.2 git基本流程介绍
- 5.1 文件管理:文件添加及提交
- 7.2 分支的基本使用
- 5.3 文件重命名
- 1.1 Git简介
- 6.3 提交查找:git grep
- 6.6 给提交重新排序:git rebase
- 7.11 一个脱离了组织的提交:no branch
- 5.4 忽略指定格式的文件
- 6.8 将一个提交分解为多个提交
- 7.5 压合合并提交
- 10.4 搭建本地git服务器
- 10.2 发起一个公开项目
- 5.6 差异比较git diff
- 7.9 分支修改储藏
- 10.1 管理本地文件,防止隐私泄露
- 6.4 提交修改:git revert
- 8.2 使用github代码托管
- 7.4 解决合并冲突
- 8.3 远程仓库的基本操作
- 10.3 发起一个私人项目
- 8.4 远程分支的基本操作
- 6.5 Git置位:git reset
- 8.1 远程仓库的概念
- 7.3 分支的合并
- 4.2 git对象模型:blob、tree、commit
- 2.2 在Linux下安装git
- 7.8 分支合并与衍合的区别
- 8.5 远程分支和本地分支的区别
- 8.6 添加新的远程版本库
- 5.7 压缩仓库
- 3.1 git仓库创建及配置
- vim从入门到精通
- 11.修改的撤销、重做与保存
- 10.文本查找与替换
- 6.文本删除操作
- 1.课程介绍、vim简介及安装
- 5.文本插入操作
- 4.滚屏与跳转
- 7.文本复制、剪切与粘贴
- 15.vim配置与插件介绍
- 8.文本修改与替换
- 9.组合命令使用
- 13.分页与折叠栏
- 3.光标移动
- 12.编辑多个文件
- 14.多窗口操作
- 2.vim工作模式简介
- Makefile工程实践(第2季)
- 9.deep目录结构的makefile、库的多目录构建
- 5.头文件管理、路径指定、对依赖关系的影响
- 6.构建目标文件
- 1.什么是Autotools
- 7.使用libtool构建动态链接库
- 2.Autotools发展史
- 4.shallow目录结构的Makefile
- 3.使用变量、宏生成flat目录Makefile
- 10.软件打包与发布
- 8.使用第三方静态库、动态库
- Makefile工程实践
- 2.6 库的生成和使用:动态库、静态库
- 3.6 使用目录管理头文件
- 2.2 Makefile基本组成单元:规则
- 3.11 重构我们的Makefile
- 3.4 使用目录管理目标文件
- 2.7 Makefile的执行过程
- 2.8 Makefile的隐含规则
- 1.2 程序的编译和链接
- 3.1 构建MP3项目工程
- 3.5 使用目录管理依赖关系文件
- 3.8 支持动态库的生成和使用
- 2.4 条件执行
- 3.10 支持软件的安装与卸载
- 3.7 支持静态库的生成和使用
- 3.3 使用目录管理源文件
- 2.3 变量
- 2.1 Makefile的基本语法
- 3.2 自动添加目标头文件的依赖
- 3.9 支持第三方静态库、动态库的使用
- 2.5 函数
- 1.1 Makefile基本概念
- 使用QEMU搭建u-boot+linux+NFS开发环境
- 1.为什么要使用QEMU学习嵌入式开发
- 3.QEMU安装及仿真开发板介绍
- 4.编译Linux内核镜像和dtb文件
- 7.挂载NFS文件系统
- 2.搭建嵌入式开发基本环境
- 6.使用u-boot引导Linux内核镜像
- 8.完善NFS根文件系统
- 9.在开发板上运行应用和驱动程序
- 5.使用busybo制作根文件系统
- 王利涛-Linux内核编程
- Linux内核编程00:入门篇
- Linux内核编程:入门篇
- 4.3 内核调试
- 4.2 内核模块的编译和运行
- 1.3 学习内核能找什么工作?
- 2.3 掌握科学的学习方法
- 1.1 内核工程师和驱动工程师的区别
- 3.4 交叉编译器的选择(下):Clang
- 3.2 内核版本的选择
- 3.3 交叉编译器的选择(上):GCC
- 2.2 Linux内核驱动开发生态
- 4.1 Linux内核编码风格
- 2.4 需要的理论知识和技能
- 3.1 搭建Linux内核学习平台
- 2.1 Linux内核的学习难点
- 1.2 学习驱动能找什么工作?
- Linux内核编程13:内存管理
- 23 二级页表的创建过程分析(上)
- 17 揭开页表神秘的面纱(上)
- 14 kmalloc机制实现分析
- 34 用户页表的刷新
- 22 低端内存和高端内存的边界划分
- 16 二级页表的工作原理
- 38 文件映射缺页异常
- 04 伙伴系统:buddy system
- 13 slab slob和slub分配器
- 43 反向映射
- 39 设备映射缺页异常
- 30 虚拟内存管理:fixmap区
- 18 揭开页表神秘的面纱(下)
- 41 私有映射和共享映射
- 15 虚拟地址和MMU工作原理
- 36 mmap映射机制:remap_pfn_range
- 11 伙伴系统初始化 三 :.init内存释放
- 21 虚拟内存管理:线性映射区
- 42 系统调用brk实现机制
- 26 虚拟内存管理:vmalloc区
- 29 虚拟内存管理:pkmap区
- 06 Per-CPU页帧缓存
- 33 缺页异常机制
- 37 mmap映射机制:文件映射
- 01 什么是内存管理?
- 40 mmap映射机制:匿名映射
- 05 物理页面的迁移类型:migratetype
- 28 高端内存映射
- 07 页分配器接口:alloc_pages
- 32 用户进程的页表
- 02 内存硬件电路与接口
- 25 二级页表的创建过程分析(下)
- 20 Linux虚拟内存管理
- 24 二级页表的创建过程分析(中)
- 31 虚拟内存管理:modules区
- 35 mmap映射机制:编程实例
- 12 伙伴系统初始化 四 :CMA内存释放
- 08 连续内存分配器:CMA
- 44 Linux内存管理小结
- 09 伙伴系统初始化 一 :memblock管理器
- 10 伙伴系统初始化 二 :memblock内存释放
- 19 TLB 和 Table Walk Unit
- 27 寄存器映射:ioremap
- 03 物理内存管理:page zone和node
- Linux内核编程09:设备模型和sysfs文件系统
- 22 bus probe 和 driver probe
- 26 实现一个总线子系统
- 14 热插拔事件:uevent(下)
- Linux内核编程09期:设备模型流程图
- 19 设备模型:device(下)
- 12 热插拔事件:uevent(上)
- 24 设备模型:class(下)
- 15 用OOP思想分析设备模型
- 11 设备模型基础:kset
- 17 设备模型:bus(下)
- 27 驱动复用:match_table
- 28 设备的热插拔(hotplug)机制分析
- 09 sysfs文件读写过程分析
- 02 设备模型基础:attribute(上)
- 16 设备模型:bus(上)
- 23 设备模型:class(上)
- 25 device的二次抽象
- 08 sysfs文件打开过程分析
- 04 kobject和sysfs的关联
- 10 kobject的生命周期
- 30 从字符驱动到总线驱动(下)
- 13 热插拔事件:uevent(中)
- Linux内核编程09期-代码PPT
- 00 什么是设备模型?
- 21 设备模型:device_driver(下)
- 05 sysfs目录创建过程分析
- 03 设备模型基础:attribute(下)
- 01 设备模型基础:kobject
- 07 VFS inode的生成过程分析
- 20 设备模型:device_driver(上)
- 18 设备模型:device(上)
- 29 从字符驱动到总线驱动(上)
- 31 本期课程小结
- 06 sysfs文件创建过程分析
- Linux内核编程05期:字符设备驱动开发
- 视频配套代码文档
- 05.tar.gz
- 字符设备驱动开发实战.txt
- RTC驱动用户手册
- 01 字符设备驱动开发框架
- 09 设备驱动的私有数据:private_data
- 04 内核源码解读:字符设备的open和read
- 10 实现字符驱动接口:ioctl
- 05 使用cdev接口编写字符驱动
- 03 内核源码解读:字符设备的注册过程
- 13 ioctl接口封装:rtc库函数
- 06 动态申请设备号
- 08 实现字符驱动接口:write
- 00 本期课程规划
- Linux字符设备驱动架构
- 02 编写第一个字符驱动:RTC
- 14 编写用户手册和文档
- 12 让你的驱动更加稳定高效
- 11 ioctl命令编码规范
- 07 自动创建设备节点
- Linux内核编程03:系统调用
- 00 系统调用基本概念及本期课程内容
- 10 虚拟动态共享对象:VDSO
- 04 系统调用的接口封装:syscall
- Linux系统编程:系统调用
- 06 添加一个系统调用
- 05 系统调用流程分析
- 11 文件的读写流程
- 08 快速系统调用
- 02 软中断:系统调用的入口(X86)
- 01 软中断:系统调用的入口
- 09 虚拟系统调用
- 07 系统调用的开销
- 03 系统调用的接口封装:glibc
- syscall.tar.gz
- Linux内核编程03期:系统调用流程图
- Linux内核编程12:设备树的overlay与ConfigFS
- 05 通过ConfigFS加载二进制文件
- 04 ConfigFS 的核心数据结构
- 07 创建ConfigFS多级子目录
- 01 什么是设备树的overlay?
- 02 设备树overlay实现原理分析
- 08 ConfigFS mkdir 过程分析
- Linux内核编程12期_PPT_代码
- 14 同时加载多个设备树overlay
- 13 设备树overlay解析过程分析
- 12 设备树overlay加载过程分析
- 10 向设备树动态添加节点(上)
- 06 创建ConfigFS子目录
- 03 ConfigFS 的编译与挂载
- 11 向设备树动态添加节点(下)
- 09 实现设备树的overlay功能
- Linux内核编程04期:中断
- 04 编写RTC裸机中断程序
- Linux内核编程:中断流程图
- 00 本期课程主要内容
- 01 中断子系统框架
- 11 中断下半部:tasklet
- 09 SoftIRQ:软中断
- 16 CMWQ工作队列编程实战
- 12 tasklet的运行
- 02 中断控制器:GIC
- 14 延迟工作队列:delayed work
- 17 CMWQ工作队列的运行
- 10 软中断的运行
- 18 中断线程化:request_threaded_irq
- 13 中断下半部:workqueue
- 07 Linux中断处理流程
- 15 workqueue工作队列的运行
- 06 在Linux下编写RTC驱动中断程序
- 中断:代码、datasheet、PPT文档
- 03 GIC控制器中断处理流程
- 05 中断函数的编写规则
- 08 中断上半部和下半部
- Linux内核编程06期:文件系统
- Linux内核编程06:文件系统(下)
- 18 设备文件的创建过程分析
- 24 根文件系统挂载(下):根目录切换
- 21 什么是根文件系统?
- 29 initramfs挂载过程分析
- 25 使用initrd为根文件系统(上)
- 19 设备文件打开过程分析
- 31 文件系统的自动挂载
- 15 文件读写过程:地址空间与页缓存
- 27 使用initrd为根文件系统(下):ramdisk
- 26 使用initrd为根文件系统(中):CPIO
- 32 文件系统的性能指标
- 28 使用initramfs作为根文件系统
- 20 设备文件读写过程分析
- 23 根文件系统挂载(中):boot=分析
- 30 基于内存的文件系统:tmpfs
- 16 文件读写过程:read内核流程分析
- 22 根文件系统挂载(上):rootfs
- 17 什么是设备文件?
- Linux内核编程06:文件系统(上)
- 00 本期课程主要内容
- 14 文件创建过程分析
- 04 文件系统核心数据结构:super_block
- 07 文件系统核心数据结构:file
- 06 文件系统核心数据结构:dentry
- 01 什么是文件系统?:设备端
- 05 文件系统核心数据结构:inode
- 13 文件的打开过程分析(下)
- 11 文件系统的挂载(下)
- 03 什么是文件系统?:主机端
- 第01期:揭开文件系统的神秘面纱
- 09 文件系统的注册过程分析
- Linux内核编程06期:文件系统
- 10 文件系统的挂载(上)
- 08 虚拟文件系统:VFS
- 02 磁盘的格式化与挂载
- 12 文件的打开过程分析(上)
- Linux内核编程06期:文件系统流程图
- Linux内核编程01:模块机制
- Linux内核编程:模块机制视频
- 12 模块的版本控制
- 16 编写一个字符驱动
- 15 模块间的依赖和自动加载
- 11 EXPORT_SYMBOL
- 10 通过U-boot给内核模块传参
- 19 模块机制实现分析(下)
- 18 模块机制实现分析(上)
- 2 内核模块的构成
- 17 模块的运行过程
- 7 模块的out-of-tree编译
- 4 内核污染(kernel tainted)
- 14 多文件构成的内核模块
- 3 内核许可声明
- 8 模块的Makefile分析
- 20 使用模块机制分析内核
- 13 内核模块的头文件
- 1 可加载模块的概念
- 6 将模块编译进内核
- 9 模块参数
- 5 模块签名机制
- lkm_code
- 15
- add.c
- sub.c
- Makefile
- sub.h
- hello.c
- add.h
- 13
- module2
- module2.c
- module3
- module3.c
- inc
- module3
- module3.h
- module1
- module1.h
- module2
- module2.h
- module1
- module1.c
- main.c
- 12
- hello.c
- hello.SS
- Makefile
- 14
- main.c
- sub.h
- Makefile
- add.h
- sub.c
- add.c
- 18
- hello.c
- Makefile
- 03
- hello.c
- Makefile
- 17
- init_module
- hello.c
- Makefile
- hello.c
- 04
- Makefile
- hello.c
- 09
- Makefile
- hello.c
- 01
- hello.c
- Makefile
- 07
- hello.c
- Makefile
- 08
- Kbuild
- hello.c
- Makefile
- 16
- app.c
- Makefile
- hello.c
- 11
- app
- math.c
- hello.c
- math.h
- Makefile
- export_symbol
- Makefile
- mathmodule.c
- hello.c
- math_module
- mathmodule.c
- Makefile
- hello_module
- Makefile
- hello.c
- 02
- Makefile
- hello.c
- Linux内核编程:模块机制
- Linux内核编程02:Kbuild编译系统
- 22 modules_install过程分析
- 06 依赖关系: depends on
- 11 Kconfig 子菜单
- 10 Kconfig choice 互斥菜单
- 15 Kbuild Makefile工作流程
- 04 kconfig 简介
- Readme.txt
- 12 更多的内核编译目标
- 03 Kbuild编译系统组成
- 13 .config文件(上)
- 21 内核模块编译分析
- 01 Kbuild 简介
- 19 zImage镜像生成分析
- 23 头文件安装过程分析
- 24 内核中的空头文件探秘
- 05 Kconfig菜单条目
- 07 弱反向依赖:select、imply
- 20 uImage镜像生成分析
- 16 vmlinux编译过程分析
- 18 单个目标文件生成分析
- 09 Kconfig menuconfig菜单
- 08 内核配置中的反向依赖
- 14 .config文件(下)
- 17 built-in.a生成分析
- Linux内核编程:Kbuild编译系统
- 02 Kbuild工作流程
- Linux内核编程11期:设备树
- 05 SoC芯片架构:桥接(bridge)
- 20 dts 和 dtsi 文件的分离
- 17 设备树实例分析:GPIO
- 12 设备树实例分析:中断控制器
- Linux内核编程11期:设备树流程图
- 31 设备树节点解析:aliases node
- 01 为什么要引入device tree?
- 02 如何编译和运行device tree?
- 07 device tree 基本语法:node
- 24 platform device自动展开分析(下)
- 35 device bingdings & guidelines
- 10 设备树实例分析:memory node
- 11 设备树实例分析:外设
- 14 设备树实例分析:时钟
- 28 设备树节点解析:memory mode
- 08 device tree 基本语法:property
- 04 SoC芯片架构:总线与片选
- 26 哪些node自动展开为platform_device?
- 25 I2C 设备的自动展开
- 22 dtb文件格式
- 19 设备树实例分析:pinmux(下)
- 32 设备树节点解析:获取 IRQ number
- 09 设备树实例分析:CPU node
- 33 设备树节点解析:获取 Register 地址
- 06 SoC芯片架构:extend bus
- 15 extend bus(上):I2C Client
- 29 设备树节点解析:chosen node(上)
- 23 platform device自动展开分析(上)
- 18 设备树实例分析:pinmux(上)
- 30 设备树节点解析:chosen node(下)
- 16 extend bus(下):内存映射型设备
- 34 设备树节点解析:GPIO
- 21 property的overwrite
- 03 使用设备树接口编写platform驱动
- 13 设备树实例分析:中断映射
- Linux内核编程11期:设备树文档代码
- 27 设备树节点解析:CPU node
- Linux内核编程07期:proc文件系统
- Linux内核编程07:proc文件系统
- 06 序列文件:seq_file编程接口
- 04 通过proc接口修改内核变量
- 12 实战:通过proc接口调试RTC驱动
- 07 seq_file 工作机制分析
- 09 使用seq_file接口访问链表
- 02 procfs文件创建回调机制
- procfs.tar.gz
- 11 内核源码分析:interrupts
- 13 实战:通过proc接口调试RTC寄存器
- 00 本地课程规划
- 08 使用seq_file接口访问数组
- 05 通过proc接口访问数组
- 10 内核源码分析:filesystems
- 01 procfs快速入门
- 03 在proc目录下创建子目录
- Linux内核编程07期:proc文件系统
- Linux内核编程10:platform设备驱动
- 08 实现自己的RTC子系统
- 05 自动创建设备节点
- 09 设备的资源管理(上)
- 00 本期课程主要知识点
- 02 platform设备驱动注册过程
- platform.tar.gz
- 11 本期课程小结及编程作业
- 07 设备类接口的抽象与回调
- 03 platform bus match方法
- 06 platform resource
- 04 注册一个字符设备驱动
- 01 编写第一个platform驱动
- 10 设备的资源管理(下)
- 彩蛋:Linux内存管理
- Linux内存管理子系统全景图
- Linux内核编程13期:内存管理
- memory_system.tar.gz
- Linux内核编程08:debugfs文件系统
- 08 在debugfs下使用seq_file接口
- 05 通过debugfs导出数组
- 11 通过debugfs导出寄存器列表
- 10 使用seq_file接口访问链表
- 12 通过debugfs修改RTC寄存器
- 04 通过debugfs导出16进制数据
- 13 通过debugfs导出RTC驱动调试接口
- 02 第一个debugfs编程示例
- debugfs.tar.gz
- 00 什么是debugfs?
- 07 通过debugfs导出自定义格式数据
- 09 使用seq_file接口访问数组
- 01 debugfs的配置编译和注册运行
- 06 通过debugfs导出内存数据块
- 03 通过debugfs导出整型数据
- Linux内核编程:入门篇
- 王利涛-linux系统编程
- 第01期:揭开文件系统的神秘面纱
- 1.12 虚拟文件系统:VFS
- 1.8 目录和目录项
- 1.3 文件在磁盘上的存储(下)
- 1.2 文件在磁盘上的存储(上)t
- 1.14 文件指针
- 1.6 文件系统索引节点:inode
- 1.16 一些命令
- 1.11 文件系统类型
- 1.18 实验:恢复删除的文件t
- 1.9 文件路径解析
- 1.15 硬链接和软链接
- 1.7 超级块:superblock
- 1.13 文件描述符
- 1.4 文件在Flash上的存储(上)
- 1.5 文件在Flash上的存储(下)
- 1.10 文件系统的挂载
- 1.1 本期课程规划t
- 1.17 实验:磁盘格式化及挂载
- 第02期:文件IO编程实战
- 2.3 文件的读写权限t
- 2.11 音频播放器:实现循环列表播放
- 2.15 编程实战:实现 wc 命令(上)
- 2.14 相对路径转绝对路径
- 2.1 本期课程简介t
- 2.10 实现ls命令:支持-c参数
- 2.12 实现ls命令:支持-l参数
- 2.2 文件的打开模式t
- 2.8 读取目录文件内容
- 2.5 文件读写位置与定位
- 2.9 实现ls命令:支持多个目录
- 2.6 获取文件的属性信息
- 2.17 编程实战:实现 wc 命令(下)
- 2.13 有关目录的其它操作
- 2.4 文件的读写函数
- 2.16 编程实战:实现 wc 命令(中)
- 2.7 实现shell命令:ll
- 第05期:进程间通信
- 5.29 Linux新增API:eventfd
- 5.27 Linux新增API:signalfd
- 5.9 IPC 对象和 IPC key
- 5.5 无名管道(4):通过管道同步进程
- 5.21 POSIX 信号量
- 5.3 无名管道(2):shell中的管道实现
- 5.18 消息队列(上):API编程实例
- 5.1 什么是IPC?t
- 5.24 信号机制:signal
- 5.22 POSIX 共享内存
- 5.14 system V 信号量
- 5.26 信号底层API:sigaction函数
- 5.10 system V 消息队列
- 5.19 消息队列(中):异步通知
- 5.13 system V 共享内存
- 5.6 命名管道:FIFO
- 5.2 无名管道(1):PIPE编程实例5
- 5.12 消息队列应用:多人聊天室
- 5.28 Linux新增API:timerfd
- 5.25 编写安全的信号处理函数
- 5.20 消息队列(下):内核实现
- 5.17 POSIX IPC简介
- 5.4 无名管道(3):通过管道与shell命令进行通信
- 5.11 消息队列应用:点对点通信
- 5.7 FIFO应用:LOG日志系统的实现
- 5.15 信号量编程应用:对共享内存的同步访问
- 5.23 文件锁
- 5.8 FIFO应用:服务端与客户端通信
- 5.30 D-BUS总线简介及小结
- 5.16 信号量编程应用:生产者-消费者模型
- 练手项目:使用C语言实现协程
- 13. 优化coroutine_yield的参数
- 3. 保存和设置当前函数上下文
- 9. 使用swapcontext切换func1和func2
- 16. 支持用户指定协程栈大小
- 8. 使用POSIX API:swapcontext
- 12. 实现协程的API:coroutine_resume
- 15. 修改协程栈为动态内存
- 11. 实现协程的API:coroutine_yield
- 2.协程的实现原理t
- 5. 继续完善我们的API
- 17. 一个测试应用程序
- 7. 使用POSIX API:makecontext
- 14. 支持给协程传递参数
- 1. 什么是协程?t
- 4.添加项目的Makefile
- 10. 实现协程的API:coroutine_create
- 6. 使用POSIX API:getcontext
- 第07期:多线程编程入门
- 7.3 创建一个新线程:pthread_create
- 7.7 线程的调度与运行
- 7.1 多线程编程的概念t
- 7.5 等待线程的终止
- 7.2 多线程学习准备工作t
- 7.10 线程同步:条件变量(上)
- 7.14 超线程技术
- 7.8 线程安全
- 7.9 线程同步:互斥锁
- 7.13 线程池的概念
- 7.12 线程同步:读写锁
- 7.11 线程同步:条件变量(下)
- 7.15 线程的概念
- 7.4 线程的终止
- 7.6 线程属性
- 第08期:时间管理和定时器编程
- 8.12 Linux中的定时器:POSIX timer(上)
- 8.10 Linux中的定时器:alarm
- 8.1 时间的概念5
- 8.6 将时间转换为字符串
- 8.5 时间格式转换
- 8.4 获取当前的时间
- 8.13 Linux中的定时器:POSIX timer(下)
- 8.9 获取高精度时间:纳秒
- 8.11 Linux中的定时器:interval timer
- 8.2 时间的计量
- 8.3 Linux系统中的时间管理
- 8.7 用户指定格式的字符串
- 8.8 获取高精度时间:微秒
- 第04期:打通进程与终端的任督二脉
- 4.17 守护进程
- 4.10 进程状态
- 4.3 子进程的运行:借壳上市
- 4.13 与进程通信:信号
- 4.15 进程组与会话
- 4.11 进程的UID和GID
- 4.18 僵尸进程
- 4.6 进程的退出:exit与_exit
- 4.14 终端与控制台
- 4.16 前台进程和后台进程
- 4.4 写时复制与vfork
- 4.9 进程调度
- 4.2 创建一个进程:fork t
- 4.1 进程:程序运行的“牌照”t
- 4.7 进程的退出:vfork与exit
- 4.20 0号进程和1号进程
- 4.8 等待子进程终止:wait
- 4.21 小结:Linux进程全景图
- 4.12 通过proc查看进程资源
- 4.19 孤儿进程
- 4.5 进程的退出:exit
- 第06期:从零实现一个shell解释器
- 6.15 shell变量的实现
- 6.11 实现shell的管道命令(上):思路分析
- 6.5 代码优化及封装
- 6.10 支持进程的后台运行
- 6.3 在子进程中运行shell命令
- 6.8 实现shell内建命令:exit
- 6.2 shell命令的执行过程t
- 6.1 什么是shell解释器t
- 6.14 实现shell脚本语法:if-else流程控制
- 6.16 设置shell的环境变量
- 6.4 解析用户输入的命令并执行
- 6.7 实现shell内建命令:cd
- 6.9 增加对信号的处理操作
- 6.17 实现shell的export命令
- 6.18 代码优化及小结
- 6.12 实现shell的管道命令(下):编码实现
- 6.13 实现脚本的解析和运行
- 6.6 打印彩色命令提示符
- 第00期:入门篇(免费观看)
- 0.5 POSIX标准
- 0.14 后续课程学习路线t
- Linux系统编程第00期
- 0.6 系统编程必备技能(上):man命令
- 0.13 编程实战:音频播放器(下)t
- 0.4 系统调用与C标准库
- 0.2 一个系统编程的例子(上)t
- 0.9 系统调用错误处理
- 0.1 什么是系统编程t?
- 0.3 一个系统编程的例子(下)t
- 0.10 GNU编码风格
- 0.7 系统编程必备技能(中):info命令
- 0.12 编程实战:音频播放器(上)
- 0.8 系统编程必备技能(下):strace命令
- 0.11 Linux哲学:一切皆文件
- 第03期:文件IO缓存与内存映射
- 3.6 用户空间的IO缓存
- 3.3 页高速缓存(中)
- 3.7 Scatter_Gather IO
- 3.8 直接IO
- 3.9 将文件映射到内存
- 3.2 页高速缓存(上)t
- 3.11 将设备映射到内存
- 3.4 页高速缓存(下)
- 3.1 缓存的基本概念t
- 3.10 文件映射内存的实现
- 3.5 块设备驱动架构
- Linux系统编程视频教程配套文档代码
- 王利涛-linux高级编程
- 第6期:数据存储与指针
- 6.9 变量的本质
- 6.4 数据溢出
- 6.11 从变量到指针
- 6.5 数据对齐
- 6.7 数据的可移植性
- 6.14 指针与数组的暧昧:下标运算
- 6.21 指针函数与函数指针
- 6.2 存储的基本概念
- 6.1 存储才是C语言的精髓
- 6.16 指针与数组的暧昧:数值指针与指针数组
- 6.20 二级指针:二维数组
- 6.15 指针与数组的暧昧:数组名
- 6.10 常量存储
- 6.18 二级指针:修改指针变量
- 6.19 二级指针:指针数组传参
- 6.12 一些复杂的指针声明
- 6.3 有符号数和无符号数
- 6.6 数据类型转换
- 6.17 指针与结构体
- 6.8 内核中的size_t数据类型
- 6.22 重新认识void
- 6.13 指针类型与运算
- 第8期:C语言的模块化编程
- 24 模块设计进阶:框架(framework)
- 8.7 一个模块的封装过程
- 22 模块间通信(下):异步通信
- 8.15 头文件之间的依赖关系
- 8.19 被误解的关键字:goto
- 8.9 头文件剖析:隐式声明
- 8.12 头文件剖析:头文件路径(上)
- 8.8 头文件剖析:基本概念
- 8.2 模块的编译和链接(上)
- 8.10 头文件剖析:变量声明
- 8.4 系统模块划分
- 8.11 头文件剖析:前向引用
- 8.14 Linux内核中的头文件
- 20.模块间通信(上):全局变量
- 8.5 面向对象的思维陷阱
- 8.6 规划合理的目录结构
- 8.3 模块的编译和链接(下)
- 8.16 定义与声明的一致性
- 23 模块设计进阶:跨平台设计
- 8.1 如何从零做一碗炸酱面
- 8.17 头文件中的内联函数
- 8.13 头文件剖析:头文件路径(下)
- 21 模块间通信(中):回调函数
- 8.18 模块设计原则:高内聚低耦合
- 第3期:程序的编译、链接和运行
- 3.1 程序的编译与可执行文件
- 3.17 开发一个插件
- 3.12 main函数入口分析
- 3.22 u-boot重定位分析(下)
- 3.13 链接静态库
- 3.16 动态链接(3):共享库
- 3.2 GCC命令参数
- 3.7 链接过程(1):地址空间分配与链接脚本
- 3.4 编译过程(1):从源程序到汇编文件
- 3.10 程序的运行
- 3.21 u-boot重定位分析(上)
- 3.5 编译过程(2):汇编过程
- 3.15 动态链接(2):全局符号表GOT
- 3.18 内核模块加载机制
- 3.20 linux内核加载实验
- 3.9 链接过程(3):重定位
- 3.11 BSS段的处理
- 3.3 预处理过程
- 3.8 链接过程(2):符号解析-强符号与弱符号
- 3.6 编译过程(3):符号表
- 3.19 binutils工具集
- 3.14 动态链接(1):与位置无关的代码
- 第5期:Linux内核中的GNU C扩展语法
- 5.1 什么是C语言标准?
- 5.22 可变参数宏
- 5.20 case范围扩展
- 5.13 属性声明:noinline & always_inline
- 5.23 局部标签
- 5.17 内建函数
- 5.9 属性声明:format
- 5.11 属性声明:weak & alias
- 5.12 属性声明:constructor & destructor
- 5.5 container_of
- 5.19 内建函数:__builtin_expect
- 5.6 零长度数组
- 5.10 属性声明:const
- 5.2 C标准发展过程及新增特性
- 5.21 do{}while(0)
- 5.24 标号元素
- 5.18 内建函数:__builtin_constant_p
- 5.14 属性声明:mode
- 5.8 属性声明:aligned & packed
- 5.15 属性声明:noreturn
- 5.7 属性声明:section
- 5.16 属性声明:used & unused
- 5.4 typeof
- 5.3 语句表达式
- 第9期:CPU和操作系统入门
- 9.6 可重入函数
- 9.22 内存管理单元MMU(下)
- 9.3 多任务的裸机实现(下)
- 9.1 CPU和操作系统入门
- 9.13 存储器映射(上)
- 9.9 系统调用(下)
- 9.5 函数栈与进程栈
- 9.10 中断(上):中断处理流程
- 9.20 位域
- 9.14 存储器映射(下)
- 9.16 内存、外存与外设
- 9.4 调度器的工作原理
- 9.21 内管管理单元MMU(上)
- 9.23 本期小结
- 9.17 IO端口与IO内存
- 9.18 位运算(上)
- 9.8 系统调用(上)
- 9.19 位运算(下)
- 9.12 中断(下):中断函数的编写
- 9.15 存储抽象:文件系统
- 9.7 临界区与临界资源
- 9.11 中断(中):进程栈与中断栈
- 9.2 多任务的裸机实现(上)
- 第7期:嵌入式数据结构和Linux面向对象思想
- 7.3 单向链表
- 7.2 数据结构基础
- 7.9 队列:顺序队列
- 7.14 面向对象编程:封装、继承与多态
- 7.1 本期学习主要内容
- 7.4 单循环链表
- 7.13 代码复用与分层思想
- 7.16 Linux内核的面向对象思想:封装(下)
- 7.19 Linux内核的面向对象思想:多态
- 7.8 Linux内核中的通用链表(下)
- 7.6 双向循环链表
- 7.12 Linux内核中的队列:KFIFO(下)
- 7.10 队列:链式队列
- 7.18 Linux内核的面向对象思想:继承(下)
- 7.17 Linux内核的面向对象思想:继承(上)
- 7.5 双向链表
- 7.11 Linux内核中的队列:KFIFO(上)
- 7.15 Linux内核的面向对象思想:封装(上)
- 7.7 Linux内核中的通用链表(上)
- 第4期:堆栈内存管理
- 4.2 栈的初始化及大小
- 4.16 实战&作业:实现自己的堆管理器
- 4.10 ucos堆内存管理
- 4.11 Linux堆内存管理(1):内存分配器
- 4.8 实战:栈溢出攻击示例
- 4.7 栈溢出攻击原理
- 4.12 linux堆内存管理(2):内存申请与释放
- 4.6 栈与作用域
- 4.1 程序与内存的关系
- 4.14 内存泄露与防范
- 4.4 栈的管理:参数传递
- 4.15 常见内存错误及检测
- 4.9 堆内存管理:内存申请与释放
- 4.3 栈的管理:函数调用
- 4.5 形参与实参
- 4.13 Linux堆内存管理(3):内存申请释放示例
- 第1期:C语言进阶路线学习指南
- 1.2 代码编译工具Vim使用命令
- 1.3 使用GCC、Make编译源程序
- 1.4 使用Git管理软件项目版本
- 1.1 嵌入式C语言进阶学习路线指南_带片头
- 第2期:计算机系统架构与ARM汇编语言
- 2.10 C和汇编混合编程
- 2.2 X86与ARM架构对比分析
- 2.12 链接脚本
- 2.11 GNU ARM汇编语言
- 2.9 ARM汇编程序与伪操作
- 2.7 ARM汇编指令
- 2.1 计算机体系结构
- 2.4 总线与地址
- 2.6 ARM体系结构与寻址方式
- 2.5 指令集、微架构与编译器
- 2.3 C51与ARM架构对比分析
- 2.8 ARM伪指令
- 2.13 嵌入式系统启动流程
- C语言嵌入式Linux高级编程配套代码
包含内容
- · 王利涛-linux 三剑客
- · 零基础玩转Linux+Ubuntu
- · 3.6 源码软件包的编译、安装、卸载
- · 1.2 Linux和Ubuntu的关系
- · 2.5 Make工程管理
- · 4.4 FTP服务器配置及使用
- · 3.9 使用wine安装Windows应用软件
- · 3.7 制作自己的deb软件安装包
贡献者
Jason
白银