【超详细】嵌⼊式软件学习⼤纲
⽬录
随便聊聊
前两天上传了我⾃⼰在整个⼤学阶段单⽚机的学习历程(个⼈感觉已经⾮常详细和真实了,包括⾃⼰在某个阶段遇到的问题,单⽚机学
好了分析完单⽚机与嵌⼊式的差别,我们再来了解⼀下什么是PC机,PC机与嵌⼊式的差别体现在哪?
PC是什么呢?PC指的就是个⼈计算机,它是指⼀种⼤⼩、价格和性能适⽤于个⼈使⽤的多⽤途计算机(这是PC机的⼀⼤特点即通⽤
在编程语⾔⽅⾯嵌⼊式开发主要使⽤C语⾔,有的朋友会问我:我C语⾔⼀窍不通能不能学习嵌⼊式?我认为是可以的,不过前提是先
去学习⼀下简单的C语⾔基础,不需要你学的特别精深,但是基础的知识内容还是要懂的。当然嵌⼊式开发还会⽤到汇编语⾔,这个可以在
学习嵌⼊式裸机的时候边学裸机边学ARM汇编(没必要吧汇编学的太精通,当然如果你有的是时间,那当然多多益善),在嵌⼊式中间层
的开发上会⽤到C++多⼀些,个⼈建议⽤到哪⼀步学到哪⼀步,不建议把CC++汇编java都学好再来看嵌⼊式(那都猴年马⽉了),应
1.了解当前主流操作系统及其特点
2.了解什么是双系统与虚拟机
3.基于VMware搭建⾃⼰的linux开发环境
4.了解什么是隐藏⽂件与⾮隐藏⽂件(与windows系统做对⽐学习)
5.了解什么是相对路径与绝对路径(与windows系统做对⽐学习)
6.了解linux内核&各个发⾏版的差别
7.了解GUI(图形⽤户界⾯)和cmdline(命令⾏)
常⽤命令:例如ls、cd 、pwd&mkdir&mv&touch&cp 、rm&cat&rmdir 、ln(软连接与硬连接)、man、apt-get、
9.学习linux中的⽂件类型标记⽅法
10.学习什么是编辑器&vi和vim的关系
11.了解vi的两种⼯作模式
12.学习vi⾼级应⽤:查找&快速切换⾏&设置显⽰⾏号
13.学习linux命令⾏中⼀些符号的含义
14.学习vi⾼级应⽤:⾏删除&⾏复制粘贴
15.了解普通⽤户与特权⽤户 su命令切换⽤户
与linux中权限表⽰
17.懂得ubuntu中使⽤sudo暂时获取root权限
18.学习linux⾼阶命令:find、grep&which&whereis、uname&关机重启命令、tree&mount&df、⽤户管理&权限管理及其他可能⽤到的⾼阶命令
预备知识第⼀部分-C基础学习⼤纲
1.C语⾔基本概念
2.C语⾔程序开发的⼀般步骤
3.使⽤printf进⾏格式化输出
中共享⽂件夹功能的使⽤
5.C语⾔数据类型之整形
6.数据类型之整形回顾
7.数据类型之浮点型
8.数据类型之字符型
9.有符号数和⽆符号数
10.C语⾔运算符之算术运算符
11.复合算术运算符
12.++与--运算符和代码风格问题
13.运算符总结和顺序结构
14.第⼀种选择结构if el
循环
16.第⼆种选择结构switch ca结构
17.循环结构while和do while
18.C语⾔之函数
19.函数三要素:定义声明和调⽤
20.函数的形参和实参
21.函数的返回值、函数名
22.C语⾔之数组
23.数组的初始化
24.不同数据类型的数组
运算符
26.字符数组和字符串
27.C语⾔之指针
28.C语⾔之结构体
29.C语⾔之共⽤体(Union)
30.C语⾔之宏定义
31.宏定义和枚举
32.C语⾔进阶篇
⼆、ARM裸机学习
这⾥的ARM裸机学习与STM32的裸机学习是完全不同的,这⾥的裸机学习基于嵌⼊式系统硬件的,不再是基于windows下的IDE进⾏
开发,⽽是在Linux中拥有ARM-linux交叉编译链进⾏开发,通过usb、SD卡多种⽅式进⾏烧写。当然ARM裸机的学习不单单是学习ARM
裸机,他同样是的针对Linux的基本操作的训练,及学习makefile的制作重定位连接⽂件的制作等等,对下⼀步学习Uboot及Linux内核有
着⾄关重要的作⽤,好了废话不多说,直接上⼤纲:
ARM琐碎知识的学习(⾄关重要)
这部分主要是针对ARM的背景知识和零散杂碎知识的学习,⽬的是为之后的正式学习做铺垫。这些内容对于初学者来说⾮常重要。
1.了解ARM的成长史
2.了解ARM的商业模式和⽣态系统
4.了解开发板的各个版本号学习
5.学习SoC和CPU的区别&外设概念的引⼊
6.了解主流学习型主芯⽚
7.详细了解开发板
8.了解嵌⼊式和单⽚机的区别
9.学习嵌⼊式系统的构成特点和演进⽅向
10.学习什么是交叉编译
11.了解CPU的设计原理、数据总线和地址总线
12.学习Jlink、SD卡等辅助设备的使⽤及使⽤原因
ARM裸机第⼆部分-ARM体系结构与汇编指令
这部分是ARM裸机学习的第⼆部分,主要内容是ARM体系结构(指令集和CPU的关系、RISC与CISC、冯诺依曼结构与哈佛结构
等)、S5PV210的地址映射、内存外存的连接⽅式,S5PV210的启动过程详解,S5PV210的编程模式与内部通⽤寄存器、异常向量
表,ARM常⽤汇编指令等。
1.学习可编程器件的编程原理
2.学习指令集对CPU的意义
3.了解RISC和CISC的区别
4.了解统⼀编址&独⽴编址&哈佛结构&冯诺依曼结构
5.深⼊了解软件编程控制硬件的关键-寄存器
6.学习ARM体系结构要点
7.了解S5PV210的内存映射详解
8.学习CPU和外部存储器的接⼝
9.学习S5PV210的启动过程详解
11.学习如何在开发板上选择不同启动⽅式
12.了解ARM的编程模式和7种模式
13.了解ARM的37个寄存器详解
14.学习ARM的异常处理⽅式
15.学习ARM汇编指令集(简单学习即可))
ARM裸机第三部分-开发板、原理图和数据⼿册
1.开发板硬件⼿册带读
2.开发板刷系统(USBSD两种⽅式)
3.X210核⼼板、底板原理图导读
4.S5PV210数据⼿册导读
5.x210的dnw刷机
下使⽤dd命令刷写uboot
ARM裸机第四部分-GPIO和LED
1.裸机实验体验之usb启动配合dnw⼯具下载
2.裸机实验体验之SD卡下载
3.⾃⼰动⼿安装交叉编译⼯具链
le⼤侠隆重登场
210_image.c⽂件详解
6.⼀步步点亮LED1_硬件⼯作原理及原理图查阅
7.⼀步步点亮LED2_数据⼿册查阅及相关寄存器浏览
8.⼀步步点亮LED3_从零开始⼿写汇编点亮LED
9.⼀步步点亮LED4_使⽤位运算实现复杂点亮要求
10.⼀步步点亮LED5_汇编编写延时函数并实现LED闪烁效果
11.⼀步步点亮LED6_再难⼀点的流⽔灯效果
12.反汇编⼯具objdump的使⽤简介
ARM裸机第五部分-SDRAM和重定位relocate
1.汇编写启动代码之关看门狗
2.汇编写启动代码之设置栈和调⽤C语⾔
3.汇编写启动代码之开iCache
4.重定位引⼊和链接脚本
5.代码重定位实战
引⼊
初始化
8.汇编初始化SDRAM详解
ARM裸机第六部分-S5PV210的时钟系统
时钟系统简介
2.S5PV210的时钟系统简介
3.S5PV210时钟域详解
4.S5PV210时钟体系框图详解
5.时钟设置的关键性寄存器
6.汇编实现时钟设置代码详解
7.C语⾔实现时钟设置代码详解
ARM裸机第七部分-串⼝通信详解
1.通信涉及的⼏个基础概念
2.串⼝通信的基本概念
3.串⼝通信的基本原理
4.S5PV210串⾏通信接⼝详解
5.S5PV210串⾏通信编程实战
stdio的移植
7.串⼝实验烧录问题总结
ARM裸机第⼋部分-按键和CPU的中断系统
1.什么是按
2.轮询⽅式处理按键
3.串⼝输出和按键消抖
1.主流的外存设备介绍
卡的特点和背景知识
卡的编程接⼝
.4.S5PV210的SD卡启动详解1
5.S5PV210的SD卡启动详解2
6.S5PV210的SD卡启动实战1
7.S5PV210的SD卡启动实战2
8.解决X210开发板的软开关按键问题
ARM裸机第⼗⼀部分-NandFlash和iNand
ash的接⼝
ash的结构
ash的常见操作及流程分析
4.S5PV210的NandFlash控制器
操作代码解析
介绍
卡/iNand操作
/iNand代码实战分析1
/iNand代码实战分析2
/iNand代码实战分析3
ARM裸机第⼗⼆部分-I2C通信详解
1.什么是I2C通信
2.由I2C学通信时序
3.S5PV210的I2C控制器
4.X210板载gnsor介绍
5.I2C总线的通信流程
6.I2C通信代码分析1
7.I2C通信代码分析2
ARM裸机第⼗三部分-ADC
的引⼊
的主要相关概念
3.S5PV210的ADC控制器
转换的编程实践1
转换的编程实践2
ARM裸机第⼗四部分-LCD显⽰器
简介
的接⼝技术
如何显⽰图像1
如何显⽰图像2
的六个主要时序参数1
.的六个主要时序参数2
显⽰的主要相关概念
8.颜⾊在计算机中的表⽰
9.S5PV210的LCD控制器
编程实战1-LCD控制器初始化
编程实战2-显⽰像素&刷背景
编程实战3-横线竖线斜线&画圆
编程实战4-写英⽂中⽂字符
编程实战5-画图
编程实战6-画图测试及调试
16.未完成事项展望
ARM裸机第⼗五部分-触摸屏TouchScreen
1.输⼊类设备简介
2.电阻式触摸屏的原理
3.S5PV210的电阻触摸屏控制器
4.电容触摸屏的原理
5x06电容触摸IC简介
ARM裸机第⼗六部分-shell原理和问答机制引⼊
是什么⿁
实战1-从零写最简单shell
实战2-将简易shell移植到开发板中
实战3-定义标准命令集及解析
实战4-添加第⼀个命令
实战5-添加其他命令1
实战6-添加其他命令2
实战7-实现开机倒计时⾃动执⾏命令1
实战7-实现开机倒计时⾃动执⾏命令2
实战8-初步实现环境变量
⼆、C语⾔进阶
内存这个⼤话题
1.程序运⾏为什么需要内存1
2.程序运⾏为什么需要内存2
3.位、字节、半字、字的概念和内存位宽
4.内存编址和寻址、内存对齐
5.C语⾔如何操作内存
6.内存管理之结构体
7、内存管理之栈
8、内存管理之堆
9、复杂数据结构
C语⾔位操作
1.常⽤位操作符
2.位与位或位异或在操作寄存器时的特殊作⽤
3.如何⽤位运算构建特定⼆进制数
4.位运算实战演练1
5.位运算实战演练2
1.指针数组与数组指针
2.函数指针与typedef
3.函数指针实战1
4.函数指针实战2
5.再论typedef
6.⼆重指针
7.⼆维数组
8.⼆维数组的运算和指针
数组&字符串&结构体&共⽤体&枚举
1.程序中内存从哪⾥来1
2.程序中内存从哪⾥来2
3.程序中内存从哪⾥来2
4.程序中内存从哪⾥来4
5.C语⾔的字符串类型
6.字符串和字符数组的细节
7.C语⾔之结构体概述
8.结构体的对齐访问1
9.结构体的对齐访问2
10.结构体的对齐访问3
of宏与container_of宏
12.共⽤体union
13.⼤⼩端模式1
14.⼤⼩端模式2
15.枚举
C语⾔宏定义与预处理、函数和函数库
1.C语⾔预处理理论
2.C语⾔预处理代码实战
3.宏定义1
4.宏定义2
5.函数的本质
6.函数的基本使⽤
7.递归函数
8.函数库
9.字符串函数
10.数学库函数
11.⾃⼰制作静态链接库并使⽤
12.⾃⼰制作动态链接库并使⽤
三、uboot与linux内核移植
介绍
2.动⼿写第⼀个shell
编程学习1
编程学习2
中的循环结构
中其他值得关注的知识点
le基础回顾
补充学习1
le补充学习2
零距离初体验uboot
1.X210官⽅uboot配置编译实践1
2.X210官⽅uboot配置编译实践2
的源码⽬录分析1
的源码⽬录分析2
的源码⽬录分析3
Insight的基本使⽤
uboot配置和编译过程详解
主Makefile分析1
主Makefile分析2
主Makefile分析3
主Makefile分析4
主Makefile分析5
主Makefile分析6
配置过程详解1
配置过程详解2
的链接脚本
uboot源码分析1-启动第⼀阶段
.S引⼊
_armboot函数简介
_armboot解析1
3.内存使⽤排布
_armboot解析2
_armboot解析3
_armboot解析4
_armboot解析5
_armboot解析6
_armboot解析7
_armboot解析8
_armboot解析9
_armboot解析10
_armboot解析11
_armboot解析12
_armboot解析13
_armboot解析14
启动2阶段总结
uboot源码分析3-uboot如何启动内核
和内核到底是什么
2.启动内核第⼀步:加载内核到DDR中
和uImage的区别联系
启动细节
启动
_bootm_linux函数
7.传参详解
启动内核的总结
uboot源码分析4-uboot的命令体系
命令体系基础
命令解析和执⾏过程分析
如何处理命令集1
1.移植前的准备⼯作
14.04上⽹及安装openssh
3.移植初体验
4.时钟和DDR的配置移植
地址另外配置
地址另外配置2
驱动问题的解决
8.⼀些⼩问题的修补
9.⽹卡驱动移植1
10.⽹卡驱动移植2
11.⽹卡驱动如何⼯作
12.使⽤⾃⼰移植的uboot启动内核
uboot的移植2-从uboot官⽅标准uboot开始移植
1.选择合适的官⽅原版uboot
2.先初步浏览官⽅原版uboot
ig脚本分析
4.先解决官⽅版本uboot的烧录运⾏
.S⽂件分析与移植1
.S⽂件分析与移植2
7.添加DDR初始化1
8.添加DDR初始化2
9.添加uboot第⼆阶段重定位1
10.添加uboot第⼆阶段重定位2
时钟信息显⽰移植1
时钟信息显⽰移植2
时钟信息显⽰移植3
和DDR配置显⽰移植
_init_r移植
2013.10中SD/MMC驱动浏览
卡驱动移植1
卡驱动移植2
卡驱动移植3
20.环境变量的移植
21.环境变量的测试和配置移植
22.⽹卡驱动的移植1
23.⽹卡驱动的移植2
uboot杂记-logo显⽰和fastboot原理等
1.X210的uboot中LCD操作分析
显⽰和LCD屏幕分辨率适配
ot的基本分析
的fastboot代码分析1
的fastboot代码分析2
话说linux内核
1.内核和发⾏版的区别
2.内核和驱动的关联
3.内核和应⽤程序、根⽂件系统的关联
内核的模块化设计
5.选择合适版本的内核
内核的配置和编译原理
内核源码⽬录结构1
内核源码⽬录结构2
3.内核配置和编译体验
4.内核的配置原理1
nfig的使⽤和演⽰
nfig的⼯作原理
g⽂件详解1
g⽂件详解2
nfig的实验学习思路
内核的启动过程分析
1.做好内核分析的准备⼯作
.S⽂件分析1
3.内核启动的汇编阶段
4.内核启动的C语⾔阶段1
5.内核启动的C语⾔阶段2
6.内核启动的C语⾔阶段3
7.内核启动的C语⾔阶段4
8.内核启动的C语⾔阶段5
9.内核启动的C语⾔阶段6
进程详解1
进程详解2
e常⽤参数
13.内核中架构相关代码简介
内核的移植1-从三星官⽅内核开始移植
1.内核移植初体验
2.初步移植以看到启动信息
3.内核中机器码的确定
4.解决内核启动中的错误
的问题和安排
6.⽹卡驱动的移植和添加实验
7.内核启动第⼀阶段的调试⽅法
根⽂件系统的原理
1.根⽂件系统概述
2.根⽂件系统的形式
3.⾃⼰制作ext3格式的根⽂件系统
1.X210的bsp介绍
⽂件分析
oot引⼊
四、linux应⽤编程和⽹络编程
linux中的⽂件IO
1.应⽤编程框架介绍
2.⽂件操作的主要接⼝API
3.⼀个简单的⽂件读写实例
函数的flag详解1
函数的flag详解2
6.⽂件读写的⼀些细节
系统如何管理⽂件
详解
9.多次打开同⼀⽂件与O_APPEND
10.⽂件共享的实现⽅式
11.⽂件描述符的复制1
12.⽂件描述符的复制2
函数介绍
14.标准IO库介绍
⽂件属性
中各种⽂件类型
2.常⽤⽂件属性获取
函数的应⽤案例
4.⽂件权限管理1
5.⽂件权限管理2
6.读取⽬录⽂件
获取系统信息(系统时间、随机数、proc中的⽂件)
1.关于时间的概念
系统中的时间
3.时间相关API实战1
4.时间相关API实战2
中使⽤随机数
⽂件系统介绍
⽂件系统的使⽤
进程(进程环境、进程控制、进程关系、守护进程、进程间通信)
1.程序的开始和结束
2.进程环境
3.进程的正式引⼊
创建⼦进程
5.⽗⼦进程对⽂件的操作
6.进程的诞⽣和消亡
7.⽗进程wait回收⼦进程
信号
1.什么是信号
2.常见信号介绍
3.进程对信号的处理
和pau函数
⾼级IO
1.⾮阻塞IO
2.阻塞式IO的困境
3.并发式IO的解决⽅案
多路复⽤原理
多路复⽤实践
6.异步IO
7.存储映射IO
线程
1.再论进程
2.线程的引⼊
3.线程常见函数
4.线程同步之信号量1
5.线程同步之信号量2
6.线程同步之互斥锁
1.开启驱动开发之路
2.最简单的模块源码分析1
3.最简单的模块源码分析2
4.最简单的模块源码分析3
字符设备驱动⾼级
1.注册字符设备驱动新接⼝1
2.注册字符设备驱动新接⼝2
3.注册字符设备驱动新接⼝3
4.注册字符设备驱动新接⼝4
5.字符设备驱动注册代码分析1
6.字符设备驱动注册代码分析2
7.⾃动创建字符设备驱动的设备⽂件
8.设备类相关代码分析1
9.设备类相关代码分析2
10.静态映射表建⽴过程分析
11.动态映射结构体⽅式操作寄存器
12.内核提供的读写寄存器接⼝
驱动框架⼊门之LED
1.何谓驱动框架
2.内核驱动框架中LED的基本情况
3.初步分析led驱动框架源码
4.在内核中添加或去除某个驱动
5.基于驱动框架写led驱动1
内核的gpiolib学习1
7.使⽤gpiolib完成led驱动
8.将驱动添加到内核中
linux设备驱动模型
设备驱动模型简介
2.设备驱动模型的底层架构
3.总线式设备驱动组织⽅式
rm平台总线简介
misc类设备与蜂鸣器驱动
input⼦系统基础之按键
1.什么是input⼦系统
设备应⽤层编程实践1
设备应⽤层编程实践2
⼦系统架构总览1
⼦系统架构总览2
6.输⼊核⼼层源码分析1
7.输⼊核⼼层源码分析2
8.输⼊事件驱动层源码分析
9.输⼊设备驱动层源码分析1
10.输⼊设备驱动层源码分析2
11.中断⽅式按键驱动实战1
12.中断⽅式按键驱动实战2
触摸屏驱动移植实战
1.触摸屏驱动概览
2.内核中的竞争状态和互斥1
3.内核中的竞争状态和互斥2
4.中断的上下半部1
5.中断的上下半部2
内核的I2C⼦系统详解1
内核的I2C⼦系统详解2
内核的I2C⼦系统详解3
内核的I2C⼦系统详解4
内核的I2C⼦系统详解5
内核的I2C⼦系统详解6
内核的I2C⼦系统详解7
680驱动的移植实践
680驱动源码分析2
680驱动源码分析2
16.⽼版本触摸屏的驱动
本文发布于:2023-11-03 21:41:15,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1699018875205369.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:【超详细】嵌入式软件学习大纲.doc
本文 PDF 下载地址:【超详细】嵌入式软件学习大纲.pdf
留言与评论(共有 0 条评论) |