- 基础入门篇-第1讲-开发板和野火大学堂
- 基础入门篇-第2讲-为什么学习Linux开发
- 基础入门篇-第3讲-如何学习Linux开发
- 基础入门篇-第4讲-i.MX系列芯片简介
- 基础入门篇-第5讲-Linux系统简介
- 基础入门篇-第6讲-安装ubuntu系统
- 基础入门篇-第7讲-Linux文件目录
- 基础入门篇-第8讲-用户管理与文件权限
- 基础入门篇-第9讲-使用Linux命令行(上)
- 基础入门篇-第10讲-使用Linux命令行(中)
- 基础入门篇-第11讲-使用Linux命令行(下)
- 基础入门篇-第12讲-使用编辑器(上)
- 基础入门篇-第13讲-使用编辑器(下)
- 基础入门篇-第14讲-Shell脚本编程(上)
- 基础入门篇-第15讲-Shell脚本编程(中)
- 基础入门篇-第16讲-Shell脚本编程(下)
- 基础入门篇-第17讲-Linux环境变量
- 基础入门篇-第18讲-构建deb软件安装包
- 基础入门篇-第19讲-硬件介绍和固件烧录
- 基础入门篇-第20讲-运行开发板与fire-config介绍
- 基础入门篇-第21讲-fire-config刷机
- 基础入门篇-第22讲-fire-config连接wifi
- 基础入门篇-第23讲-点亮第一个LED
- 基础入门篇-第24讲-使用脚本体验硬件
- 基础入门篇-第25讲-Git简介和项目资料获取
- 基础入门篇-第26讲-安装NFS服务器
- 基础入门篇-第27讲-GCC与Helloworld
- 基础入门篇-第28讲-ARM-GCC与交叉编译
- 基础入门篇-第29讲-Linux系统和HelloWorld(上)
- 基础入门篇-第30讲-Linux系统和HelloWorld(下)
- 基础入门篇-第31讲 Makefile简介
- 基础入门篇-第32讲 Makefile三要素
- 基础入门篇-第33讲 引入Makefile管理项目
- 基础入门篇-第34讲 Makefile的变量
- 基础入门篇-第35讲 Makefile的模式规则
- 基础入门篇-第36讲 Makefile的条件分支
- 基础入门篇-第37讲 Makefile的常用函数
- 基础入门篇-第38讲 Makefile解决头文件依赖
- 基础入门篇-第39讲 C语言面向对象基础
- 基础入门篇-第40讲 一切皆文件
- 基础入门篇-第41讲 文件描述符和打开模式
- 基础入门篇-第42讲 open_close函数
- 基础入门篇-第43讲 read_write函数
- 基础入门篇-第44讲 lseek和sync函数
- 基础入门篇-第45讲 标准IO函数
- 基础入门篇-第46讲 控制LED灯设备
- 基础入门篇-第47讲 控制蜂鸣器
- 基础入门篇-第48讲 检测按键输入
- 内核编程篇-第49讲-进程的由来
- 内核编程篇-第50讲-创建一个进程
- 内核编程篇-第51讲-子进程偷梁换柱
- 内核编程篇-第52讲-进程的退出
- 内核编程篇-第53讲-等待子进程的终结
- 内核编程篇-第54讲-进程的生老病死
- 内核编程篇-第55讲-进程组、会话、终端
- 内核编程篇-第56讲-守护进程
- 内核编程篇-第57讲-ps命令详解
- 内核编程篇-第58讲-僵尸进程和托孤进程
- 内核编程篇-第59讲-什么是进程间通信(ipc)
- 内核编程篇-第60讲-无名管道
- 内核编程篇-第61讲-有名管道
- 内核编程篇-第62讲-信号简介
- 内核编程篇-第63讲-常用信号分析
- 内核编程篇-第64讲-signal_kill_raise函数
- 内核编程篇-第65讲-信号集处理函数
- 内核编程篇-第66讲-system-V 消息队列
- 内核编程篇-第67讲-system-V 信号量
- 内核编程篇-第68讲-system-V 共享内存
- 裸机开发篇-第69讲-I.MX6ULL启动方式
- 裸机开发篇-第70讲-I.MX6ULL镜像文件
- 裸机开发篇-第71讲-SDK方式烧录镜像
- 裸机开发篇-第72讲-ARM-V7架构
- 裸机开发篇-第73讲-ARM常用汇编指令
- 裸机开发篇-第74讲-VSCode编辑器
- 裸机开发篇-第75讲-GPIO控制原理
- 裸机开发篇-第76讲-汇编点亮LED
- 裸机开发篇-第77讲-使用c语言和sdk
- 裸机开发篇-第78讲-按键检测输入
- 裸机开发篇-第79讲-工程文件整理和中断头文件移植
- 裸机开发篇-第80讲-通用中断控制器(GIC)
- 裸机开发篇-第81讲-中断向量表
- 裸机开发篇-第82讲-中断处理流程
- 裸机开发篇-第83讲-按键中断实验
- 裸机开发篇-第84讲-位置无关码和重定位
- 裸机开发篇-第85讲-时钟控制模块
- 裸机开发篇-第86讲-主频修改实验
- 裸机开发篇-第87讲-串口通信实验
- 裸机开发篇-第88讲-LCD显示原理
- 裸机开发篇-第89讲-LCD显示实验
- 驱动开发篇-第90讲-内核模块基本概念
- 驱动开发篇-第91讲-内核模块实验1
- 驱动开发篇-第92讲-内核模块实验2
- 驱动开发篇-第93讲-Linux内核是怎么设计字符设备的
- 驱动开发篇-第94讲-设备号的组成与哈希表
- 驱动开发篇-第95讲-从源码看如何管理设备号
- 驱动开发篇-第96讲-从源码看如何保存file_operation接口
- 驱动开发篇-第97讲-如何创建一个设备文件
- 驱动开发篇-第98讲-open函数如何查找file_operation接口
- 驱动开发篇-第99讲-led字符设备驱动实验1
- 驱动开发篇-第100讲-led字符设备驱动实验2
- 驱动开发篇-第101讲-linux设备驱动模型
- 驱动开发篇-第102讲-kobject:驱动的基石
- 驱动开发篇-第103讲-kobj_type:用户空间的法宝
- 驱动开发篇-第104讲-设备驱动模型实验1-kobject点灯
- 驱动开发篇-第105讲-kset:驱动的骨架
- 驱动开发篇-第106讲-uevent:内核消息的快递包
- 驱动开发篇-第107讲-class:设备的大管家
- 驱动开发篇-第108讲-xbus:打造自属的驱动总线
- 驱动开发篇-第109讲-platform :虚拟的平台总线
- 驱动开发篇-第110讲-设备驱动模型实验2-代码分离
- 驱动开发篇-第111讲-DTS:硬件资源的说明书1
- 驱动开发篇-第112讲-DTS:硬件资源的说明书2
- 驱动开发篇-第113讲-获取DTS属性信息
- 驱动开发篇-第114讲-设备树实现RGB灯驱动
- 驱动开发篇-第115讲-Device Tree Overlays:”插件“设备树
- 驱动开发篇-第116讲-“插件”设备树实现RGB驱动
- 驱动开发篇-第117讲-iomux节点:pinctrl子系统初窥
- 驱动开发篇-第118讲-imx_pinctrl和pinctrl_dev:引脚名字和编号该存在哪里?(上)
- 驱动开发篇-第119讲-imx_pinctrl和pinctrl_dev:引脚名字和编号该存在哪里?(中)
- 驱动开发篇-第120讲-imx_pinctrl和pinctrl_dev:引脚名字和编号该存在哪里?(下)
- 驱动开发篇-第121讲-pin function和pin group:iomuxc节点解析始末(上)
- 驱动开发篇-第122讲-pin function和pin group:iomuxc节点解析始末(中)
- 驱动开发篇-第123讲-pin function和pin group:iomuxc节点解析始末(下)
- 驱动开发篇-第124讲-pin state:pinctrl-names的真相
- 驱动开发篇-第125讲-pinctl_map:引脚三千,只取一瓢(上)
- 驱动开发篇-第126讲-pinctl_map:引脚三千,只取一瓢(下)
- 驱动开发篇-第127讲-pinctl_setting:如何统一管理pin state(上)
- 驱动开发篇-第128讲-pinctl_setting:如何统一管理pin state(下)
- 驱动开发篇-第129讲-pinctrl子系统的引脚设置接口
- 驱动开发篇-第130讲-pinctrl子系统实验:RGB灯引脚初始化
- 驱动开发篇-第131讲-gpio1节点:GPIO子系统初窥
- 驱动开发篇-第132讲-GPIO子系统实验:IO引脚高低电平控制
- 驱动开发篇-第133讲-十面埋伏的并发(一):硬件同步原语
- 驱动开发篇-第134讲-十面埋伏的并发(二):自旋锁
- 驱动开发篇-第135讲-十面埋伏的并发(三):信号量
- 驱动开发篇-第136讲-十面埋伏的并发(四):互斥锁
- 驱动开发篇-第137讲-IIC驱动框架简介
- 驱动开发篇-第138讲-IIC核心函数与“万能”驱动(上)
- 驱动开发篇-第139讲-IIC核心函数与“万能”驱动(下)
- 驱动开发篇-第140讲-IIC驱动实验:读取mpu6050数据(上)
- 驱动开发篇-第141讲-IIC驱动实验:读取mpu6050数据(下)
- 驱动开发篇-第142讲-设备驱动的非阻塞IO:O_NONBLOCK
- 驱动开发篇-第143讲-设备驱动的阻塞IO:等待队列
- 驱动开发篇-第144讲-POLL机制基本概念
- 驱动开发篇-第145讲-POLL底层机制剖析(上)
- 驱动开发篇-第146讲-POLL底层机制剖析(下)
- 驱动开发篇-第147讲-彻底掌握POLL机制:动手设计一个POLL实验
- 驱动开发篇-第148讲-Completion机制基本概念
- 驱动开发篇-第149讲-kthread_worker:把内核线程当工人?
- 驱动开发篇-第150讲-彻底掌握kthread_worker队列化机制
- 驱动开发篇-第151讲-SPI物理总线
- 驱动开发篇-第152讲-SPI驱动框架简介
- 驱动开发篇-第153讲-SPI主控制器驱动和核心函数
- 驱动开发篇-第154讲-SPI数据传输剖析:同步、异步
- 驱动开发篇-第155讲-pidev:SPI“万能”驱动(上)
- 驱动开发篇-第156讲-pidev:SPI“万能”驱动(下)
- 驱动开发篇-第157讲-SPI驱动实验(上)
- 驱动开发篇-第158讲-SPI驱动实验(下)
- 驱动开发篇-第159讲-Linux中断基础概念
- 驱动开发篇-第160讲-Linux按键中断实验
- 驱动开发篇-第161讲-软中断和tasklet基础概念
- 驱动开发篇-第162讲-tasklet实验
- 驱动开发篇-第163讲-工作队列实验
- 驱动开发篇-第164讲-输入(input)子系统基础概念
- 驱动开发篇-第165讲-输入(input)子系统实验
- 驱动开发篇-第166讲-电容触摸屏驱动简介
- 驱动开发篇-第167讲-电容触摸屏驱动实验(上)
- 驱动开发篇-第168讲-电容触摸屏驱动实验(下)
- 驱动开发篇-第169讲-PWM驱动实验
- 驱动开发篇-第170讲-LCD驱动框架分析
- 驱动开发篇-第171讲-LCD驱动实验
手把手带你玩转ARM嵌入式开发:从指令集到Linux内核的进阶指南
内容简介:最近很多工程师在问有没有系统的ARM嵌入式开发课程,今天给大家详细拆解这个ARM嵌入式开发系统进阶班的核心内容。作为一个在工业领域应用广泛的处理器架构,掌握ARM开发不仅能做智能硬件,还能深入理解Linux内核的底层机制。
为什么选择这个进阶班?
不同于市面上的基础入门课,这个课程最大的特点是贯穿ARM开发全流程:从裸机编程到驱动开发,从硬件接口到系统移植。帮你在3个月里快速建立完整的知识体系,我自己学完后成功完成了多个工业控制项目。
课程使用的开发板是S5PV210和2440这两种经典芯片,实验代码可以直接移植到实际项目中。特别适合已经了解单片机但想转型嵌入式Linux的开发者。
课程精华内容详解
整套课程分为4大模块,逐步深入:
1. ARM体系结构深度解析
这部分会带你用汇编和C语言操作寄存器,理解芯片启动流程。重点包括:
- ARM/Thumb双指令集实战
- 异常处理与中断控制
- Cache与MMU内存管理
- ARMv6新特性(像SIMD指令加速算法)
2. Linux系统开发全攻略
从搭建开发环境开始,到完成实际项目:
- U-Boot移植与内核裁剪(教你怎么瘦身内核)
- 根文件系统制作(包括Busybox配置技巧)
- 驱动开发框架(字符设备/块设备/网络设备)
- 实战项目:LED驱动、温度传感器、LCD显示等
3. 进阶项目实战
综合运用前两阶段知识,完成企业级项目:
- 基于H.264的视频监控系统(含Web界面开发)
- 工业现场用的Modbus协议转换网关
- 智能家居控制系统(通过WIFI控制家电)
配套实验设备
推荐使用以下硬件组合学习:
- S3C2440开发板(性价比高,资料丰富)
- JLINK调试器(用于裸机程序下载调试)
- USB转串口模块(必备调试工具)
学习方法建议
根据我的经验,建议按这个路线学习:
- 先用1周快速过完ARM汇编基础
- 每天至少做2个硬件实验(GPIO、UART这些)
- 遇到问题先看芯片手册(课程提供完整手册)
- 最后做综合项目时多用kgdb调试内核
学习过程中最大的收获是理解了ARM芯片从复位到启动Linux的全过程,这对后续解决实际工作中的启动问题特别有帮助。比如有一次客户设备频繁死机,通过分析MMU配置很快就定位到了内存越界问题。
这个课程另一个亮点是提供完整的项目代码库,包括Makefile编写规范、内核补丁文件等,这些都是企业真实开发中经常用到的实用资源。








