历史上的今天
今天是:2025年02月08日(星期六)
2020年02月08日 | micro2440 LED驱动(装载和卸载模块)
2020-02-08 来源:eefocus
micro2440所用光盘资料如下:

笔记本系统:fedora 13 (编译内核,配置交叉编译环境,详见手册)
台式机系统:windows XP
1、fedora13中:

2、建立一个C文件,取名为my_leds.c
输入以下代码:
#include #include #include #include #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"tinitializedn"); 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 #include #include #include 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|1n"); 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、按网上解答解决问题











上一篇:MICRO2440 中断学习
下一篇:micro2440 按键驱动程序
史海拾趣
|
原本在公司最后一天了,把工作交接好,就安安稳稳地离职了。大家也算缘分一场,好聚好散吧! 可是,来到公司以后,发现网线被拔走了,电脑也被锁住了,我只能傻傻地坐在电脑前,看看杂志。… 查看全部问答> |
|
The Overlay/Display controller consists of logic for transferring image data from a local bus of the POST Processor or a video buffer located in system memory to an external LCD driver interface. what\'s the meaning of Overlay? ...… 查看全部问答> |
|
各位大神帮帮忙,介绍下你们的学习经验啊! 老师让学DSP,给的是5416的开发箱,学了一段时间感觉没有什么实质性的进展啊,就是熟悉了下CCS软件使用,然后把附带的程序在开发箱上跑了跑看看效果。至于里面的程序啊算法啊,基本不怎么懂啊,迷迷 ...… 查看全部问答> |
|
下是电路,我要的功能很简单,按键第按一次,数码管后两位显示加1,到100后回头,看这样写能不能称作“任务调度”,如果是,那么这种方式比较好处理,因为程序执行的间隔时间都是固定的,但对于有些交互式外设,如AD,DA,LCD,必须从对方读取数据,时 ...… 查看全部问答> |
|
#include #include #define uint unsigned int #define uchar unsigned char #define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 & ...… 查看全部问答> |




