韦东山 鸿蒙移植必备的基础知识
2023-02-18 16:44:43 时间
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weidongshan.tmall.com/(天猫)
版本 | 日期 | 作者 | 说明 |
---|---|---|---|
V1 | 2020 | 韦东山 | 适用于鸿蒙学员 |
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的前后层次,合并最终的显示图像
- 再调用驱动程序显示出来
2.2.4 鸿蒙怎么操作LCD
鸿蒙支持Liteos、Linux内核,在内核之上怎么去为多个APP管理唯一的显示设备? 鸿蒙还支持软总线,理论上可以支持更多的LCD,怎么做? 不知道,一起期待它开放出更多源码吧。
百问网技术论坛: http://bbs.100ask.net/
百问网官方wiki(资料下载): http://wiki.100ask.org/
线上课堂: https://www.100ask.net/index
百问网开发板: 淘宝:https://100ask.taobao.com/ 天猫:https://weidongshan.tmall.com/
相关文章
- Win7 Sendto 文件夹
- 多说 CSS 分享
- 手机网页 meta 解释
- 判断手机 UA
- 【JAVA】final关键字
- Ubuntu VPS 优化
- FL Studio水果如何解锁21完整版下载?
- ubuntu wps 不能输入中文解决
- ABAP之单位转换的详细用法
- Ubuntu 鼠标加速度
- 深入理解 PromQL
- Spring Boot 3.x微服务升级经历
- 如何将数学曲线变为机器人轨迹-花式show爱心代码-turtlesim篇
- Dubbo:负载均衡实现解析
- Dubbo:服务路由的实现
- 部署了一个个人博客(好歹服务器不是闲着了)
- Dubbo:集群容错的实现
- docker 安装
- Audirvana for Mac(无损音乐播放器)中文版 v3.5.50
- 稠密检索新突破:华为提出掩码自编码预训练模型,大幅刷新多项基准