当前位置: 首页 > news >正文

【移植】小型系统平台驱动移植

往期知识点记录:

  • 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
  • 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
  • 持续更新中……

平台驱动移植

在这一步,我们会在源码目录 //device/vendor_name/soc_name/drivers 目录下创建平台驱动,如果你要移植的 SOC 的厂商还没有创建仓库的话,请联系  sig_devboard 创建。
建议的目录结构:

device
├── vendor_name
│   ├── drivers
│   │   │   ├── common
│   │   │   ├── Kconfig # 厂商驱动内核菜单入口
│   │   │   └── lite.mk # 构建的入口
│   ├── soc_name
│   │   ├── drivers
│   │   │   ├── dmac
│   │   │   ├── gpio
│   │   │   ├── i2c
│   │   │   ├── LICENSE
│   │   │   ├── mipi_dsi
│   │   │   ├── mmc
│   │   │   ├── pwm
│   │   │   ├── README.md # docs 如果需要的话
│   │   │   ├── README_zh.md
│   │   │   ├── rtc
│   │   │   ├── spi
│   │   │   ├── uart
│   │   │   └── watchdog
│   ├── board_name

HDF 为所有的平台驱动都创建了驱动模型,移植平台驱动的主要工作是向模型注入实例。 这些模型你可以在源码目录 //drivers/hdf_core/framework/support/platform/include 中找到定义。
本节我们会以 GPIO 为例,讲解如何移植平台驱动,移植过程包含以下步骤:

  1. 创建 GPIO 驱动
    在源码目录 //device/vendor_name/soc_name/drivers/gpio 中创建文件 soc_name_gpio.c。内容模板如下:
    #include "gpio_core.h"// 定义GPIO结构体,如果需要的话struct SocNameGpioCntlr {struct GpioCntlr cntlr;  // 这是HDF GPIO驱动框架需要的结构体int myData; // 以下是当前驱动自身需要的};// Bind 方法在HDF驱动中主要用户对外发布服务,这里我们不需要,直接返回成功即可static int32_t GpioBind(struct HdfDeviceObject *device){(void)device;return HDF_SUCCESS;}// Init方法时驱动初始化的入口,我们需要在Init方法中完成模型实例的注册static int32_t GpioInit(struct HdfDeviceObject *device){SocNameGpioCntlr *impl = CreateGpio(); // 你的创建代码ret = GpioCntlrAdd(&impl->cntlr);  // 注册GPIO模型实例if (ret != HDF_SUCCESS) {HDF_LOGE("%s: err add controller:%d", __func__, ret);return ret;}return HDF_SUCCESS;}// Release方法会在驱动卸载时被调用,这里主要完成资源回收static void GpioRelease(struct HdfDeviceObject *device){// GpioCntlrFromDevice 方法能从抽象的设备对象中获得init方法注册进去的模型实例。struct GpioCntlr *cntlr = GpioCntlrFromDevice(device);//资源释放...}struct HdfDriverEntry g_gpioDriverEntry = {.moduleVersion = 1,.Bind = GpioBind,.Init = GpioInit,.Release = GpioRelease,.moduleName = "SOC_NAME_gpio_driver", // 这个名字我们稍后会在配置文件中用到,用来加载驱动。};HDF_INIT(g_gpioDriverEntry); // 注册一个GPIO的驱动入口
  1. 创建厂商驱动构建入口
    如前所述 device/vendor_name/drivers/lite.mk 是厂商驱动的构建的入口。我们需要从这个入口开始,进行构建。
    #文件device/vendor_name/drivers/lite.mkSOC_VENDOR_NAME := $(subst $/",,$(LOSCFG_DEVICE_COMPANY))SOC_NAME := $(subst $/",,$(LOSCFG_PLATFORM))BOARD_NAME := $(subst $/",,$(LOSCFG_PRODUCT_NAME))# 指定SOC进行构建LIB_SUBDIRS += $(LITEOSTOPDIR)/../../device/$(SOC_VENDOR_NAME)/$(SOC_NAME)/drivers/
  1. 创建 SOC 驱动构建入口
    #文件device/vendor_name/soc_name/drivers/lite.mkSOC_DRIVER_ROOT := $(LITEOSTOPDIR)/../../device/$(SOC_VENDOR_NAME)/$(SOC_NAME)/drivers/# 判断如果打开了GPIO的内核编译开关ifeq ($(LOSCFG_DRIVERS_HDF_PLATFORM_GPIO), y)# 构建完成要链接一个叫hdf_gpio的对象LITEOS_BASELIB += -lhdf_gpio# 增加构建目录gpioLIB_SUBDIRS    += $(SOC_DRIVER_ROOT)/gpio endif# 后续其他驱动在此基础上追加
  1. 创建 GPIO 构建入口
    include $(LITEOSTOPDIR)/config.mkinclude $(LITEOSTOPDIR)/../../drivers/adapter/khdf/liteos/lite.mk# 指定输出对象的名称,注意要与SOC驱动构建入口里的LITEOS_BASELIB 保持一致MODULE_NAME := hdf_gpio# 增加HDF框架的INCLUDELOCAL_CFLAGS += $(HDF_INCLUDE)# 要编译的文件LOCAL_SRCS += soc_name_gpio.c# 编译参数LOCAL_CFLAGS += -fstack-protector-strong -Wextra -Wall -Werror -fsigned-char -fno-strict-aliasing -fno-commoninclude $(HDF_DRIVER)
  1. 配置产品加载驱动
    产品的所有设备信息被定义在源码文件 //vendor/vendor_name/product_name/config/device_info/device_info.hcs 中。
    平台驱动请添加到 platform 的 host 中。

