迅为4412驱动编程自学笔记_驱动注册

字符类GPIO驱动编写 字符类GPIO驱动编写编写“动态申请字符类设备号”驱动platform_device结构体新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchar... 阅读详情

编写hello驱动模块probe_linux_module.c时,需要写以下的结构体。

struct platform_driver hello_driver = {
	
	.probe = hello_probe,
	.remove = hello_remove,
	.shutdown = hello_shutdown,
	.suspend = hello_suspend,
	.resume = hello_resume,
	.driver = {
		.name = DRIVER_NAME,
		.owner = THIS_MODULE,
	}
};

在驱动进行注册时会调用 platform_driver_register(&hello_driver),此时把以上的结构体传入这个注册函数。

在linux的kernel源码中查看得到一下的函数platform_driver_register这个函数的实现:

/**
 * platform_driver_register - register a driver for platform-level devices
 * @drv: platform driver structure
 */
int platform_driver_register(struct platform_driver *drv)
{
	drv->driver.bus = &platform_bus_type;
	if (drv->probe)
		drv->driver.probe = platform_drv_probe;
	if (drv->remove)
		drv->driver.remove = platform_drv_remove;
	if (drv->shutdown)
		drv->driver.shutdown = platform_drv_shutdown;

	return driver_register(&drv->driver);
}

结构体里的probe、remove、shutdown、suspend、resume都是函数,最终会在这个platform_driver_register注册函数注册的时候,通过结构体生成的实例,也就是hello_driver调用那几个函数进行一些操作。

注册驱动

在控制台输入:

insmod /mnt/udisk/4412/probe_linux_module.ko 

出现以下信心表示驱动注册成功:

[root@iTOP-4412]# insmod /mnt/udisk/4412/probe_linux_module.ko 
[ 7003.925932] 
[ 7003.925952]  Hello World enter! 
[ 7003.929684] 	initialized
[ 7003.933116] 	 DriverState is 0

分析一下init初始化函数和probe函数:

static int hello_init(void)
{
	int DriverState;
	printk(KERN_EMERG "\n Hello World enter! \n");
	DriverState = platform_driver_register(&hello_driver);
	printk(KERN_EMERG"\t DriverState is %d\n",DriverState);
	return 0;
}

static int hello_probe(struct platform_device *pdv){
	
	printk(KERN_EMERG "\tinitialized\n");
	return 0;
	
}

结果可以发现:

1、module_init(hello_init)触发hello_init函数。

2、接着hello_init触发platform_driver_register函数。

3、platform_driver_register触发hello_probe函数。

至此,驱动注册完成。

查看驱动模块:

[root@iTOP-4412]# lsmod 
probe_linux_module 1464 0 - Live 0xbf000000
[root@iTOP-4412]# 

卸载驱动模块:

[root@iTOP-4412]# rmmod probe_linux_module

可能会出现一下情况,无法卸载驱动:

[root@iTOP-4412]# rmmod probe_linux_module
rmmod: can't change directory to '/lib/modules': No such file or directory

解决方法:

执行 “mkdir lib/modules/xxx” 指令,xxx 是执行 uname -r 指令后查询的内核版本号。

此时执行 rmmod hello,就会卸载成功。

解决方法来源:https://www.cnblogs.com/lialong1st/p/7763531.html

卸载时控制台打印:

[root@iTOP-4412]# rmmod probe_linux_module
[  630.652158] 
[  630.652175]  Hello World exit! 
[  630.655473] hello_remove

分析:

1、先执行module_exit(hello_exit);函数。

2、跳入static void hello_exit(void)函数。

3、执行platform_driver_unregister(&hello_driver);  函数。

4、调用hello_driver结构体里面的remove函数。

 

在我感觉看来这probe、remove、shutdown、suspend、resume都像是回调函数,函数名在结构体中注册声明,然后整个结构体注册到平台文件中,也就是platform_driver_register这个函数。注册成功直接就能在特定情况下触发这些函数。

