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

news2024/12/24 21:26:17

包含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.o

all:

        make -C /lib/modules/

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

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

相关文章

JS 异步 Promise、Async、await详解

目录 一、JS里的同步异步 二、Promise 1、状态 2、all()、race()、any() 3、简单案例 4、异步执行案例 5、解决异步嵌套繁琐的场景 三、async和await 1、async返回类型 2、async与await结合使用的简单案例 3、解决异步嵌套问题 4、批量请求优化 一、JS里的同步异步…

【Vue3】Vue3相比Vue2有哪些新特性?全面解析与应用指南

🧑‍💼 一名茫茫大海中沉浮的小小程序员🍬 👉 你的一键四连 (关注 点赞收藏评论)是我更新的最大动力❤️! 📑 目录 🔽 前言1️⃣ 响应式系统的改进2️⃣ Composition API的引入3️⃣ 更好的Type…

Vue 事件阻止 e.preventDefault();click.prevent

Vue 事件阻止 Vue 事件阻止 e.preventDefault(); click.prevent修饰符

基于vue3和elementPlus的el-tree组件,实现树结构穿梭框,支持数据回显和懒加载

一、功能 功能描述 数据双向穿梭:支持从左侧向右侧转移数据,以及从右侧向左侧转移数据。懒加载支持:支持懒加载数据,适用于大数据量的情况。多种展示形式:右侧列表支持以树形结构或列表形式展示。全选与反选&#xf…

leetcode-21-合并两个有序链表

题解: 1、初始化哑节点dum 2、 3、 代码: 参考:leetcode-88-合并两个有序数组

WPF怎么通过RestSharp向后端发请求

1.下载RestSharpNuGet包 2.请求类和响应类 public class ApiRequest {/// <summary>/// 请求地址/// </summary>public string Route { get; set; }/// <summary>/// 请求方式/// </summary>public Method Method { get; set; }/// <summary>//…

指派问题的求解

实验类型&#xff1a;◆验证性实验 ◇综合性实验 ◇设计性实验 实验目的&#xff1a;学会使用Matlab求解指派问题。 实验内容&#xff1a;利用Matlab编程实现枚举法求解指派问题。 实验例题&#xff1a;有5人分别对应完成5项工作&#xff0c;其各自的耗费如下表所示&#…

vue3 gsap 基于侦听器的动画

1、gsap实现动画 https://gsap.com/ .以上来自baidu ai 2、代码&#xff1a; 安装gsap&#xff1a;pnpm install gsap <script setup> import { ref, reactive, watch } from vue import gsap from gsapconst number ref(0) const tweened reactive({number: 0 })wat…

Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶

CustomScrollView 效果 1. 关键组件 CustomScrollView, SliverOverlapAbsorber, SliverPersistentHeader 2. 关键内容 TLDR SliverOverlapAbsorber 包住 pinned为 true 的组件 可以被CustomScrollView 忽略高度。 以下的全部内容的都为了阐述上面这句话。初阶 Flutter 开发知…

江协科技STM32学习- P29 实验- 串口收发HEX数据包/文本数据包

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

4.1 进程管理

在异步通信中&#xff0c;每个字符包含1位起始位、7位数据位和2位终止位&#xff0c;若每秒钟传送500个字符&#xff0c;则有效数据速率为&#xff08; &#xff09;。 A. 500b/s B. 700b/s C. 3500b/s D. 5000b/s 正确答案是 C。 解析 本题考查异步传输协议基础知识。 根据题目…

[进阶]集合的进阶(1)泛型

文章目录 泛型的深入泛型的细节泛型可以在很多地方定义泛型的继承和通配符总结 泛型的深入 泛型:是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查 泛型的格式:<数据类型> 注意:泛型只能引用数据类型 泛型的好处 统一了数据类型…

GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(4)

写在前面 本系列文章主要讲解道路车辆电气及电子设备的环境条件和试验GB/T 28046标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解GB/T 28046标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 第3部分&#xff1a;机械负荷 4.1 振动 …

【案例】旗帜飘动

开发平台&#xff1a;Unity 6.0 开发工具&#xff1a;Shader Graph 参考视频&#xff1a;Unity Shader Graph 旗帜飘动特效   一、效果图 二、Shader Graph 路线图 三、案例分析 核心思路&#xff1a;顶点偏移计算 与 顶点偏移忽略 3.1 纹理偏移 视觉上让旗帜保持动态飘动&a…

小白从零开始配置pytorch环境

一、下载ANACONDA 官方网址Anaconda Installers and Packages 笔者选择的是Anaconda3-5.3.0-Windows-x86_64.exe版本。全程安装可以手机开热点&#xff0c;会快一点。 二、查看电脑是否有显卡 1、打开任务管理器 2、查看电脑CUBA版本&#xff0c;如上篇文章所提到查看CUDA-V…

11.1 网络编程-套接字

练习&#xff1a; 使用搭建好的服务器和客户端&#xff0c;实现一个完整的注册&#xff0c;登录功能 服务器使用链表 文件IO的形式去记录账号和密码 代码实现&#xff1a; 服务器端&#xff1a; #include <myhead.h> struct Pack{char flags;char na…

基于MATLAB的战术手势识别

手势识别的研究起步于20世纪末&#xff0c;由于计算机技术的发展&#xff0c;特别是近年来虚拟现实技术的发展&#xff0c;手势识别的研究也到达一个新的高度。熵分析法是韩国的李金石、李振恩等人通过从背景复杂的视频数据中分割出人的手势形状&#xff0c;然后计算手型的质心…

面试题整理 1

实际参与的某公司面试&#xff0c;总结了遇到的值得整理记录的面试题。 目录 相对路径 正序判断 倒序判断 输出部门负责人及下级 代码实现 最终效果 科目平均分 SQL筛选 代码实现 分组错误 原因 查看版本 确认模式 设置模式 相遇洞穴 代码实现 方式一&#xf…

mysql查表相关练习

作业要求&#xff1a; 单表练习&#xff1a; 1 . 查询出部门编号为 D2019060011 的所有员工 2 . 所有财务总监的姓名、编号和部门编号。 3 . 找出奖金高于工资的员工。 4 . 找出奖金高于工资 40% 的员工。 5 找出部门编号为 D2019090011 中所有财务总监&#xff0c;和…

基于yolov5的输电线,电缆检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; yolov5&#xff0c;输电线(线缆)检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测【pytorch框架】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的输…