micro2440 LED驱动(装载和卸载模块)
2012-03-07 19:51
232 查看
micro2440所用光盘资料如下:
笔记本系统:fedora 13 (编译内核,配置交叉编译环境,详见手册)
台式机系统:windows XP
1、fedora13中:
2、建立一个C文件,取名为my_leds.c
输入以下代码:
)
3、在Kconfig文件里加入这句话:
4、在Makefile文件里加入:
5、返回到linux根目录,输入make menuconfig;
6、
7、
8、保存配置并退出
9、输入 make modules指令,将生成的my_leds.ko传送到开发板
10、装载模块
11、输入 ls /dev指令查看设备名
12、fedora13下编写测试程序led.c
输入以下代码:
13、编写完毕后,输入arm-linux-gcc led.c -o led 指令,将生成的led文件传送到开发板
14、改变led的权限
15、输入指令测试(先点击友善之臂力提供的测试程序,关闭led-player)
16、测试完毕,卸载模块,出现如图所示错误
17、网上搜索问题
18、按网上解答解决问题
笔记本系统:fedora 13 (编译内核,配置交叉编译环境,详见手册)
台式机系统:windows XP
1、fedora13中:
2、建立一个C文件,取名为my_leds.c
输入以下代码:
#include <linux/miscdevice.h> #include <mach/regs-gpio.h> #include <linux/fs.h> #include <linux/pci.h> #define DEVICE_NAME "myleds" static unsigned long led_table [] = { S3C2410_GPB5, S3C2410_GPB6, S3C2410_GPB7, S3C2410_GPB8, }; static unsigned int led_cfg_table [] = { S3C2410_GPB5_OUTP, S3C2410_GPB6_OUTP, S3C2410_GPB7_OUTP, S3C2410_GPB8_OUTP, }; static int sbc2440_leds_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { switch(cmd) { case 0: case 1: if (arg > 4) { return -EINVAL; } s3c2410_gpio_setpin(led_table[arg], !cmd); return 0; default: return -EINVAL; } } static struct file_operations dev_fops = { .owner = THIS_MODULE, .ioctl = sbc2440_leds_ioctl, }; static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops, }; static int __init dev_init(void) { int ret; int i; for (i = 0; i < 4; i++) { s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]); s3c2410_gpio_setpin(led_table[i], 0); } ret = misc_register(&misc); printk (DEVICE_NAME"\tinitialized\n"); return ret; } static void __exit dev_exit(void) { misc_deregister(&misc); } module_init(dev_init); module_exit(dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("FriendlyARM Inc.");以上代码其实就是mini2440_leds.c里面的代码,只不过我把那些用不到的头文件删去了一些不明白为什么要用那么多的头文件,咋一看起来真的很头疼,反正删除之后编译没报错(必须不报错,我删一个就编译一次,有错误就还原回来
)
3、在Kconfig文件里加入这句话:
4、在Makefile文件里加入:
5、返回到linux根目录,输入make menuconfig;
6、
7、
8、保存配置并退出
9、输入 make modules指令,将生成的my_leds.ko传送到开发板
10、装载模块
11、输入 ls /dev指令查看设备名
12、fedora13下编写测试程序led.c
输入以下代码:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> int main(int argc, char **argv) { int on; int led_no; int fd; if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 || on < 0 || on > 1 || led_no < 0 || led_no > 3) { fprintf(stderr, "Usage: leds led_no 0|1\n"); exit(1); } fd = open("/dev/myleds", 0); if (fd < 0) { perror("open device myleds"); exit(1); } ioctl(fd, on, led_no); close(fd); return 0; }
13、编写完毕后,输入arm-linux-gcc led.c -o led 指令,将生成的led文件传送到开发板
14、改变led的权限
15、输入指令测试(先点击友善之臂力提供的测试程序,关闭led-player)
16、测试完毕,卸载模块,出现如图所示错误
17、网上搜索问题
18、按网上解答解决问题
相关文章推荐
- 2440平台,LED驱动模块,成功加载,rmmod可以卸载,但是总是报错
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- Linux 设备驱动练习---模块 加载卸载
- linux内核编程--1模块的装载和卸载
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 卸载驱动模块时,提示出错: rmmod: chdir(/lib/modules): No such file or directory
- Linux强制卸载内核模块(由于驱动异常导致rmmod不能卸载)
- Linux内核可装载模块对设备驱动的影响
- 在OK6410 android开发板上添加led驱动模块,并通过NDK测试驱动
- 帧缓冲设备驱动的模块加载/卸载及平台驱动的探测/移除函数的模板
- Linux驱动开发(三)——模块初始化和卸载函数
- 模块学习之————LED驱动
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 串口驱动卸载/加载与 GSM 模块电源控制
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- micro2440驱动分析1——LED驱动