嵌入式开发的底层基石:从裸机到启动流程

这门课程的核心并非泛泛而谈物联网概念,而是聚焦于嵌入式系统中最硬核、最枯燥,却也是决定你能否真正读懂 Linux 驱动源码的基础——BSP(板级支持包)及驱动开发。在物联网行业,很多人止步于上层应用或简单的 GPIO 控制,一旦遇到需要深入内核层、理解硬件寻址、配置 Bootloader 的场景便无从下手。本课程恰恰填补了这一空白,它解决的问题是:如何从零开始构建一个可运行的嵌入式系统,并理解代码是如何从 ROM 一直跑起来、最终加载操作系统的。

对于读者而言,判断是否值得投入时间,关键在于你目前的知识结构。如果你已经掌握了基本的 C 语言语法,但对指针、内存管理仅有浅显认识;或者你在工作中遇到过“明明代码没错,但设备就是不起作用”的迷茫,那么这门课非常适合你。它不适合完全没有编程基础的初学者,也不适合只关心 MQTT 协议或云平台对接的上层应用开发者。它的目标群体是希望打通软硬件壁垒,能够独立进行嵌入式软件底层开发的工程师或转行者。

学习路径建议:先啃骨头,再喝肉汤

课程资料包含视频、笔记、源码及链接脚本,内容密度较大。建议不要按部就班地从第一个视频看到最后一个,而是采用“问题导向”的跳跃式学习。首先,务必精读第一章的笔记和观看关于“内存布局”与“硬件特殊功能寄存器映射”的视频。这是整个嵌入式开发的哲学基础:理解 CPU 如何通过地址访问硬件,以及链接脚本(.lds)是如何规定代码在内存中的落脚点。很多初学者跳过这部分直接看驱动,结果遇到地址偏移问题时完全无法排查。

其次,重点攻克第二章的 Bootloader 部分,特别是 U-Boot 的配置与编译流程,以及 ARM 处理器的引导启动流程。这部分内容晦涩,但它是连接硬件与操作系统的桥梁。建议配合源码目录下的 cmd_switch.c 等文件,边看视频边对照代码,理解环境变量是如何被传递的,内核镜像是如何被解压并跳转的。只有理解了启动流程,后续学习设备树和内核驱动才能知其然更知其所以然。

学完能做什么,以及如何配合资料练习

完成本课程的核心章节后,你将具备独立分析嵌入式系统启动过程的能力。具体表现为:能够看懂芯片的参考手册,理解中断向量表和内存映射;能够交叉编译并配置 U-Boot,解决启动卡住或传参错误的问题;能够编写简单的裸机程序,通过操作寄存器点亮 LED 或驱动串口,而不是仅仅依赖现成的库函数。

资料的配合使用至关重要。视频用于建立概念框架,笔记用于梳理知识脉络,而代码和链接脚本则是唯一的实战工具。建议读者在电脑上搭建交叉编译环境,亲手复刻课程中的裸机工程。不要只看不练,特别是链接脚本的编写和修改,必须亲自经历“编译报错—分析地址—修改脚本—重新下载”的循环。只有当你能独立调整链接地址让程序在开发板上正常运行时,这门课的价值才算真正被你内化。这对于后续进阶 Linux 驱动开发,或从事 IoT 网关设备的底层调试,具有不可替代的奠基作用。

课程目录

