统信UOS设备驱动开发-常见问题

包含linux设备驱动开发的基础知识及统信UOS设备驱动的总体架构,常用的设备驱动开发调试优化手段及在环境搭建和代码编写过程中常见问题处理等。

文章目录

    • 环境搭建
    • 如何编译驱动
    • 代码编写
    • 如何实现同源异构

在这里插入图片描述
在这里插入图片描述


环境搭建

如何编译内核
下载并解压内核源码包,进入源码根目录,内核的编译过程由当前路径下的Makefile指导完成。要利用该Makefile,首先需要安装make(构建工具)、gcc(编译器)等依赖。如果在Debian/Ubuntu/UOS系统上,这些依赖可以由build-essential软件包统一提供,其他系统单独安装make工具和gcc编译器即可。

在Makefile编写的规则中需要读取依赖文件.config,这个文件定义了Makefile需要使用的CONFIG_XXX变量,直接运行make命令会导致Makefile因为缺少依赖报错。所以在运行make前先运行make xxx_defconfig以生成.config,目标参数xxx_defconfig是存放在源码树中arch//configs/目录下的配置文件,记录了与默认配置不同的选项,该命令用文件中的内容覆盖默认配置形成.config配置文件。默认配置由各子目录下的Kconfig生成。

在make工具构建 xxx_defconfig目标时,需要运行LEX和YACC脚本,在Linux系统上安装flex和bison软件包以满足前置依赖。正确地生成.config文件后,使用make命令就可以进行内核编译流程了。留意过程中的提示信息,可能需要根据开启的配置安装特定的软件包,比如libelf-dev、libssl-dev等。

若需要采用自定义的配置进行编译,建议在生成.config文件之后对其进行修改——可以通过文件编辑器对.config进行修改,也可以使用终端图形界面修改配置(更推荐的方式)。采用图形界面修改配置需要安装依赖包libncurses-dev,然后运行make menuconfig。图形界面的选项来自.config文件,在其中搜索并修改相关配置后,退出时选择保存即可更新对应.config文件。通常建议对用于调试的内核,修改CONFIG_BUILD_SALT的值,以区别已经安装在机器上的内核,若不修改该选项可能导致调试内核在安装时覆盖原有同名内核。

将内核制作成软件包格式能够更加方便存储传输和安装,Makefile也帮我们定义了软件包制作目标,只需要运行make bindeb-pkg即可。为了加快编译速度,在运行命令时添加参数-j 以实现n核并行编译。编译结束后,内核源码树中会保留单个模块的目标*.o文件、由目标文件链接而成的可执行镜像文件vmlinux,如果选择了bindeb-pkg作为编译目标,根目录同级路径下会生成*.deb文件和buildinfo等版本信息文件。根据机器性能不同编译过程耗时可能在几十分钟到几小时不等。

$ sudo apt install  build-essential flex bison libncurses-dev$ git clone https://github.com/deepin-community/kernel.git $ cd kernel$ make x86_desktop_defconfig$ make menuconfig$ make bindeb-pkg -j8 #根据实际核心数设置

以上是本地编译同架构内核的步骤,要实现交叉编译,请下载目标架构提供的交叉编译工具链,设置好环境变量后同样按照以上步骤进行即可。

如何编译驱动

Linux内核驱动以ko文件即内核模块的形式存放和被加载。因此,编译一个驱动就是要编译一份ko文件。无需内核源码树,我们可以在已有系统上编译出符合该系统接口的内核模块文件,这样编译出的模块可以直接在当前正在运行的系统上被加载和进行验证。

以一个命名为UosDemo的模块为例,在准备好源码后将其命名为uosdemo.c,准备一份Makefile指导该模块的编译。该Makefile内容如下。

obj-m += uosdemo.oall:make -C /lib/modules/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5808.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于python主观题自动阅卷系统毕业设计项目

基于python主观题自动阅卷系统毕业设计项目 大家好,我是陈辰学长,一名在 Java 圈辛勤劳作的码农。今日,要和大家分享的是一款基于python主观题自动阅卷系统毕业设计。项目源码以及部署相关事宜,请联系陈辰学长,文末会…

详细分析WebStorageCache 基本知识

目录 1. 基本知识2. Demo 1. 基本知识 相关的源码如下:web-storage-cache WebStorageCache 是一个用于扩展 HTML5 的 localStorage 和 sessionStorage 的库,增加了超时时间管理和序列化功能。它可以存储 JSON 对象,并且在存储数据时可以方便…

如何用手机将驾驶证信息转为结构化Excel表格

在日常生活和工作中,我们经常需要将纸质文档或图片中的信息转化为结构化的电子数据,以便更好地进行管理和分析。驾驶证作为重要的个人证件,其信息的电子化也显得尤为重要。本文将详细介绍如何使用手机将驾驶证信息转化为结构化的Excel表格。 …

Idea自动生成mysql表DML语句

