`

20130801 linux添加驱动 在dev下可以看到

 
阅读更多

友善之臂的Tiny210 linux3.0.8 for android

实现:在linux内核下添加LED的驱动 LED@LZM@FJICC并且可以在# /dev/下看到。

#ls /dev/看到驱动LED@LZM@FJICC

1.进入linux/drivers/char/新建一个文件lzm_fjicc.c

编写内容:

//lzm_fjicc.c

#include <linux/kernel.h>

#include <linux/module.h>

#include <linux/miscdevice.h>

#include <linux/fs.h>

#include <linux/types.h>

#include <linux/moduleparam.h>

#include <linux/slab.h>

#include <linux/ioctl.h>

#include <linux/cdev.h>

#include <linux/delay.h>

#include <mach/gpio.h>

#include <mach/regs-gpio.h>

#include <plat/gpio-cfg.h>

 

#define DEVICE_NAME "LED@LZM@FJICC"

static int led_gpios[] = {

S5PV210_GPJ2(0),

S5PV210_GPJ2(1),

S5PV210_GPJ2(2),

S5PV210_GPJ2(3),

};

 

#define LED_NUMARRAY_SIZE(led_gpios)

 

 

static long fjicc_leds_ioctl(struct file *filp, unsigned int cmd,

unsigned long arg)

{

switch(cmd) {

case 0:

case 1:

if (arg > LED_NUM) {

return -EINVAL;

}

 

gpio_set_value(led_gpios[arg], !cmd);

//printk(DEVICE_NAME": %d %d\n", arg, cmd);

break;

 

default:

return -EINVAL;

}

 

return 0;

}

 

static struct file_operations fjicc_led_dev_fops = {

.owner= THIS_MODULE,

.unlocked_ioctl= fjicc_leds_ioctl,

};

 

static struct miscdevice fjicc_led_dev = {

.minor= MISC_DYNAMIC_MINOR,

.name= DEVICE_NAME,

.fops= &fjicc_led_dev_fops,

};

 

static int __init fjicc_led_dev_init(void) {

int ret;

int i;

 

for (i = 0; i < LED_NUM; i++) {

ret = gpio_request(led_gpios[i], "LED");

if (ret) {

printk("%s: request GPIO %d for LED failed, ret = %d\n", DEVICE_NAME,

led_gpios[i], ret);

return ret;

}

 

s3c_gpio_cfgpin(led_gpios[i], S3C_GPIO_OUTPUT);

gpio_set_value(led_gpios[i], 1);

}

 

ret = misc_register(&fjicc_led_dev);

 

printk(DEVICE_NAME"\tinitialized\n");

 

return ret;

}

 

static void __exit fjicc_led_dev_exit(void) {

int i;

 

for (i = 0; i < LED_NUM; i++) {

gpio_free(led_gpios[i]);

}

 

misc_deregister(&fjicc_led_dev);

}

 

module_init(fjicc_led_dev_init);

module_exit(fjicc_led_dev_exit);

 

MODULE_LICENSE("GPL");

MODULE_AUTHOR("LZM@FJICC");

 

2.然后修改char目录下的KconfigMakefile文件

Kconfig:

config LEDS_LZM_FJICC

tristate "LEDS_LZM_FJICC"

depends on MACH_MINI210

default y

help

This option enables support for LEDs connected to GPIO lines

on Mini210 boards.

 

Makefile:

obj-$(CONFIG_LEDS_LZM_FJICC)+= lzm_fjicc.o

 

3.进到linux根目录,然后#make menuconfig

就可以在配置菜单中看到LEDS_LZM_FJICC,具体在devices driversàchracter devicesà就可以看到了。

4.配置好了,make zImage就可以了。

5.烧写了系统后,就可以查看驱动了。#ls /dev/

6.提升驱动权限:#chmod 777 /dev/LED@LZM@FJICC

分享到:
评论

相关推荐

    Linux 设备驱动添加及删除 测试

    本文将深入探讨如何在Linux环境下添加和删除设备驱动,特别是在嵌入式开发的场景下,例如zedboard zynq7000开发平台。 首先,理解Linux设备驱动的基本概念至关重要。在Linux系统中,所有硬件设备都被视为文件,称为...

    Linux下游戏手柄驱动示例(joystick)

    在Linux中,游戏手柄通常被识别为一个名为"js"的设备,位于"/dev/input"目录下。例如,你可以通过`ls /dev/input/by-id/`命令来查看所有已连接的输入设备,其中可能包含如"usb-Logitech_Gaming_Keyboard-event-kbd...

    深入Linux设备驱动程序内核机制.pdf

    在Linux内核中,设备驱动程序是作为内核模块编写的,可以动态加载或卸载,以增强系统的灵活性。本文深入探讨了Linux设备驱动程序的内核机制,特别是字符设备驱动程序的实现。 首先,驱动程序的基本概念包括驱动程序...

    yt8521 linux驱动源码

    在Linux内核下修改驱动源码,首先要熟悉内核开发的基本流程,包括: 1. **获取内核源码**:通常需要从官方网站或者Git仓库下载对应版本的Linux内核源码。 2. **编译配置**:使用`make menuconfig`或`make xconfig`...

    Canon LBP2900的linux打印机驱动

    本文将深入探讨如何在Linux环境下正确安装和使用Canon LBP2900的打印机驱动。 首先,我们需要了解CAPT Printer Driver,这是Canon官方为Linux系统提供的打印驱动程序。在给定的压缩包文件"CAPT_Printer_Driver_for_...

    linux 添加字符设备驱动程序

    在Linux系统中,添加字符设备驱动程序是扩展操作系统与硬件交互能力的重要步骤。字符设备驱动程序通常处理一对一的通信,即一个设备对应一个文件描述符,适用于串行端口、键盘、鼠标等设备。本教程将详细介绍如何在...

    linux 添加字符设备驱动程序及测试程序

    加载成功后,设备就可以在/dev目录下通过其设备文件访问了。 6. **测试应用程序** 测试驱动程序通常编写一个简单的应用程序,通过`open`、`write`、`read`等系统调用来与设备交互。例如,可以读取设备返回的数据,...

    LINUX 4.4.38 GT911驱动

    在Linux系统中,驱动程序是操作系统与硬件设备之间的重要桥梁,它们使得操作系统能够有效地管理和控制硬件设备的功能。这里我们关注的是"LINUX 4.4.38 GT911驱动",这是一款专为Linux 4.4.38内核版本设计的驱动程序...

    RV1126驱动LCD屏幕【Linux C驱动】.zip

    在本案例中,驱动程序需要注册一个设备节点,通常在/sys/class或/dev目录下,以便用户空间应用程序可以访问。 2. **I2C或SPI接口**:如果LCD控制器通过I2C或SPI总线连接到RV1126,驱动程序需要实现对应的总线适配器...

    Linux简单驱动程序

    在Linux操作系统中,驱动程序是连接硬件设备与操作系统内核的桥梁,它们使得操作系统能够管理和控制硬件设备。本文将深入探讨“Linux简单驱动程序”这一主题,为初学者提供一个良好的入门指南。 首先,理解Linux...

    Qt Mysql linux驱动编译.docx

    这个错误表明Qt无法找到对应的MySQL驱动,即libqsqlmysql.so,这通常是因为在Linux环境中,只预装了SQLite驱动,而MySQL驱动需要单独编译。下面我们将详细讲解如何在Linux系统中编译Qt的MySQL驱动。 首先,你需要...

    linux安装显卡驱动GTX760.rar

    NVIDIA GTX 760是一款高性能的桌面级显卡,其在Linux下的驱动安装过程涉及多个步骤,包括准备环境、下载驱动、禁用 nouveau 驱动、安装驱动以及更新X配置。 首先,我们需要确保系统中已经安装了必要的开发工具和库...

    at24cxx.rar_AT24Cxx linux_at24c02 linux_at24c02驱动_linux at24c02_

    在Linux内核中注册驱动程序通常需要调用`platform_driver_register()`函数,它会将驱动添加到平台设备驱动列表中。同时,为了使驱动能够找到对应的设备,需要在设备树配置文件中声明这个设备。设备树是描述硬件结构...

    Linux设备驱动程序学习(9)-与硬件通信 - Linux设备驱动程序

    每种设备都有相应的设备文件,位于/dev目录下,通过操作这些文件,应用程序就可以与硬件设备交互。 驱动程序的核心功能之一就是初始化和配置硬件。在设备启动时,驱动程序会加载必要的固件,设置寄存器,配置中断...

    嵌入式Linux设备驱动程序开发PPT课件.pptx

    设备可以在/dev路径下添加节点,例如使用mknod命令添加块设备或字符设备节点。 设备驱动代码的分布 在eLinux内核源码的driver目录下,设备驱动代码分布在不同的目录下,例如/char目录下是字符设备驱动源码,/blk...

    Linux设备驱动程序设计入门

    2. **创建设备节点**:在 `/dev` 目录下创建设备文件,可以使用`mknod`命令或在驱动中动态创建。 3. **注册驱动**:将驱动添加到内核的设备模型中,以便系统能识别和加载它。 4. **编写设备操作函数**:根据设备...

    Linux驱动开发入门

    1. 设备文件:在/dev目录下创建设备文件,通过`mknod`命令或内核驱动动态创建。 2. 字符设备驱动:实现`open`、`release`、`read`、`write`等文件操作函数,定义设备结构体`struct cdev`,使用`cdev_init`和`cdev_...

    如何编写Linux操作系统下的设备驱动程序

    ### 如何编写Linux操作系统下的设备驱动程序 ...通过上述内容,我们可以看到Linux设备驱动程序的设计思想和基本实现方法。希望这些信息能够帮助读者更好地理解Linux设备驱动程序的编写原理及实践技巧。

    Linux Hello World 驱动

    3. **设备文件创建**:在/dev目录下创建设备文件,让用户空间可以访问驱动。 4. **简单输出**:在write函数中实现输出"Hello World"到控制台或日志。 接下来是**编译驱动**。Linux驱动程序通常以模块的形式编译,...

Global site tag (gtag.js) - Google Analytics