友善之臂的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目录下的Kconfig和Makefile文件:
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环境下添加和删除设备驱动,特别是在嵌入式开发的场景下,例如zedboard zynq7000开发平台。 首先,理解Linux设备驱动的基本概念至关重要。在Linux系统中,所有硬件设备都被视为文件,称为...
在Linux中,游戏手柄通常被识别为一个名为"js"的设备,位于"/dev/input"目录下。例如,你可以通过`ls /dev/input/by-id/`命令来查看所有已连接的输入设备,其中可能包含如"usb-Logitech_Gaming_Keyboard-event-kbd...
在Linux内核中,设备驱动程序是作为内核模块编写的,可以动态加载或卸载,以增强系统的灵活性。本文深入探讨了Linux设备驱动程序的内核机制,特别是字符设备驱动程序的实现。 首先,驱动程序的基本概念包括驱动程序...
在Linux内核下修改驱动源码,首先要熟悉内核开发的基本流程,包括: 1. **获取内核源码**:通常需要从官方网站或者Git仓库下载对应版本的Linux内核源码。 2. **编译配置**:使用`make menuconfig`或`make xconfig`...
本文将深入探讨如何在Linux环境下正确安装和使用Canon LBP2900的打印机驱动。 首先,我们需要了解CAPT Printer Driver,这是Canon官方为Linux系统提供的打印驱动程序。在给定的压缩包文件"CAPT_Printer_Driver_for_...
在Linux系统中,添加字符设备驱动程序是扩展操作系统与硬件交互能力的重要步骤。字符设备驱动程序通常处理一对一的通信,即一个设备对应一个文件描述符,适用于串行端口、键盘、鼠标等设备。本教程将详细介绍如何在...
加载成功后,设备就可以在/dev目录下通过其设备文件访问了。 6. **测试应用程序** 测试驱动程序通常编写一个简单的应用程序,通过`open`、`write`、`read`等系统调用来与设备交互。例如,可以读取设备返回的数据,...
在Linux系统中,驱动程序是操作系统与硬件设备之间的重要桥梁,它们使得操作系统能够有效地管理和控制硬件设备的功能。这里我们关注的是"LINUX 4.4.38 GT911驱动",这是一款专为Linux 4.4.38内核版本设计的驱动程序...
在本案例中,驱动程序需要注册一个设备节点,通常在/sys/class或/dev目录下,以便用户空间应用程序可以访问。 2. **I2C或SPI接口**:如果LCD控制器通过I2C或SPI总线连接到RV1126,驱动程序需要实现对应的总线适配器...
在Linux操作系统中,驱动程序是连接硬件设备与操作系统内核的桥梁,它们使得操作系统能够管理和控制硬件设备。本文将深入探讨“Linux简单驱动程序”这一主题,为初学者提供一个良好的入门指南。 首先,理解Linux...
这个错误表明Qt无法找到对应的MySQL驱动,即libqsqlmysql.so,这通常是因为在Linux环境中,只预装了SQLite驱动,而MySQL驱动需要单独编译。下面我们将详细讲解如何在Linux系统中编译Qt的MySQL驱动。 首先,你需要...
NVIDIA GTX 760是一款高性能的桌面级显卡,其在Linux下的驱动安装过程涉及多个步骤,包括准备环境、下载驱动、禁用 nouveau 驱动、安装驱动以及更新X配置。 首先,我们需要确保系统中已经安装了必要的开发工具和库...
在Linux内核中注册驱动程序通常需要调用`platform_driver_register()`函数,它会将驱动添加到平台设备驱动列表中。同时,为了使驱动能够找到对应的设备,需要在设备树配置文件中声明这个设备。设备树是描述硬件结构...
每种设备都有相应的设备文件,位于/dev目录下,通过操作这些文件,应用程序就可以与硬件设备交互。 驱动程序的核心功能之一就是初始化和配置硬件。在设备启动时,驱动程序会加载必要的固件,设置寄存器,配置中断...
设备可以在/dev路径下添加节点,例如使用mknod命令添加块设备或字符设备节点。 设备驱动代码的分布 在eLinux内核源码的driver目录下,设备驱动代码分布在不同的目录下,例如/char目录下是字符设备驱动源码,/blk...
2. **创建设备节点**:在 `/dev` 目录下创建设备文件,可以使用`mknod`命令或在驱动中动态创建。 3. **注册驱动**:将驱动添加到内核的设备模型中,以便系统能识别和加载它。 4. **编写设备操作函数**:根据设备...
1. 设备文件:在/dev目录下创建设备文件,通过`mknod`命令或内核驱动动态创建。 2. 字符设备驱动:实现`open`、`release`、`read`、`write`等文件操作函数,定义设备结构体`struct cdev`,使用`cdev_init`和`cdev_...
### 如何编写Linux操作系统下的设备驱动程序 ...通过上述内容,我们可以看到Linux设备驱动程序的设计思想和基本实现方法。希望这些信息能够帮助读者更好地理解Linux设备驱动程序的编写原理及实践技巧。
3. **设备文件创建**:在/dev目录下创建设备文件,让用户空间可以访问驱动。 4. **简单输出**:在write函数中实现输出"Hello World"到控制台或日志。 接下来是**编译驱动**。Linux驱动程序通常以模块的形式编译,...