韦东山视频

               

              第一期&第二期:


一期(免费): 54节视频 共16.93G

二期√ :73节视频,每节50分钟总时长3650分钟,共29.6G


掌握写汇编代码的能力,可以分析任意裸板包括U-boot、内核里的相关汇编代码;
掌握常用的硬件部件的操作,比如GPIO,UART,I2C,LCD,触摸屏;
可以写出这些硬件部件的裸板程序;深入理解

ARM体系统架构,可以写出具备中断功能的裸板程序。

对程序现场的保存、恢复有所了解,这些原理适用于任何架CPU适用于内核及应用程序。
熟悉裸板程序的结构,给你一个Bootloader就能分析它的初始化部分、内存使用情况、链接地址、重定位、程序的相对跳转/绝对跳转等;
掌握Bootloader启动内核的原理,能完全自己写出一个Bootloader。

掌握三大类驱动程序的框架:①字符设备驱动②块设备驱动③网卡驱动
掌握驱动程序中各种操作:休眠-唤醒、 同步互斥和异步通知,定时器,

上下半部等能自己写出2期视频讲的各种驱动,它们已经涉及工作中的绝大部分驱动
学习驱动的套路:分配-设置-注册,掌握驱动的分析方法

掌握裸板调试方法:点灯、打印、JTAG工具进行源码级别的调试;查看反汇编。
掌握驱动调试方法:打印,自制打印;分析oops信息,栈回溯,理解内核原理并修改内核;自制调试工具
掌握系统级别的应用调试方法:使用工具,修改内核自制工作。

自己写一个bootloader, 它可以让你快速了解u-boot的核心功能。
移植一个全新的u-boot, linux。
◆编译busybox重新构造根文件系统。
移植2期驱动到3.4.2内核,你会在发现不同的内核下写驱动方法一
样。


下面的课表中的3、4、5属于第1期和第2期的内容。
学本课程前,应该自行掌握第一、二部分的知识:LINUX基本操作和C基础

第一部分 基础知识之Linux基本操作

备注

1. 在虚拟机上安装一个ubuntu

也可直接用虚拟机打开光盘的ubuntu 

2. 熟悉各种操作命令:ls,cd,pwd,ifconfig,tar,…

命令很简单,刚接触不熟练就记到本子上,用到时查看

3. 了解Linux下文件的属性,掌握chown、chmod命令

往后的学习中经常碰到权限问题
4. 掌握文件编辑命令:vi 简单使用就可以了,vi太强大,你只需要掌握简单用法
4. 掌握文件查找命令:find, grep Linux下这2个命令功能强大,远超windows下的查找功能
5. 掌握在Linux下安装交叉编译工具链的方法,设置PATH环境变量 你们经常碰到command not found
6. 掌握在Linux上安装、启动这些服务:NFS,FTP,SSH 必备,能装能用就行
7. 会写简单的shell脚本 知道所谓脚本就是把命令写在一个文件里,就暂时够了
建议:随便找一本Linux的操作书来看就可以,来来去去就那些命令,重新回到DOS时代吧,就是命令行,别指望像windows那样方便  
第二部分 基础知识之C语言基础 C语言能力越强,对后面的学习越有利,这里列出基本要求
1. 指针是C语言的精华 练习:指针、指针的指针、指针数组、用指针来传参数
2. 结构体的定义、使用  
3. 使用基本的open,read,write函数来操作文件  
4. 头文件的使用,编译时怎么指定头文件的位置、怎么找到头文件  
5. 链接程序时怎么指定库文件的位置,怎么引用库文件  
6. 宏开关的使用  
7. 使用gcc等命令行来编译程序,预编译、链接的概念  
8. 编写简单的Makefile Linux独有,暂时能写一个简单的就行
建议:C语言的练习可以在VC下做,找一本好的C语言书。一定要写代码,别只是看,写写写写写写!!!!找一些题目来上机实验,C语言的好书似乎不少。
第三部分 基础知识之看懂原理图 一定要看英文版的数据手册,别指望找什么中文手册
目标:随便给你一个板子,能根据原理图、芯片手册就明白应该怎么去操作某个外设  
1. GPIO类管脚的使用:配置为输出或输入,设置它的输出电平、读输入状态  
2. 掌握几种协议类接口:I2C、UART、LCD等的信号原理、操作方式  
3. 掌握内存类接口:怎么确定地址、怎么设置时序 需结合主芯片的手册和原理图确定

