1. 基础知识
移植内核对技术的要求比拟高、比拟细。
1.1 单片机相干的常识
- 栈的作用
- 加载地址、链接地址
- 重定位
- 几个简略的硬件常识
串口
定时器
- 定时器
- 中断的概念
1.2 Linux操作相干的常识
- Linux常用命令
- 简略的脚本:脚本就是把命令写在一个文件里
- Makefile
- GCC编译命令
1.3 芯片相干常识
- 能浏览芯片手册(英文):移植最小零碎时,波及的手册内容不多
- 能看懂硬件原理图:移植最小零碎时,波及的原理图内容不多
2. 驱动程序常识
对于只有单片机常识的人来说,怎么去操作硬件?
- 间接读写寄存器
- 应用库函数
在RTOS中,实质也是去读写寄存器,然而须要有对立的驱动程序框架。
所以:RTOS驱动 = 驱动框架 + 硬件操作
2.1 以点灯为例
2.1.1 硬件原理
2.1.2 单片机点灯
- 办法1:间接读写寄存器
- 办法2:应用厂家的HAL库
2.1.3 FreeRTOS点灯
2.1.4 rt-thread点灯
- 办法1:间接操作寄存器
- 办法2:应用驱动程序
驱动模型如下:
驱动示例如下:
调用过程框架
调用过程示例
2.1.5 Liteos-a/Linux怎么点灯
应用MMU时,个别APP与内核是互相隔离的。APP通过规范的open/read/write等文件操作函数去调用驱动程序。
如下图所示:
为何要多此一举?
- 它们反对MMU(内存治理单元)
- 用户程序跟内核是分隔开的,用户程序不能间接读写寄存器
- 用户程序通过标准接口拜访驱动程序
- 基于这些内核的软件个别都比单片机软件简单,术业有专攻
- 不应该让写APP的人去看原理图、写驱动、写寄存器
- 软件和硬件隔离,硬件再怎么变动,只须要改驱动,APP不须要改
2.1.6 Android怎么点灯
- Android是Linux操作系统上的一套操作系统
- Android通过Linux来拜访硬件,实质还是Linux驱动
- 个别的C程序、C++程序,能够间接调用open/read/write等函数
- 应用java编写的程序要拜访C函数须要通过JNI
2.2 以LCD为例
2.2.1 硬件原理
- 设置LCD控制器,它会主动从FrameBuffer中读取每个像素的数据发送到LCD上
- 把要显示的文字、图像放入FrameBuffer中
2.2.2 Liteos-a/Linux怎么操作LCD
为何要多此一举?
- 它们反对MMU(内存治理单元)
- 用户程序跟内核是分隔开的,用户程序不能间接读写寄存器
- 用户程序通过标准接口拜访驱动程序
- 基于这些内核的软件个别都比单片机软件简单,术业有专攻
- 不应该让写APP的人去看原理图、写驱动、写寄存器
- 软件和硬件隔离,硬件再怎么变动,只须要改驱动,APP不须要改
2.2.3 Android怎么操作LCD
Android/QT等GUI零碎里:
- LCD会被多个APP应用,如果不对立治理必然乱套
- 所以,必定有一个管理软件,或称为服务软件
- APP自行结构本人的界面,提交给显示显示服务软件
- 显示服务软件:依据多个APP的前后档次,合并最终的显示图像
- 再调用驱动程序显示进去
2.2.4 鸿蒙怎么操作LCD
鸿蒙反对Liteos、Linux内核,在内核之上怎么去为多个APP治理惟一的显示设施?
鸿蒙还反对软总线,实践上能够反对更多的LCD,怎么做?
务软件:
- 依据多个APP的前后档次
- 合并最终的显示图像
- 再调用驱动程序显示进去
原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0201396913445810055?fid=0101303901040230869
作者:韦东山