01_第一章_嵌入式系统概述及裸机开发 笔记 01_第一章_嵌入式系统概述及裸机开发.pdf
 579.80kb 代码 裸机程序 t.lds 0.10kb 教案 01-1.嵌入式系统开发概述.pdf
 2.19M 01-2裸机工程开发调试.pdf
 991.32kb 视频 00_嵌入式系统基本概念.mp4
 20.79M 01_嵌入式芯片基本组成.mp4
 28.33M 02_嵌入式开发板介绍.mp4
 58.87M 03_嵌入式微处理器的寻址方式.mp4
 19.69M 04_嵌入式微处理器的内存布局.mp4
 81.09M 05_硬件特殊功能寄存器的映射.mp4
 12.53M 06_通过内存实现对芯片硬件资源的访问.mp4
 89.32M 07_裸机开发特点.mp4
 33.65M 08_编译链接过程.mp4
 69.67M 09_交叉编译器的安装.mp4
 51.81M 10_裸机程序的编写.mp4
 111.55M 11_裸程序下载运行.mp4
 105.94M 12_链接脚本编写.mp4
 53.45M 02_第二章_Bootloader应用分析 02_第二章_Bootloader应用分析.pdf
 704.18kb cmd_switch.c 1.62kb mkconfig详解.txt 9.50kb Thumbs.db 15.00kb u-boot配置编译流程.pdf
 239.19kb u-boot配置编译流程.wps 263.55kb u-boot启动流程.txt 3.05kb 02-1.Bootloader应用分析.pdf
 3.04M 01_引导程序基本概念.mp4
 23.81M 02_arm处理器引导启动流程.mp4
 73.27M 03_引导程序给内核传参.mp4
 90.81M 04_uboot介绍.mp4
 110.06M 05_uboot配置编译.mp4
 70.17M 06_系统镜像下载方法.mp4
 109.19M 07_uboot配置原理分析.mp4
 119.42M 08_uboot裁剪方法.mp4
 46.21M 09_uboot镜像组成及产生过程.mp4
 251.35M 10_uboot命令介绍.mp4
 70.04M 11_uboot命令添加.mp4
 178.07M 12_uboot命令调用过程.mp4
 86.19M 13_boot内核引导过程.mp4
 99.17M 03_第三章_Linux内核开发移植 03_第三章_Linux内核开发移植.pdf
 538.53kb 01-v_motor_simple_3.4.39 02-linux-3.0.8内核移植所需代码 linux-3.4.110内核移植.pdf
 133.24kb 03-1.Linux内核开发移植.pdf
 1.21M 01_Linux内核历史考古.mp4
 49.59M 02_Linux内核版本的变迁.mp4
 93.70M 03_Linux内核编译.mp4
 158.36M 04_Linux内核模块介绍.mp4
 132.67M 05_Linux内核镜像产生过程.mp4
 67.51M 06_Linux内核启动流程.mp4
 273.80M 07_Linux内核配置裁剪.mp4
 100.83M 08_Linux内核源码配置裁剪原理.mp4
 96.75M 09_向内核添加代码的过程.mp4
 67.39M 10_下载测试更新过的内核.mp4
 80.33M 11_Linux内核移植注意事项.mp4
 104.86M 04_第四章_嵌入式Linux文件系统 04_第四章_嵌入式Linux文件系统.pdf
 419.76kb 1、根文件系统的制作(busybox).pdf
 204.60kb 2、根文件系统验证及镜像制作.pdf
 134.07kb mkfs_ext4.tar.gz 140.00kb 04-1.嵌入式文件系统.pdf
 933.34kb 01_文件系统概念.mp4
 30.18M 02_文件系统的分类.mp4
 57.54M 03_VFS文件系统介绍.mp4
 23.46M 04_根文件系统介绍.mp4
 68.43M 05_根文件系统目录结构.mp4
 243.47M 06_根文件系统启动流程.mp4
 63.73M 07_构建根文件系统之busybox编译.mp4
 177.59M 08_根文件系统制作方法.mp4
 134.30M 09_根文件系统etc配置文件介绍总结.mp4
 108.67M 05_第五章_字符设备驱动 05_第五章_字符设备驱动.pdf
 534.73kb 00_sound_std_io 01_sound_linux_io 02_module 03_module_file_operations 04_char_mknod 05_char_autocreate_mdev 06_char_open 07_char_read_write 08_char_gpio_ioremap_led 09_char_gpio_kernel_led 10_char_gpio_key_easy 13_char_gpio_ioctl_led_easy 05-1.Linux字符设备驱动.pdf
 1.64M 01_驱动开发基本概念.mp4
 47.24M 02_Linux驱动开发分类及特点.mp4
 92.68M 03_Linux内核模块编程介绍.mp4
 31.64M 04_三步实现一个内核模块.mp4
 139.39M 05_字符设备驱动框架编写.mp4
 125.01M 06_字符设备驱动创建设备文件并访问驱动.mp4
 127.92M 07_字符设备驱动与应用程序数据交互.mp4
 76.62M 08_设备号的应用.mp4
 68.68M 09_GPIO配置接口介绍.mp4
 80.39M 10_LED灯操作.mp4
 83.78M 11_简单按键驱动实现.mp4
 89.50M 06_第六章_Linux内核API 06_第六章_Linux内核API.pdf
 456.53kb 00_irq_easy 01_irq_schedule_non 02_irq_workqueue_schedule_ok 03_irq_tasklet_schedule_non 04_key_kfifo 05_atomic_flag 06_semaphore_open 07_semaphore_data 08_mutex 09_spinlock 10_delay_key_shake 11_key_short_up_down 12_key_short_long_spinlock 14_key_waitqueue 15_key_select_poll 16_key_kthread 17_mmap 18_lcd_use_mmap 06-1.Linux_kernel_API.pdf
 1.39M 01_中断基本概念.mp4
 32.96M 02_中断服务相关接口.mp4
 77.94M 03_按键中断程序开发流程.mp4
 186.13M 04_裸机中断特点.mp4
 23.45M 05_中断对系统调度的影响.mp4
 141.82M 06_工作队列实现中断底半部.mp4
 202.44M 07_异步数据问题分析.mp4
 72.23M 08_kfifo介绍.mp4
 42.57M 09_异步数据处理kfifo实现.mp4
 81.14M 10_内核同步与互斥概念.mp4
 29.31M 11_信号量介绍.mp4
 22.30M 12_信号量代码实现.mp4
 118.51M 13_自旋锁应用.mp4
 54.66M 14_内核延时接口介绍.mp4
 132.92M 15_timer_list定时器.mp4
 121.73M 16_按键中的去抖及UP_DOWN实现.mp4
 114.15M 17_长短按键的实现.mp4
 76.43M 18_无条件阻塞.mp4
 96.54M 19_有条件阻塞.mp4
 44.52M 20_轮询加阻塞select机制介绍.mp4
 57.61M 21_轮询加阻塞poll实现.mp4
 113.28M 22_内核线程应用开发.mp4
 147.07M 07_第七章_Linux驱动工程实例 07_第七章_Linux驱动工程实例.pdf
 578.86kb 1_demo_key_misc 2_demo_key_cdev 3_demo_key_cdev_platform 4_demo_key_input_easy 4_demo_key_misc_plat 5_demo_key_input_ls 07-1.工程实例.pdf
 2.13M 01_杂项设备驱动介绍.mp4
 47.60M 02_杂项设备驱动实现.mp4
 80.84M 03_cdev注册方式介绍.mp4
 26.74M 04_cdev驱动注册过程.mp4
 132.11M 05_platform总线介绍.mp4
 73.13M 06_platform_device创建过程.mp4
 90.15M 07_platform_driver创建过程.mp4
 138.63M 08_设备资源对设备驱动的影响.mp4
 196.30M 09_解决platform_driver反复插拔异常问题.mp4
 39.38M 10_input子系统介绍.mp4
 79.41M 11_input子系统驱动开发.mp4
 244.30M 12_input子系统调试.mp4
 143.46M 08_第八章_I2C总线接口 08_第八章_I2C总线接口.pdf
 371.03kb 00_mma8653_i2c_simulate_open 01_mma8653_i2c_simulate_read 08-1.i2c原理及应用.pdf
 1.35M 01_串行总线的基本概念.mp4
 43.50M 02_i2c通信特点.mp4
 69.00M 03_i2c通信时序图.mp4
 24.42M 04_i2c启始和终止信号模拟时序编写.mp4
 54.82M 05_i2c收发数据模拟时序编写.mp4
 70.16M 06_收发应答模拟时序编写.mp4
 41.39M 07_批量数据收发接口封装.mp4
 50.80M 08_mma8653介绍及驱动接口完善.mp4
 112.45M 09_i2c模拟时序封装成杂项设备.mp4
 136.64M 10_去掉内核已有驱动并实现芯片ID的读取.mp4
 122.63M 11_mma8653三轴加速值成功获取.mp4
 97.90M 09_第九章_I2C子系统 09_第九章_I2C子系统.pdf
 263.79kb 00_mma8653_i2c_subsys_open 01_mma8653_i2c_subsys_read 09-1.i2c子系统应用.pdf
 1.17M 09-2.重力传感器项目.pdf
 644.60kb 01_i2c子系统介绍.mp4
 42.50M 02_i2c子系统驱动框架.mp4
 31.41M 03_i2c子系统设备端开发.mp4
 82.26M 04_i2c子系统设备驱动开发.mp4
 97.26M 05_i2c子系统数据传输过程.mp4
 149.26M 10_第十章_块设备驱动 10_第十章_块设备及驱动.pdf
 508.43kb 01_ramdisk_easy 02_ramdisk_strengthen_getgeo 03_ramdisk_full 13-1.Linux块设备驱动.pdf
 958.81kb 01_块设备驱动基本概念.mp4
 43.01M 02_块设备驱动框架.mp4
 41.72M 03_块设备驱动相关数据结构分析.mp4
 41.53M 04_块设备驱动开发流程.mp4
 71.99M 05_块设备驱动程序编写.mp4
 112.64M 06_块设备驱动使用流程.mp4
 152.29M 11_第十一章_USB设备驱动 11_第十一章_USB设备驱动.pdf
 490.01kb driver.c 6.46kb driver.ko 116.05kb Makefile 0.17kb 13-3.USB驱动开发.pdf
 1.04M 01_usb基本概念.mp4
 29.51M 02_usb拓扑结构.mp4
 45.97M 03_usb电气特性.mp4
 39.31M 04_usb数据传输类型.mp4
 64.49M 05_usb设备描述符及其枚举过程.mp4
 91.54M 06_linux_usb驱动框架.mp4
 40.21M 07_linux_usb驱动开发流程.mp4
 134.41M 08_linux_usb数据通信过程.mp4
 57.06M 09_linux_usb驱动源码分析并验证.mp4
 227.88M