建议:若有单片机的基础、有电子专业的基础,这部分应该不成问题。若没有,可以看看我录制的"学前班第1课:怎么看原理图"视频。
我没有见过教人怎么看原理图的书,我个人只看过:微机原理、数字电路,然后就是做过电路设置的工作,从中煅炼出来的。

第四部分 ARM体系结构与裸机实验 韦东山Linux视频第1期(免费)
 
 
第01课 环境搭建及工具、概念介绍 第1部分的细化,以后就在Linux上工作了,环境必须先建好
第02课 GPIO实验 写出第1个裸板程序,掌握几条汇编指令,汇编怎么调用C
知道怎么操作GPIO,了解2440的启动过程
写出第1个Makefile,
第03课 存储管理器实验 掌握SDRAM的初始化方法
掌握位置无关指令,相对跳转、绝对跳转
掌握代码重定位
第04课 MMU实验 大概了解ARM里虚拟地址、物理地址的概念
了解内存映射的基理
掌握链接脚本的写法
感觉有难度的就跨过
第05课 NAND FLASH控制器 掌握第1个协议类接口:NAND的操作原理
掌握把NAND中的程序重定位的方法
第06课 中断控制器 掌握ARM架构的中断处理过程
第07课 系统时钟和UART实验 掌握提高系统时钟的方法,掌握串口的操作
第08课 LCD实验 掌握LCD的操作方法,掌握时序设置(建议同时看第2期LCD驱动)
再次深入了解链接脚本,为何要清BSS段
第09课 U-BOOT分析 结合<嵌入式Linux应用开发完全手册>了解u-boot的运行流程
理解u-boot的“命令”实现方法,能自己添加一个命令
了解u-boot怎么传参数给内核,怎样启动内核
第10课 内核启动流程分析 掌握Linux内核的启动流程:u-boot传入的机器ID的处理
u-boot传入的其他参数的处理
内核怎么去启动第1个应用程序
第11课 构建根文件系统 第1个进程的作用
根文件系统的构成
制作文件系统映象文件、烧写
第12课节 字符设备驱动程序 简单的字符设备驱动:框架、查询方式、中断方式、poll、
异步通知、同步互斥等基本概念
第五部分 高级驱动程序及调试
韦东山Linux视频第2期
 
