欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    嵌入式ARM平台下的Linux字符设备驱动实例.doc

    • 资源ID:24098539       资源大小:142KB        全文页数:20页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式ARM平台下的Linux字符设备驱动实例.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date嵌入式ARM平台下的Linux字符设备驱动实例嵌入式ARM平台下的Linux字符设备驱动实例嵌入式ARM平台下的Linux字符设备驱动实例6.1 下面以一个名为S3C2440_leds.c”的简单控制目标板LED亮灭的驱动为例进行分析。(目标板为天嵌TQ2440;Linux2.6.25.8)。主要功能是通过应用程序调用该驱动来按制目标板的四个LED灯的亮灭。驱动源程序如下:#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <asm/irq.h> #include <asm/arch/regs-gpio.h> #include <asm/hardware.h> #define DEVICE_NAME "leds" /* 加载模式后,执行”cat /proc/devices”命令看到的设备名称 */ #define LED_MAJOR 231 /* 主设备号 */ /* 应用程序执行 ioctl(fd, cmd, arg)时的第 2 个参数 */ #define IOCTL_LED_ON 0 #define IOCTL_LED_OFF 1 /* 用来指定 LED 所用的 GPIO 引脚 */ static unsigned long led_table = S3C2410_GPB5, S3C2410_GPB6, S3C2410_GPB7, S3C2410_GPB8, ; /* 用来指定 GPIO 引脚的功能:输出 */ static unsigned int led_cfg_table = S3C2410_GPB5_OUTP, S3C2410_GPB6_OUTP, S3C2410_GPB7_OUTP, S3C2410_GPB8_OUTP, ; /*应用程序对设备文件/dev/leds 执行 open()时, *就会调用s3c24xx_leds_open */ static int s3c24xx_leds_open(struct inode *inode, struct file *file) int i; for(i=0; i<4; i+) s3c2410_gpio_cfpin(led_tablei, led_cfg_tablei) return 0; /*应用程序对设备文件/dev/leds 执行 iotcl()时, *就会调用s3c24xx_leds_iotcl */ static int s3c24xx_leds_iotcl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) if (arg > 4) return -EINVAL; switch(cmd) case IOCTL_LED_ON: s3c2410_gpio_setpin(led_tablearg, 0); return 0; case IOCTL_LED_OFF: s3c2410_gpio_setpin(led_tablearg, 1); return 0; default: return -EINVAL; /*这个结构是字符设备驱动程序的核心 *当应用程序操作设备文件时调用的 open、read等函数, *最终会调用这个结构中指定的对应函数 static sturct file_operations s3c24xx_leds_fops = .owner = THIS_MODULE, .open = s3c24xx_leds_open, .ioctl = s3c24xx_leds_ioctl ; /*模块的初始化函数*/ static int _init s3c24xx_leds_init(void) int ret; ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &s3c24xx_leds_fops); if(ret < 0) printk(DEVICE_NAME "can't register major numbern"); return ret; printk(DEVICE_NAME "initializedn"); return 0; /*模块的撤销函数*/ static void _exit s3c24xx_leds_exit(void) unregister_chrdev(LED_MAJOR, DEVICE_NAME); /*指定驱动程序的初始化函数和卸载函数*/ module_init(s3c24xx_leds_init); module_exit(s3c24xx_leds_exit); /*加入描述信息*/ MODULE_AUTHOR("ckz"); MODULE_DESCRIPTION("S3C2440 LED Driver"); MODULE_LICENSE("GPL");写好的驱动放在内核源文件目录下:linux2.6.25.8#drivers/char/ 6.2以模块形式编译及加载修改同目录下的“Kconfig”文件,在合适的地方添加如下内容: Config S3C2440_LEDS tristate “S3C2440 LEDS Driver” depends on ARCH_S3C2440 help LEDS on S3C2440 然后再通目录下修改“Makefile”,添加如下内容: Obj-$(CONFIG_ S3C2440_LEDS) += S3C2440_leds o 添加完成以上内容之后,输入#make menuconfig,然后配置如下 Device Drivers - Character devices -> <M> S3C2440 LEDS Driver 将其选择为“M”,然后保存配置,编译出内核镜像烧写到开发板中。 然后再使用命令#make SUBDIR=drivers/char modules,编译出驱动模块,在内核目录下的“drivers/char”下面,名为 S3C2440_leds.Ko,将其复制到开发板中的/lib目录中。加载、卸载驱动到目标系统中。在/lib目录下:* insmod S3C2440_leds.KO /*加载驱动*/* rmmod S3C2440_leds.KO/*卸载驱动*/6.3 下面编写简单的应用程序来测试刚才的驱动程序,新建名为leds.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(argv1, "%d", &led_no) != 1 | sscanf(argv2,"%d", &on) != 1 | on < 0 | on > 1 | led_no < 1 | led_no > 4) fprintf(stderr, "Usage: leds led_no 0|1n");exit(1);fd = open("/dev/GPIO-Control", 0);if (fd < 0) perror("open device leds");exit(1);ioctl(fd, on, (led_no-1);close(fd);return 0;因为这只是一个简单的应用程序所以没有必要编写Makefile文件,直接使用arm-linux-gcc 命令编译并将其传到目标板上运行即可!在终端中输入:./leds 2 0 则目标板上的第二个LED灯亮被点亮。-

    注意事项

    本文(嵌入式ARM平台下的Linux字符设备驱动实例.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开