背景 在开发上线的时候,某个表会被多次修改,更改了多个字段。上线的时候需要变更线上数据表,会很麻烦。需要自己写很多个DML语句。 IDEA解决方案 使用IDEA的数据库插件可以很快的得到变更表的DML语句。 步骤: 勾选不同环境的两…

自动化细胞核分割与特征分析

自动化细胞核分割与特征分析 引言效果展示HoverNet概述HoverNet原理分析整体网络框架实例分割原理 HoverNet评估结果复现过程细胞核特征应用说明参考文献总结备注资源获取 本文所涉及所有资源均在传知代码平台可获取 引言 细胞核分割和分类在医学研究和临床诊断中具有重要意义…

[ZJCTF 2019]NiZhuanSiWei

[ZJCTF 2019]NiZhuanSiWei 审题 看到可以传入file,text,和password三个参数。 知识点 php伪协议,反序列化 解题 传入text,看到有file_get_content函数,这个函数表示读取$text文件里的值,返回字符串。 所…

Transformer究竟是什么?预训练又指什么?BERT

目录 Transformer究竟是什么? 预训练又指什么? BERT的影响力 Transformer究竟是什么? Transformer是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,它最初是为解决机器翻译等序列到序列(Seq2Seq)任务而设计的。与传统的循环神经网络(RNN)或卷…

阿里云对象存储OSS

Alibaba Cloud OSS Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 1.引…

element plus中修改el-table的样式

文章目录 前情提要相关环境package.jsonvue代码结果 方式一直接看代码 方式二直接看代码 前情提要 因为项目中用到el-table的时候,需要将el-table表格的样式进行修改,将整个表格的背景颜色从白色变成透明,使得表格变得透明之后,展…

HTML前端页面设计静态网站

浅浅分享一下前端作业&#xff0c;大佬轻喷~ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>一个网…

tauri开发中如果取消了默认的菜单项,复制黏贴撤销等功能也就没有了,解决办法

取消默认的菜单项&#xff1a;清除tauri默认的菜单项&#xff0c;让顶部的菜单menu不显示-CSDN博客 就是通过配置空菜单&#xff0c;让菜单不显示&#xff0c;但是这个引发的问题就是复制黏贴撤销等功能也就没有了&#xff0c;解决办法&#xff1a; 新增加编辑下的子菜单&…

02 高效调优:Oracle内存体系的精细化管理实践

文章目录 高效调优&#xff1a;Oracle内存体系的精细化管理实践一、Oracle内存体系的核心组件1.1 系统全局区&#xff08;SGA&#xff09;1.2 程序全局区&#xff08;PGA&#xff09; 二、各组件的交互关系2.1 Buffer Cache与磁盘I/O2.2 Shared Pool与SQL执行2.3 PGA与会话管理…

Qt中的Model与View 3:从样例出发理解QStringListModel和QListView

目录 Ui文件设计如下&#xff1a; 初始化窗口 这里&#xff0c;就是一经典的例子 你可以看到&#xff0c;我们的环境变量是一个经典的List列表&#xff0c;其中承载的就是我们的字符串。我们现在来仿照着搞一个&#xff1a; Ui文件设计如下&#xff1a; 我们下面来逐一演示用…

【简信CRM-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Python 三维图表绘制指南

Python 三维图表绘制指南 在数据可视化中&#xff0c;三维图表可以更直观地展示数据之间的关系&#xff0c;尤其是当数据具有多个维度时。Python 提供了多个库来绘制三维图表&#xff0c;其中最常用的就是 Matplotlib。本文将介绍如何使用 Matplotlib 绘制三维图表&#xff0c…

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测

粒子群优化双向深度学习&#xff01;PSO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 粒子群优化双向深度学习&#xff01;PSO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BiTCN-BiGRU-Attention粒子…

智能离线语音识别不灵敏?如何改善和提升识别率?

前言 有用户反馈离线语音识别不灵敏&#xff0c;跟着笔者一起分析原因吧。笔者知识能力有限&#xff0c;难免会误&#xff0c;还请大家批评指正。 1 影响离线语音识别的因素 笔者分析离线语音识别不灵敏的原因有以下几点 1.1 运行硬件的算力限制 由于离线语音识别在本地MCU…

7.qsqlquerymodel 与 qtableview使用

目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用qtableview控制列宽&#xff0c;行高&#xff0c;隐藏拖拽行列 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *it…

加入广告联盟有什么条件吗?

加入广告联盟往往并非是一件轻而易举的事情&#xff0c;而是需要满足一系列特定的条件。这些条件的确会因不同的广告联盟而存在显著的差异&#xff0c;然而&#xff0c;以下所列举的是一些在众多广告联盟中较为常见的加入条件。 首先&#xff0c;内容合规是至关重要的一点。发…

实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎

摘要&#xff1a;本文整理自阿里云智能集团研究员、开源大数据平台负责人王峰&#xff08;莫问&#xff09;老师在云栖大会的开源大数据专场上的分享。主要有以下几个内容&#xff1a; 1. Apache Flink 已经成为业界流计算事实标准 2. Flash 向量化流计算引擎核心技术解读 3. F…