说明:
moduleName 要与驱动定义中的相同。

root {...platform :: host {device_gpio :: device {device0 :: deviceNode {policy = 0;priority = 10;permission = 0644;moduleName = "SOC_NAME_gpio_driver"; }}}
}

最后

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

在这里插入图片描述

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

鸿蒙开发面试真题(含参考答案):

在这里插入图片描述

《OpenHarmony源码解析》:

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片
在这里插入图片描述

相关文章:

  • 计算机毕业设计 基于Flask+Vue的博客系统 Python毕业设计 前后端分离 附源码 讲解 文档
  • Python PyQt5 在frame中生成多个QLabel控件和彻底销毁QLabel控件
  • 【工具分享】Chimera勒索病毒解密工具
  • 流行的微前端框架有哪些,适应场景是什么
  • overlayscrollbars使用
  • 基于大数据技术的颈椎病预防交流与数据分析及可视化系统
  • 易燃气体检测系统源码分享
  • 统信服务器操作系统【qcow2 镜像空间扩容】方案
  • 【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField
  • CVE-2024-1112 Resource Hacker 缓冲区溢出分析
  • VBA技术资料MF205:移动工作表时名称重复的处理
  • 吹爆这份Stable diffusion提示词攻略!
  • python爬虫:将知乎专栏文章转为pdf
  • 玩美移动AI护肤品推荐解决方案,全新升级 为护肤品牌及其零售商,提供自动匹配推荐产品功能
  • 教师信息素养测评:多维视角下的全面审视
  • ES6指北【2】—— 箭头函数
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • ES6--对象的扩展
  • java8-模拟hadoop
  • JavaScript的使用你知道几种?(上)
  • Java面向对象及其三大特征
  • Python3爬取英雄联盟英雄皮肤大图
  • session共享问题解决方案
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • spring学习第二天
  • Terraform入门 - 3. 变更基础设施
  • 分享一份非常强势的Android面试题
  • 机器学习 vs. 深度学习
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 驱动程序原理
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​如何使用QGIS制作三维建筑
  • !!Dom4j 学习笔记
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ###C语言程序设计-----C语言学习(6)#
  • $GOPATH/go.mod exists but should not goland
  • (007)XHTML文档之标题——h1~h6
  • (1) caustics\
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (LeetCode C++)盛最多水的容器
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (定时器/计数器)中断系统(详解与使用)
  • (二)springcloud实战之config配置中心
  • (力扣题库)跳跃游戏II(c++)
  • (四)c52学习之旅-流水LED灯
  • (五)网络优化与超参数选择--九五小庞
  • (转)linux 命令大全
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • ..回顾17,展望18
  • .aanva
  • .htaccess配置重写url引擎
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET 的静态构造函数是否线程安全?答案是肯定的!