![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动开发
无.处安放的灵魂
低调低调...观望期他大佬。
展开
-
Linux gpiolib简要分析
文章目录一、怎么用?二、简要分析gpiolib1、开启gpiolib的sysfs功能一、怎么用?#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/leds.h>#include <asm/io.h>#include <plat/map-base.h>#include <plat/map-s5p.h原创 2020-11-23 19:43:25 · 435 阅读 · 3 评论 -
Linux LED设备驱动框架总结
文章目录Q1:到底什么是驱动框架?Q2:内核驱动框架中的LED位置在哪?Q3:leds目录的特点是什么?Q4:怎么在内核中使能LED驱动框架?Q5:新创建leds目录下,为什么不是空白?Q6:class-led.c的运作基本流程(1)subsys_initcall(leds_init);(2)static int __init leds_init入口函数Q1:到底什么是驱动框架?(1)驱动框架由内核维护者设计,他们将每种类的驱动设计成一套成熟的、标准的、典型的驱动实现。将各个厂家相同的硬件驱动部分抽出来原创 2020-11-04 23:43:37 · 737 阅读 · 1 评论 -
Linux驱动class_create()和device_create()应用
文章目录一、代码二、程序分析Q1:如何自动创建字符设备节点?一、代码#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/gpio.h>#include <plat/gpio-cfg.h>#include <mach/gpio.h>#include <mach/gpio-exynos4.h>原创 2020-10-25 00:27:34 · 745 阅读 · 0 评论 -
字符设备驱动测试(随笔)
文章目录一、任务要求二、完整代码1、module_test.c 驱动部分代码2、app.c 应用程序3、Makefile三、程序分析Q1:注册的流程是什么?Q2: register_chrdev 与 register_chrdev_region/alloc_chrdev_region有什么区别?Q3: register_chrdev_region/alloc_chrdev_region如何使用?Q4:MKDEV、MAJOR、MINOR三个宏有什么作用?Q5: 真正用来注册的是哪个函数?Q6: 在模块入口函数原创 2020-10-17 08:30:09 · 462 阅读 · 0 评论 -
exynos 4412 LED字符设备驱动测试(随笔)
文章目录LED驱动代码以及原理图(1)exynos4412相关的虚拟地址包含哪些文件?(2)怎么对GPIO的虚拟寄存器进行操作?(3)为什么GPL2DAT的偏移量比GPL2CON的多出 0x04?LED驱动代码以及原理图实验的目的:验证gpio的虚拟地址。实验现象:在开发板加载模块时候,LED亮;卸载模块,LED灭#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#in原创 2020-10-11 11:09:43 · 377 阅读 · 0 评论 -
字符设备驱动(随笔)
先奉上代码模块代码#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#define MYMAJOR 0#define NAME "MyModule"int major;static int module_open(struct inode *inode, struct file *file){ printk("module_open\n"); return 0原创 2020-10-11 08:35:27 · 104 阅读 · 0 评论 -
拆解最简单的内核模块(随记)
#include <linux/init.h>#include <linux/module.h>static int __init hello_init(void){ printk(KERN_DEBUG "Hello World enter!\n"); return 0;}static void __exit hello_exit(void) { printk(KERN_DEBUG "Hello World exit!\n");}MODULE_LICENSE(原创 2020-10-07 07:43:05 · 141 阅读 · 0 评论 -
利用模块注册设备的驱动
文章目录1、概述2、相关代码3、测试1、概述与设备驱动相关的结构体和函数有:struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *); int (*suspend)(struct platform_device *, pm_message_t state原创 2020-08-27 00:08:09 · 87 阅读 · 0 评论 -
利用模块注册设备
文章目录1、概述2、详细代码1、概述linux对设备要求是,先注册设备,然后注册设备的驱动。利用模块来注册设备和注册设备对应的驱动,是为了方便学习和测试。当功能测试好后,要在linux源码下对应的开发板的平台文件进行注册设备。然后编译源码。在这里,先来分析一下怎么利用模块来注册设备。与注册设备相关的数据结构和函数有:struct platform_device { const char *name; int id; bool id_auto; struct device dev;原创 2020-08-26 23:55:25 · 101 阅读 · 0 评论 -
linux内核裁剪的“秘密”
文章目录通过Kconfig文件,形成菜单make menueconfig 配置——》.config根据menueconfig生成对应的宏定义——》编译内核时,根据.config文件来裁剪内核。原创 2020-08-25 14:25:39 · 495 阅读 · 0 评论 -
最简单的内核模块——打印“hello world”
文章目录1、最简单的内核模块由哪些东西构造?2、c文件的编写3、Makefile文件的编写4、让.ko文件跑起来1、最简单的内核模块由哪些东西构造?首先,有一个c文件。然后,一个Makefile文件,通过make命令将c文件编译成一个模块。最后,将模块加载到你的linux系统中,可以是开发板,或者是qemu模拟器。在这里,我使用qemu模拟器。2、c文件的编写c文件要包含什么内容?(1)两个头文件 #include <linux/init.h>和#include <lin原创 2020-08-24 22:35:22 · 1199 阅读 · 0 评论