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

ARM驱动开发

  驱动

以来内核编译,依赖内核执行

 驱动可以同时执行多份代码

  没main

 驱动是依赖内核的框架和操作硬件的过程

一,Linux系统组成

app:                                                [0-3G]

---------------------------------系统调用(软中断)---------------------

kernel:                                         【3-4G】

5种功能:

进程管理:进程的创建、销毁、调度等功能

文件管理:通过文件系统ext2/ext3/ext4  yaff  jiffs等来组织管理文件

网络管理 :通过网络协议栈对数据进程封装和拆解的过程

内存管理 :通过内存管理器对用户空间和内核空间内存的申请和释放

设备管理:设备驱动的管理

字符设备驱动:

  1. 按照字节为单位进行访问,顺序访问
  2. 会创建设备文件,open read write close来访问

       块设备驱动:

  1. 按照块(512字节)(扇区)来访问,可以顺序访问,可以无序访问
  2. 会创建设备文件,open read write close来访问

       网卡设备驱动:按照网络数据包来收发的

二,宏内核、微内核

宏内核:将进程、网络、文件、设备、内存等功能集成到内核中 

优点:代码运行效率高 缺点:如果一个部分出错整个内核就崩溃了

eg: ubuntu Android

微内核:只将进程、内存机制集成到内核中,文件设备驱动等在操作系统之外运行

优点:稳定性强  缺点:效率低

eg:鸿蒙 window QNX

三,驱动模块

入口(安装):资源的申请

出口(卸载):资源的释放

许可证:GPL

#include <linux/init.h>
#include <linux/module.h>                                                                          
static int __init  hello_init(void) 
//__init将hello_in it放到.init.text段中
{return 0;
} 
static void __exit hello_exit(void)//__exit将hello_exit放到.exit.text段中
{
}
module_init(hello_init);
//告诉内核驱动的入口地址
module_exit(hello_exit);
//告诉内核驱动的出口地址
MODULE_LICENSE("GPL");
//许可证

 

Makefile:

KERNELDIR:= /lib/modules/$(shell uname -r)/build/  

//内核的路径

#KERNELDIR:= /home/linux/kernel/kernel-3.4.39/

PWD:=$(shell pwd)

//驱动文件的路径

all:  //目标

make -C $(KERNELDIR) M=$(PWD) modules

//进入内核目录下执行make modules这条命令

//如果不指定 M=$(PWD) 会把内核目录中的.c文件编译生成.ko

//M=$(PWD) 向编译模块的路径

clean:

make -C $(KERNELDIR) M=$(PWD) clean

obj-m:=hello.o   //指定编译模块的名字

KERNELDIR:= /lib/modules/$(shell uname -r)/build/  
#KERNELDIR:= /home/linux/kernel/kernel-3.4.39/
PWD:=$(shell pwd)
all: 
make -C $(KERNELDIR) M=$(PWD) modules
clean:
make -C $(KERNELDIR) M=$(PWD) clean
obj-m:=hello.o 	

总结:

1、首先写个程序-》C语言程序-》.c

2、编译-》依靠内核编译( 开发板内核 和Ubuntu内核 (uname -r))

3、写Makefile-》找内核路径

4、当前文件的路径

5、all-》编译 make modules

  1. obj-m:=hello.o

四,内核的打印函数

printk(打印级别 “内容”)->和printf用法类似-》区别多了个打印级别

printk(KERN_ERR "yxc")

include/linux/printk.h

打印等级:

#define KERN_EMERG  "<0>"   /* system is unusable           */

#define KERN_ALERT  "<1>"   /* action must be taken immediately */

#define KERN_CRIT   "<2>"   /* critical conditions          */

#define KERN_ERR    "<3>"   /* error conditions         */

#define KERN_WARNING    "<4>"   /* warning conditions           */

#define KERN_NOTICE "<5>"   /* normal but significant condition */

#define KERN_INFO   "<6>"   /* informational            */

#define KERN_DEBUG  "<7>"   /* debug-level messages         */ 

0 ------ ------     7

最高的  最低的

 cat /proc/sys/kernel/printk(查看打印等级)

       4                        4                      1                  7

终端的级别     消息的默认级别   终端的最大级别  终端的最小级别

使用到的命令:

进入虚拟控制台  ctrl+alt+[F1-F6]

退出虚拟控制台  ctrl+alt+[F7]

sudo insmod hello.ko   安装驱动模块

sudo rmmod  hello      卸载驱动模块

lsmod                  查看模块  -》暂时没有使用

dmesg                  查看消息

sudo dmesg -C          直接清空消息不回显

sudo dmesg -c          回显后清空

驱动安装完成以后更改变量方法:

 lsmod查看驱动

找到路径:

/sys/module/驱动模块的名字/parameters$ 

/sys/module/hello/parameters$ 

进入su修改

su root

echo 123 > a

echo 10  > b

查看: cat a

相关文章:

ARM驱动开发

