ARM驱动开发

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-674618.html

到了这里,关于ARM驱动开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机】STM32 ARM Cortex-M0 微控制器特性概述 双排 TSSOP封装好手工焊接的STM32芯片,双排

    STM32F070CB STM32F070RB STM32F070C6 STM32F070F6 在嵌入式系统和物联网应用中,ARM Cortex-M0 微控制器以其强大的性能和丰富的功能而备受瞩目。本文将介绍该微控制器的主要特性,使读者更好地了解其适用范围和潜在应用。 ARM® 32位 Cortex®-M0 CPU 频率高达 48 MHz Flash 存储器 32 到 128 Kbytes

    2024年01月18日
    浏览(34)
  • ARM单片机中断处理过程解析

    前言 中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于ARM单片机中断的具体处理行为,你真的搞清楚了吗? 今天来简单聊一聊,ARM单片机中断处理过程中的具体行为是什么样的,搞清楚了这些,让你彻底理解中断是如何执行的。 掌

    2024年02月06日
    浏览(35)
  • ARM、树莓派、Arduino、单片机四者有什么不同

    一张图展示它们之间的关系,如下所示: 什么是arm? 其实ARM是一种微处理器架构,但它和“手臂”(Arm)毫无关系,哪怕在拼写上一样。虽然两者都十分强壮,但ARM更像一个小而精干的智能脑袋,可以帮助各种设备实现高效、可靠的计算和控制。 ARM,全称为Advanced RISC Mach

    2024年04月16日
    浏览(31)
  • 001_区分单片机、arm、DSP、FPGA(零基础也能区分)

    单片机是指一个集成在一个芯片上的完整计算机系统,最早的单片机由微处理器核心、存储器、输入输出端口和计时电路等基本部分组成。例如,Intel公司推出的第一款单片机是Intel 8048,它于1976年发布,包括一个8位的中央处理器、ROM、RAM、输入输出端口和计时电路等基本模

    2024年02月08日
    浏览(34)
  • 32 位 ARM® Cortex®-M0+ 单片机,PY32F002B 系列微控制器

    PY32F002B 系列微控制器采用高性能的 32 位 ARM® Cortex®-M0+内核,宽电压工作范围的 MCU。嵌入24Kbytes Flash 和 3Kbytes SRAM 存储器,最高工作频率 24MHz。包含多种不同封装类型多款产品。 芯片集成I2C、SPI、USART 等通讯外设,1 路 12bit ADC,2 个 16bit 定时器,以及 2 路比较器。PY32F002B 系

    2024年02月05日
    浏览(36)
  • 单片机开发教程5——51单片机驱动TFT彩屏

    TFT.zip 开发资料中的例程有些瑕疵,上面是整理后的例程,修改了一些参数,也添加了不少函数,函数都有对应的注释,只要花心思去看一应该是能看懂怎么用的。此外,这个例程也可以作为你们工程的模板,往上面添加一些函数、完善一下内容,差不多就能做出一个作品了

    2023年04月23日
    浏览(33)
  • STM32单片机驱动L298N

    L298N的工作原理及电路接线以在之前一章博客中讲解完毕,讲解了三种接线方式的区别,及建议。https://blog.csdn.net/m0_59113542/article/details/121038048?spm=1001.2014.3001.5501 本文章主要讲解STM32的驱动程序    众所周知,L298N可以驱动两个电机,分别为通道A、通道B。 ENA是通道A的使能端,

    2023年04月21日
    浏览(29)
  • STM32单片机初学5-IIC通信驱动OLED屏幕

    在我上篇文章(STM32-软件模拟IIC通信)讲解了软件模拟IIC通信。这篇文章详将细讲解利用软件模拟IIC来控制0.96寸的OLED屏幕(如下图),使其显示字符串。本文将不再对IIC通信原理做详细讲解,所以对IIC通信原理不熟悉的话可以参考我上篇文章(点击上面的链接直接跳转)。

    2023年04月10日
    浏览(34)
  • STM32单片机LED显示屏驱动原理与实现

    STM32单片机驱动LED显示屏的原理与实现方法与Arduino类似,但涉及到的具体硬件资源和库函数可能会有所不同。下面是一个详细的介绍:   原理: STM32单片机驱动LED显示屏的原理是通过控制GPIO引脚的电平状态来控制LED的亮灭。通过设置引脚的输出电平为高电平(VCC)或低电平

    2024年02月10日
    浏览(39)
  • 【国名技术】N32G401单片机驱动配置(STM32系列适用)

    N32G401总体上和STM32F4系列差不多,无论是从芯片资源,还是各种寄存器,都有相通之处,所以N32G401的所有驱动,如果使用smt32的话也可以借鉴使用(修改函数名) 文章代码仅限于参考,如果直接CV是肯定用不了的,源代码链接在最后 PS:所有驱动基于N32G401F7S8-1,一共20个引脚,

    2024年01月19日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包