第13课 输入子系统 第12课里的驱动代码基本上都是自己写的,
第13课分析内核自带的驱动,理解后再添加自己的硬件支持
输入子系统是很重要的,触摸屏、键盘、鼠标等都是这套框架
第14课 驱动程序分层分离概念_总线驱动设备模型 内核里大量使用所谓的平台驱动、平台设备,这只是一个技巧
第15课 LCD驱动程序 掌握frame buffer这套自带驱动
掌握LCD的操作原理、时序设置
掌握编写硬件相关的LCD底层驱动
第16课 触摸屏驱动程序 掌握电阻式触摸屏的操作原理
掌握输入子系统的第2个驱动(第1个驱动是第13课)
第17课 USB驱动程序 掌握USB驱动程序的框架:USB主机控制器驱动、USB设备驱动
掌握USB设备驱动的编写方法
掌握USB数据的读写方法
第18课 块设备驱动程序 了解块设备驱动程序的框架,为何引入块设备驱动
掌握第1个最简单的块设备驱动程序:用内存模拟硬盘
第19课 NAND FLASH驱动程序 MTD设备的分层
NAND FLASH的操作原理
NAND FLASH的时序设置
NAND FALSH底层硬件驱动的设计
划分分区
第20课 NOR FLASH驱动程序 MTD设备的分层
NOR FLASH的操作原理
NOR FLASH的时序设置
NOR FALSH底层硬件驱动的设计
划分分区
第21课 网卡驱动程序 了解第3类驱动:网卡驱动的框架
编写一个虚拟网卡驱动来加深了解
第22课 网卡驱动程序 内存类接口芯片的操作方法:确定基址、设置时序
移植:编译、出错、解决错误、再编译
第23课 I2C设备裸板程序 掌握I2C协议,掌握在S3C2440上怎么操作I2C
第24课 I2C驱动程序 掌握I2C设备驱动程序的框架及编写方法
第25课 字符设备驱动程序概念纠正之另一种写法 egister_chrdev之外的第2中写法:cdev
第26课 OSS模型声卡驱动的框架及UDA1341、WM9876驱动移植  
第27课 DMA 在内核下怎么使用DMA
第28课 热拨插机制(hotplug)和mdev的使用 结合内核代码了解设备节点的自动创建及删除
掌握mdev的使用方法
实现热拨插动作,比如让U盘自动挂载
第29课 裸板调试 点灯、打印、用JTAG工具进行源码级(gdb,eclipse)的调试
进行源码级(gdb,eclipse)调试的前提条件
第30课 驱动程序调试 printk打印,借用proc文件系统、分析oops信息、栈信息回溯
自制工具──寄存器编辑器
第31课 从系统的角度进行应用程序调试 用strace命令跟踪系统调用
用gdb和gdbserver调试
自制系统调用
编写输入模拟器
第32课 新内核下的I2C驱动程序 新内核下的I2C驱动程序框架
编写I2C设备驱动程序
不写驱动程序,从用户态直接访问
编写I2C总线驱动程序
毕业班第1课 自己写bootloader 这是第3部分裸板的集成:启动代码、重定位、NAND操作、
传参数给内核、启动内核
从这个简单的程序,你可以理解u-boot的最重要功能
毕业班第2课 移植最新u-boot 这也是第3部分裸板的实际应用
毕业班第3课 移植3.4.2内核,构造根文件系统  
毕业班第4课 移植驱动到3.4.2内核 有人说2.6.22.6内核太老了,你看了这一课就会发现
使用老内核可以让你学到更多,并且把驱动移到新内核很简单

 

                     第三期:

项目一: 数码相框
衍生项目:电子书,文件浏览器
知识点:字符编码,矢量字体显示,编写通用Makefile,多线程 编程,网络编程,远程调试,自制GUI

目标:

掌握面向对象的模块化编程思想,搭建易扩展的程序框架
操作LCD,触摸屏,初次学习如何实现整个项目
有些产品需要更小巧的界面,耗费资源比较大的QT等就不适合,本项目可以直接应用于这类产品,已有学员在公司产品上用起来了



项目二:视频监控
衍生项目:数码相机,用无线路由器实现远程监控,远程串口,物联网(开关灯)
知识点:驱动,摄像头V4L2, WIFI网卡, 3G上网卡, ALSA声卡;应用, 在LCD上显示摄像头图像(数码相机)
目标:
编写服务器程序传输视频,声音等数据
编写客户端程序在手机上显示视频等
掌握几大复杂驱动开发, 实现比较复杂的项目以提高应用编程水平



项目三:电源管理

修改Bootloader,内核,应用以实现系统的休眠、唤醒
学习内核里电源管理框架掌握驱动的电源管理功能
结合应用程序实现整个系统的省电

 