驱动 以来内核编译&#xff0c;依赖内核执行 驱动可以同时执行多份代码 没main 驱动是依赖内核的框架和操作硬件的过程 一&#xff0c;Linux系统组成 app: [0-3G] ---------------------------------系统调用&#xff08;软中断…...

Matlab图像处理-加法运算

加法运算 图像加法运算的一个应用是将一幅图像的内容叠加到另一幅图像上&#xff0c;生成叠加图像效果&#xff0c;或给图像中每个像素叠加常数改变图像的亮度。 在MATLAB图像处理工具箱中提供的函数imadd()可实现两幅图像的相加或者一幅图像和常量的相加。 程序代码 I1 i…...

Docker容器学习:搭建自己专属的LAMP环境

目录 编写Dockerfile 1.文件内容需求&#xff1a; 2.值得注意的是centos6官方源已下线&#xff0c;所以需要切换centos-vault源&#xff01; 3.Dockerfile内容 4.进入到 lamp 开始构建镜像 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜…...

问道管理:沪指弱势震荡跌0.38%,金融、地产等板块走弱,算力概念等活跃

21日早盘&#xff0c;沪指盘中弱势震荡下探&#xff0c;创业板指一度跌逾1%失守2100点&#xff1b;北向资金小幅净流出。 截至午间收盘&#xff0c;沪指跌0.38%报3120.18点&#xff0c;深成指跌0.24%&#xff0c;创业板指跌0.62%&#xff1b;两市算计成交4238亿元&#xff0c;…...

OpenWrt package - BuildPackage

一. 前言 该文章所涉及到的知识都来自OpenWrt Wiki官网。OpenWrt的软件编译模板系统使软件移植到OpenWrt变得非常简单&#xff0c;如果在一个典型的package目录下&#xff0c;我们可以发现3个东西&#xff1a;package/Makefile&#xff0c;package/patches&#xff0c;package/…...

C++三体星战小游戏

物理小游戏&#xff0c;懒得 写注释。 游戏代码 #include<bits/stdc.h> #include<bits/stdc.h> #include<windows.h> #include<conio.h> using namespace std; int toint(double a){return ((int)(a*105))/10;} int rand(int a){return rand()%a;} vo…...

【zip密码】修改zip压缩包密码

Zip压缩包设置了密码&#xff0c;想要修改密码&#xff0c;我们该如何操作&#xff1f;今天分享两个修改zip压缩包密码的方法。 方法一&#xff1a; 输入密码&#xff0c;将zip压缩包里面的文件解压出来。 然后找到解压出来的文件&#xff0c;将文件重新压缩&#xff0c;并且…...

小小讲一下Linux基本命令

Linux是一套类Unix的操作系统&#xff0c;这套系统最大的优点就是安全便捷&#xff0c;快速高效。这就为它赢得了广大的市场空间。但是呢&#xff0c;Linux系统虽然广为流行&#xff0c;它也不是那么容易就可以学会的。比如说&#xff0c;如果我们不懂得Linux系统的基本操作命令…...

Python数据容器(列表list、元组tuple、字符串str、字典dict、集合set)详解

一、数据容器概念 相关介绍&#xff1a; 一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为一个元素。每一个元素&#xff0c;可以是任意类型的数据分为五类&#xff1a;列表[list]、元组(tuple)、字符串(str)、集合{set}、字典{dict} 相应区别&#xff1a…...

2023高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …...

Linux 计算机网络基础概论

一、网络基本概念 1、网络 网络是由若干节点和连接这些结点的链路组成&#xff0c;网络中的结点可以是计算机、交换机、路由器等设备。通俗地说就是把不同的主机连接起来就构成了一个网络&#xff0c;构成网路的目的是为了信息交互、资源共享。 网络设备有&#xff1a;交换机…...

深入理解 C++ 中的 std::cref、std::ref 和 std::reference_wrapper

深入理解 C 中的 std::cref、std::ref 和 std::reference_wrapper 在 C 编程中&#xff0c;有时候我们需要在不进行拷贝的情况下传递引用&#xff0c;或者在需要引用的地方使用常量对象。为了解决这些问题&#xff0c;C 标准库提供了三个有用的工具&#xff1a;std::cref、std:…...

在其他python环境中使用jupyter notebook

1、切换到目标python环境 activate 目标python环境 2、安装notebook内核包 pip install ipykernel 3、加环境加入到notebook中 python -m ipykernel install 目标python环境 4、切换到base环境 activate base 5、打开目标项目的对应盘 如果&#xff0c;项目在c盘&…...

计算机网络-笔记-第二章-计算机网络概述

目录 二、第二章——物理层 1、物理层的基本概念 2、物理层下面的传输媒体 &#xff08;1&#xff09;光纤、同轴电缆、双绞线、电力线【导引型】 &#xff08;2&#xff09;无线电波、微波、红外线、可见光【非导引型】 &#xff08;3&#xff09;无线电【频谱的使用】 …...

Hive字符串数组json类型取某字段再列转行