Tips:各位看官,看着这些函数名是不是很熟悉,各种实时的RTOS和Android、.NET等等操作系统,都有emove、shutdown、suspend、resume这些类似的函数,安卓里面的就是安卓生命周期函数。所以很多操作系统只要熟练一个或者两个也和学习编程一样,学习效率会提高很多!

 

各位!共勉!努力!为了找到自己满意的工作而努力!!!

奥里给!!!

Exynos4412 ADC 设备驱动开发 具体ADC硬件知识及裸机驱动请看: Exynos4412裸机开发 —— A/D转换器 1、原理图如下: 2、相关寄存器信息 ADC_BASE      0x126C0000 ADCCON        0x0000               1 ADCDLY          0x0008                ADCDAT         0x000C 阅读详情

相关推荐

iTop4412驱动开发之十:SPI驱动

驱动部分: 一、mach-itop4412.c 中注册SPI设备 static struct s3c64xx_spi_csinfo spi2_csi[] = { [0] = { .line = EXYNOS4_GPC1(2), .set_level = gpio_set_value, .fb_delay = 0x2, }, }; static struct spi_board_info spi2_board_info[] __initdata = { { { .modalias

dengruoxian2019的博客 575

设备驱动的probe、remove以及shutdown的顺序

转自http://blog.chinaunix.net/uid-29955651-id-5175102.html 系统中存在很多设备,每个设备在kernel中都有对应的驱动,那么这些驱动初始化设备以及关闭设备的顺序是怎样的呢?本文试图解答这个问题。 1 驱动probe/remove执行时机 probe的执行有两个时机,一是设备创建时,二是驱动注册时;remove相对也有两个执行时机,一是设备

qwaszx523的博客 1万+

Linux 设备驱动篇 - I2c设备驱动

Linux设备驱动篇之I2c设备驱动 fulinux 一、I2C驱动体系 虽然I2C硬件体系结构和协议都很容易理解,但是LinuxI2C驱动体系结构却有相当的复杂度,它主要由3部分组成,即I2C设备驱动、I2C总线驱动和I2C核心。 1.I2C核心 I2C核心是I2c总线和I2c设备驱动的中间枢纽,它以通用的、与平台无关的接口实现了I2C中设备与适配器的沟通,提供了I2C总线驱动和设

fulinux的博客 1万+

platform设备驱动全透析

本文出自 “Inside SW,FW and HW R&D” 博客,请务必保留此出处http://21cnbao.blog.51cto.com/109393/337609 1.1 platform总线、设备与驱动 在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱...

weixin_34176694的博客 257

Tiny4412 LCD驱动(DRM+无设备树)

Linux显示框架主要有FB和DRM两种,Tiny4412官方提供的linux-3.5.0默认使用前者(详见《Tiny4412 LCD驱动(FB)》)。DRM显示框架已成为主流,本文重点分析如何将官方提供的linux-3.5.0改用DRM框架。

OneSea 5279

Exynos4412-fs4412开发板Linux驱动开发实例

这是一套基于Exynos4412-fs4412开发板的Linux驱动开发课程,该课程为期8天,本资源包括字符设备驱动开发实例,块设备驱动开发实例,虚拟网络设备开发实例,除此之外还包括每天的笔记。这是鄙人参加培训实训资料,值得下载,学习该资源可以掌握字符设备、块设备、虚拟网络设备驱动的开发框架。

Linux设备驱动模型-Driver

前言 linux将所有的驱动抽象为struct device_driver结构。这样设计可以方便驱动程序更好编写,在编写驱动的时候只需要将此结构嵌入到具体的驱动中即可。 比如常见的结构:  struct platform_driver结构 struct platform_driver { int (*probe)(struct platform_device *); int (*remo

半月旋空 1516

iTOP-4412内核和Android驱动以及Android测试例程

iTOP-4412-Android4.0-usb-wifi(360二代)内核和Android驱动以及Android测试例程.zip

Exynos4412 OV5640摄像头(一)—— 驱动

以下是迅为4412开发板提供的OV5640摄像头驱动,将OV5640注册为I2C设备,提供设备节点/dev/video0。 驱动下载:https://download.csdn.net/download/q1449516487/11231317 详情参考代码: #include <linux/init.h> #include <linux/module.h> #in...

JIWilliams 7750

FS4412 各模块驱动代码

FS4412 SPI ADC BEEP LED DS18B20 I2C KEY MPU6050 TOUCH 驱动代码

迅为4412开发板编写简单应用调用驱动

本文章是关于迅为4412开发板编写简单应用调用驱动。

exynos4412开发板设备注册与驱动注册剖析

exynos4412开发板设备注册与驱动注册剖析 linux内核的主要组成部分由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS),网络接口(NET),进程间通信(IPC) 查看linux系统的总线ls /sys/bus 查看linux系统的设备cat /proc/devices ###**Linux驱动和设备的注册过程** Linux 内核会要求每出现一个设备就要向总线汇报,或者说注册,出现

夜黯竹亭风的博客 1349

基于 MATLAB 的综合能源系统建模:全面解析与案例应用 

本文详细介绍了基于 MATLAB 的综合能源系统建模相关知识,包括 MATLAB 在综合能源建模中的优势、综合能源系统各组件和网络的建模方法,并通过园区综合能源系统的案例展示了从建模到优化调度求解以及结果分析的全过程。在当今全球能源格局深刻变革的背景下,综合能源系统(Integrated Energy System,IES)作为一种创新的能源供应体系,整合了多种能源形式,如电力、热力、燃气等,以实现能源的高效生产、传输、分配和利用。需要考虑燃气的压力、流量特性以及管道的阻力特性等。

qq_57128262的博客 1336

linux 笔记1基于iTop4412,学习记录。(包括设备注册设备驱动注册使用)

以下内容是本人学习讯为的4412,记录的一些常用的指令和操作,以便以后查看方便。 内核编译的指令: 进入文件夹“iTop4412_Kernel_3.0 ”,使用命令 “cp config_for_android_pop_elite .config”覆盖自带的配置文件,如下图所示 二.模块加载方法 1.将生成的 .ko 文件拷贝到u盘或者 sd卡 2...

wzy@jinan 632

MacOS Intel芯片实战:Docker Compose一键部署Dify全流程解析

本文详细解析了在搭载Intel芯片的MacOS系统上,使用Docker Compose一键部署开源LLM应用开发平台Dify的全流程。内容涵盖环境准备、Docker配置与镜像加速、代码拉取与配置初始化、服务启动与问题排查,以及访问验证与初步探索,旨在帮助开发者快速在本地搭建私有化AI应用开发环境。

ik678901234的博客 619

移动机器人底盘-四轮差速模型(四轮独立)

对于底盘的前轮和后轮来说,其速度是同步的,那么在理想条件下,可以将底盘运动视为以ICR为圆心做圆周运动,对于四个轮子来说,圆周运动的角速度是一致的,圆周运动圆心ICR始终位于底盘几何中心COG的y轴延长线上,ICR与COG之间的距离。有关,整个底盘的速度位于速度瞬心COM处,用。四轮差速底盘设定左轮、右轮得速度分别为。圆周运动的角速度公式如式1所示。受约束,约束与圆周运动的角速度。合成,设四个轮子的速度分别为。,设左轮和右轮之间的轴距为。为圆周运动角速度,线速度为。,其均由预设目标速度。

Moresweet 猫甜 1万+

FIMC驱动实现V4L2框架与ov5640摄像头驱动——iTop4412平台

FIMC驱动框架与ov5640摄像头驱动——iTop4412平台 一、i2c设备与驱动注册 ov5640摄像头的i2c由设备和驱动两部分构成,设备注册和驱动注册。先说不同一般i2c设备注册部分,在平时我们添加i2c设备时,需要修改平台文件(.../iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c)在对应I2C总线的结构体下...

haiwei的博客 3210

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

【迅为iTop4412学习笔记】5. platform注册字符设备

声明 以下都是我刚开始看驱动视频的个人强行解读,如果有误请指出,共同进步。 本节目标 无 上一篇说注册设备的时候谈到一个结构体 platform_device,我们直接找到linux的定义查看,首先你要进iTop4412源代码目录,输入命令 vim include/linux/platform_device.h 一进来就看到 struct platform_device { ...

MrYang 432

两张 300I Duo 部署 Qwen3.5‑32B

开发者成功使用两张华为300IDuo(共4颗Ascend310P3芯片)部署Qwen3/Qwen3.5的30B/32B模型,并公开详细步骤。关键点包括:硬件需两张300IDuo(每芯片44GB显存),软件需CANN≥24.1和MindIE2.3.0专用镜像。部署流程涵盖驱动安装、模型下载(需修改为FP16格式)、容器启动、张量并行配置(TP=4)等环节。实测显示每芯片显存占用20-35GB,系统稳定运行。该方案已在知乎等平台验证可行,适用于Qwen3.5-32B等同类模型。

evering的博客 2254

SoIC、CoWoS、InFO一次讲透:从2D/2.5D/3D看懂先进封装

先进封装是后摩尔时代提升芯片性能的关键路径,但面对SoIC、CoWoS、InFO这些名词,很多人容易混淆。理解它们,需从最基本的2D、2.5D、3D封装概念入手:2D是传统平房,2.5D通过硅中介层实现高密度互连,3D则让芯片直接堆叠。CoWoS作为2.5D中介层封装,已成为AI芯片与HBM高带宽存储集成的行业标准;SoIC通过铜-铜混合键合实现真正的3D堆叠,为逻辑与缓存提供极致带宽;InFO以扇出型封装兼顾成本与集成度,广泛用于移动SoC。在系统级封装(SiP)和CPO共封装光学等前沿趋势中,这些技术往

weixin_42388898的博客 310

itop4412 设备注册、驱动注册、设备、platform总线之间的关系,和流程

itop4412 设备注册、驱动注册、设备、platform总线之间的关系,和流程; 废话少说,直接上干货。 一、platform之设备: 要想在platform 的杂项下(misc) 加载一个新的设备,需要在 1、在 arch\arm\mach-exynos\mach-itop4412.c 中进行修改。 2、新定义一个设备的结构体(struct platform_device s3c_devic...

fyge_free的博客 518

基于YOLOv10的机器人抓取引导系统:从物体检测到精准抓取

python# 数据标注工具简化版import os"""启动标注工具""""""标注单张图像"""print(f"标注图像: {os.path.basename(img_path)}")print("请在图像上绘制抓取矩形框...")# 这里应该实现交互式标注界面# 简化版本直接返回示例标注# 示例标注数据"""保存标注结果"""# 保存为YOLO格式# 转换为YOLO格式。

YOLO 377

Exynos4412——LCD驱动

优快云仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。 本博文对应地址: https://hceng.cn/2017/12/22/Exynos4412——LCD驱动/#more Exynos4412的LCD驱动。 终于迎来了LCD驱动,本该10月初就搞定的事,一直拖到了12月份。 不过,晚来总比不来好,完成这个心结,才好进入下一个阶段。 1. 基础...

hceng_linux 4466

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iTop-4412的Linux驱动中设备注册和驱动注册笔记整理及分析,不会让你失望的

上一篇文章里有一部分没有整理那就是关于编译内核的时候编译器路径的设置部分,拿到源码后一般需要设置一下编译器路径,在源码目录Makefile文件中可以设置编译路径“CROSS_COMPILE”在该文件的180行左右有如下代码: CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi- “CROSS_COMPIL...

小凌哥的博客 550

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: ESP8266 UDP通信踩坑(Arduion core for esp8266)
下一篇: 荔枝派Zero 制作TF启动卡详细过程(绝对能用)
Code_MoMo
博客等级 码龄9年 20粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值