课程章节及要点
实战项目 韦东山Linux视频第3期
第1个项目数码相框  
第1课第1节_数码相框之系统框架 总体讲述这个项目所涉及的框架,所需要的知识
第1课第2.1节_数码相框_字符的编码方式 怎样在LCD上显示文字, 从最简单的点限显示讲起,
到复杂的矢量字体显示─这在实际应用中大量用到,这一课对LCD的操作也更加深入
第1课第2.2节_数码相框_字符的点阵显示
第1课第2.3.1节_数码相框_freetype理论介绍
第1课第2.3.2节_数码相框_在PC上测试freetype
第1课第2.3.3节_数码相框_在LCD上显示一个矢量字体
第1课第2.3.4节_数码相框_在LCD上显示多行文字
第1课第3.1节_数码相框_额外项目_电子书之效果及框架 额外项目1,实现了在LCD上显示阅读文本
知识点:文件编码方式, UNICODE,
首次尝试以面向对像的方法编写应用程序
第1课第3.2节_数码相框_额外项目_电子书之代码阅读及编写
第1课第3.3节_数码相框_额外项目_电子书之指针的操作
第1课第3.4节_数码相框_额外项目_电子书之链表的操作
第1课第3.5节_数码相框_额外项目_电子书之在PC上显示 以面向对像的方法编写的程序很容易扩展, 这是一个示例
第1课第4节_数码相框_编写通用的Makefile 从零写出一个复杂的Makefile,工作中可以把它用于所有项目
第1课第5.1节_数码相框_使用多种方法支持多输入_框架及轮询方式 以多种方式实现了输入事件的读取
第1课第5.2节_数码相框_使用多种方法支持多输入_select方式
第1课第5.3节_数码相框_使用多种方法支持多输入_多线程
第1课第6.1节_一小时学会网络编程_两个简单例子_tcp_udp 掌握网络编程,掌握远程打印(实际产品一般没有串口供你操作)
第1课第6.2节_修改电子书源码支持远程打印1
第1课第6.2节_修改电子书源码支持远程打印2
第1课第7节_libjpeg的使用 使用开源库显示JPG图片
第1课第8.1节_数码相框功能及程序框架 这一节实现了数码相框的架构设计,以MainPage为例讲解了具体页面的程序设计,把MainPage理解后, 其他页面的操作是相似的
第1课第8.2节_数码相框程序编写_先写框架
第1课第8.3.1节_数码相框程序编写_图标显示之bmp数据提取
第1课第8.3.2节_数码相框程序编写_图标显示之缩放
第1课第8.3.3节_数码相框程序编写_图标显示之测试
第1课第8.4.1节_数码相框程序GUI编写_MainPage显存管理
第1课第8.4.2节_数码相框程序GUI编写_MainPage页面规划
第1课第8.4.3节_数码相框程序GUI编写_MainPage输入功能
第1课第8.4.4节_数码相框GUI程序编写_MainPage测试
第1课第8.5.1节_数码相框效果演示及编译使用方法 串讲了其他页面的代码,
改进了其中一个页面, 它实际上就是一个文件浏览器
第1课第8.5.2节_数码相框完整代码的讲解
第1课第8.5.3节_数码相框改进性能_支持中文
第1课第8.5.4节_数码相框课后作业及思路
第2个项目视频监控
第2课第1.1.1节_摄像头驱动_V4L2框架分析 虚拟驱动程序忽略了复杂的硬件操作,
通过它可以快速理解V4L2视频驱动
第2课第1.1.2节_摄像头驱动_虚拟驱动vivi的测试
第2课第1.1.3节_摄像头驱动_虚拟驱动vivi彻底分析
第2课第1.1.4节_摄像头驱动_从零写一个虚拟驱动
第2课第1.1.5节_摄像头驱动_USB摄像头驱动框架分析 工作中我们不一定要自己写摄像头驱动,但是要会修改,会修改的前提是能看得懂,看得懂的好方法是: 从零写一个
第2课第1.1.6节_摄像头驱动_从零写USB摄像头驱动之分析描述符
第2课第1.1.7节_摄像头驱动_从零写USB摄像头驱动之实现数据传输1_框架
第2课第1.1.7节_摄像头驱动_从零写USB摄像头驱动之实现数据传输2_简单函数
第2课第1.1.7节_摄像头驱动_从零写USB摄像头驱动之实现数据传输3_设置参数
第2课第1.1.7节_摄像头驱动_从零写USB摄像头驱动之实现数据传输4_URB
第2课第1.1.7节_摄像头驱动_从零写USB摄像头驱动之实现数据传输5_调试
第2课第1.1.8节_摄像头驱动_从零写USB摄像头驱动之设置属性
第2课第1.1.9节_自制USB摄像头硬件的驱动编写_修改UVC 我们开发了一款USB、CMOS接口二合一的摄像头:
用两种方法实现它的驱动程序
第2课第1.1_10节_自制USB摄像头硬件的驱动编写_修改MYUVC
第2课第1.1_11节_在LCD上显示摄像头图像1_效果_框架_准备工作 衍生项目:
加上保存图片功能的话, 这就是一个数码相机.
这个程序支持YUV,MJPEG,RGB格式的摄像头,
可以在LCD或PC上显示摄像头图像
第2课第1.1_11节_在LCD上显示摄像头图像2_实现摄像头模块
第2课第1.1_11节_在LCD上显示摄像头图像3_实现转换模块
第2课第1.1_11节_在LCD上显示摄像头图像4_整合代码
第2课第1.1_11节_在LCD上显示摄像头图像5_调试测试
第2课第1.1_11节_在LCD上显示摄像头图像6_在PC上显示
第2课第1.1_12节_CMOS摄像头之硬件原理 根据V4L2的规范,从零实现了CMOS摄像头驱动程序
并写一个测试程序把图像在LCD上显示出来
第2课第1.1_13节_从零写CMOS摄像头驱动1_画框架
第2课第1.1_13节_从零写CMOS摄像头驱动2_编写驱动程序框架
第2课第1.1_13节_从零写CMOS摄像头驱动3_初始化摄像头模块
第2课第1.1_13节_从零写CMOS摄像头驱动4.1_逐个讲解并设置摄像头控制器的寄存器
第2课第1.1_13节_从零写CMOS摄像头驱动4.2_逐个讲解并设置摄像头控制器的寄存器
第2课第1.1_13节_从零写CMOS摄像头驱动4.3_逐个讲解并设置摄像头控制器的寄存器
第2课第1.1_13节_从零写CMOS摄像头驱动5_编译调试
第2课第1.1_14节_额外项目2_便携式无线监控1_效果演示 衍生项目:把USB摄像头接到无线路由器上,使用手册连接无线路由器,在手机上观看摄像头图像
第2课第1.1_14节_额外项目2_便携式无线监控2_实现过程(上)
第2课第1.1_14节_额外项目2_便携式无线监控3_实现过程(下)
第2课第1.1_15节_使用WIFI网卡1_准备工作及配置内核 介绍使用WIFI时的若干概念,
移植WIFI驱动程序,
编译开源工具使用WIFI网卡,
最后会写一个应用程序仿照手机实现设置、使用WIFI的功能
第2课第1.1_15节_使用WIFI网卡2_概念及工具iw(STA模式)
第2课第1.1_15节_使用WIFI网卡3_工具wpa_supplicant(STA模式)
第2课第1.1_15节_使用WIFI网卡4_工具dhcp及全自动使用wifi
第7课第5节_使用WIFI网卡_AP模式
第7课第6节_使用WIFI网卡_仿手机写wifi操作程序
第8课第1节_3G上网卡_工具及使用
使用开源工具使用3G上网卡,并仿照开源工具编程使用它
第8课第2节_3G上网卡_编程自动切换模式
第8课第3节_3G上网卡_编程自动确认拨号端口
第9课第02节_ALSA声卡_裸板之编写程序_P
先写出声卡的裸板程序,这使得我们可以掌握声卡的硬件操作过程;
再分析ALSA驱动程序的框架及调用过程,然后从零写出一个ALSA声卡驱动,这使得我们可以彻底掌握ALSA驱动。
虽然工作中我们很可能只是移植厂家提供的驱动,但是前提是我们要对驱动框架有深入的理解,而最好的学习方法就是从零写出来。作为移植的示例,我们还移植了WM8976的声卡驱动。最后,简单地写了一个ALSA应用程序
第9课第03节_ALSA声卡_裸板之编译和测试1
第9课第04节_ALSA声卡_ALSA驱动框架
第9课第05节_ALSA声卡_ASoC驱动框架
第9课第06节_ALSA声卡_体验声卡
第9课第07节_ALSA声卡_分析调用过程
第9课第08节_ALSA声卡_从零编写之框架
第9课第09节_ALSA声卡_从零编写之参数设置
第9课第10节_ALSA声卡_从零编写之数据传输
第9课第11节_ALSA声卡_从零编写之调试
第9课第12节_ALSA声卡_从零编写之添加音量控制
第9课第13节_ALSA声卡_从零编写之WM8976
第9课第14节_ALSA声卡_移植原厂WM8976驱动
第9课第15节_ALSA声卡_修改内核声卡BUG
第9课第16节_ALSA声卡_编写ALSA声卡应用程序
第10课第1节_讲解mjpg-streamer_移植_效果演示
我们使用开源工具mjpg-streamer来作为服务器端以传输视频,这本课程里,先分析它的源码;然后写一个PC客户端程序以接收视频并显示出来。
第10课第2节_讲解mjpg-streamer_框架
第10课第3节_讲解mjpg-streamer_源码分析(上)_主进程
第10课第4节_讲解mjpg-streamer_源码分析(中)_输入通道_视频采集过程
第10课第5节_讲解mjpg-streamer_源码分析(下)_输出通道_视频传输过程
第10课第6节_讲解mjpg-streamer_自己写客服端(上)
第10课第7节_讲解mjpg-streamer_自己写客服端(下)
第10课第8节_讲解mjpg-streamer_自己写客服端_编译调试
 