一、原始数据 acctcontent1232313[{"name":"张三","code":"上海浦东新区89492jfkdaj\r\n福建的卡"...},{"name":"狂徒","code":"select * from table where aa1\r\n and a12"...},{...}]...…...

ElementUI Table 翻页缓存数据

Element UI Table 翻页保存之前的数据,网上找了一些,大部分都是用**:row-key** 和 reserve-selection,但是我觉得有bug,我明明翻页了…但是全选的的个框还是勾着的(可能是使用方法不对,要是有好使的…请cute我一下…感谢) 所以自己写了一个… 思路: 手动勾选的时候,将数据保存…...

使用 AutoGPTQ 和 transformers 让大语言模型更轻量化

大语言模型在理解和生成人类水平的文字方面所展现出的非凡能力&#xff0c;正在许多领域带来应用上的革新。然而&#xff0c;在消费级硬件上训练和部署大语言模型的需求也变得越来越难以满足。 &#x1f917; Hugging Face 的核心使命是 让优秀的机器学习普惠化 &#xff0c;而…...

AUTOSAR规范与ECU软件开发(实践篇)6.5 BswM模块概念与配置方法介绍

目录 1、BswM模块概念与配置方法介绍 (1) BswMModeRequestPort配置 (2) ModeCondition与LogicalExpression配置...

1.1 VMware Workstation与Kali的安装和配置1

资源见专栏第一篇文章https://blog.csdn.net/algorithmyyds/article/details/132457258 安装VMware 不多加赘述&#xff0c;直接按顺序安装即可。 有以下需注意的地方&#xff1a; 1.建议选择增强型服务&#xff1b; 2.不要加入体验改进计划。是否开启提示更新看你的想法&…...

DDR与PCIe:高性能SoC的双引擎

SoC芯片无处不在&#xff0c;小到家电控制的MCU&#xff0c;大到手机芯片&#xff0c;我们都会接触到。如今大部分芯片设计公司都在开发SoC芯片&#xff0c;一颗SoC芯片可以集成越来越多的功能&#xff0c;俨然它已成为IC设计业界的焦点。 高性能、高速、高带宽的互联和存储的…...

C#_特性反射详解

特性是什么&#xff1f; 为程序元素额外添加声明信息的一种方式。 字面理解&#xff1a;相当于把额外信息写在干胶标签上&#xff0c;然后将其贴在程序集上。 反射是什么&#xff1f; 反射是一种能力&#xff0c;运行时获取程序集中的元数据。 字面理解&#xff1a;程序运行…...

【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

时间复杂度和空间复杂度

全文目录 算法的复杂度时间复杂度大O渐进表示法空间复杂度常见算法复杂度对比 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度…...

mac docker 卡住解决

文章目录 1、问题简述2、重新安装docker3、docker守护进程4、问题解决方案 1、问题简述 在docker desktop上更改了daemon.json的文件内容&#xff0c;应该是参数写的有问题&#xff0c;修改完配置再启动docker desktop就失败了&#xff0c;然后想着卸载docker desktop&#xf…...

linux/centos zookeeper 使用记录

配置cfg 下载zookeeper-3.4.14.tar.gz负责到centos服务器解压 /xxx/zookeeper-3.4.14/conf/下创建zoo.cfg文件并配置以下属性&#xff0c;/bsoft/zookeeperdata/目录先预先创建 tickTime2000 initLimit10 syncLimit5 dataDir/bsoft/zookeeperdata/ clientPort2181zk启动/重启/关…...

用wireshark流量分析的四个案例

目录 第一题 1 2 3 4 第二题 1 2 3. 第三题 1 2 第四题 1 2 3 第一题 题目&#xff1a; 1.黑客攻击的第一个受害主机的网卡IP地址 2.黑客对URL的哪一个参数实施了SQL注入 3.第一个受害主机网站数据库的表前缀&#xff08;加上下划线例如abc&#xff09; 4.…...

Oracle 时区详解

1 简介 由于地球经纬度及地球自转引起的经度方向&#xff0c;不同的经度的地方&#xff0c;所感受到的昼夜是不同 的。有关国际会议决定将地球表面按经线从东到西,每隔经度15度划分一个时区,并且规定 相邻区域的时间相差1小时。 这就是时区的由来。 而实际使用中&#xff0c…...

仿mudou高性能高并发服务器

"这个结局是我的期待&#xff0c;我会一直为你祝福。" 项目实现目标: 仿muduo库One Thread One Loop式主从Reacto模型实现高并发服务器。通过实现高并发服务器组件&#xff0c;简洁快速完成搭建一个高性能服务器。并且&#xff0c;通过组件内提供的不同应⽤层协议⽀…...

vue权限管理——菜单权限设置

1.前提&#xff1a;后端提供菜单对应数据 此处用mockjs模拟 const menuList [{id: 1, path:/uploadSpec,authName: "上传spec", icon: User, children:[], rights:[view,add,edit,delete]},{id: 2, path:/showSpec, authName: "Spec预览", icon: DataAn…...

【LeetCode】228.汇总区间

题目 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b]…...