先介绍电源管理,再修改uboot支持电源管理命令,继而修改驱动添加电源管理,介绍runtime_PM框架,regulator,
最后编写支持开关机的应用程序
第1课第1节_电源管理概述
第2课第1节_在uboot实现电源管理_编写休眠功能
第2课第2节_在uboot实现电源管理_编写唤醒功能
第2课第3节_在uboot实现电源管理_调试
第3课第1节_系统睡眠模型_Linux的suspend流程
第3课第2节_系统睡眠模型_修改内核或驱动以使用suspend功能
第3课第3节_系统睡眠模型_给驱动程序添加电源管理功能
第4课第1节_runtime_PM框架第3课第3节_系统睡眠模型_给驱动程序添加电源管理功能
第4课第2节_runtime_PM修改驱动程序和使用
第5课第1节_regulator系统的概念并编写代码
第5课第2节_regulator系统之编译测试
第6课第1节_APP_修改数码相框以支持自动关闭LCD
第6课第2节_APP_编写支持开关机(suspend)的应用程序
第7课_从系统角度考虑电源管理,我们要学习更多
 

 

嵌入式Linux系统人才学习路线及阶段目标

嵌入式Linux可以分为两类:底层系统、应用开发

先把开发板当作单片机来用,这可以让你熟悉LINUX环境编程、熟悉ARM板的硬件操作就是写各种裸板程序
接着学习UBOOT,你可以认为UBOOT就是各种裸板程序的集合。如果觉得UBOOT太复杂,可以看毕业班视频里从零写Bootloader,你把它理解了就可以
接着移植LINUX,这稍做一下就可以了,不用深究,知道怎么配置、编译就可以
文件系统:这是要弄懂的,这让你对LINUX启动后的流程有所了解
驱动程序:这才是重点,看第2期视频吧。我都是由浅到深地讲,每个驱动从零现场写代码
最后是整个项目的经验,看第3期视频,从应用到驱动,实现了3个大项目及6个衍生项目


你可能感兴趣的:(嵌入式linux)