[工学]09Linux系统驱动概述.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]09Linux系统驱动概述

一个简单的Linux驱动程序原理 创建一个字符设备 static int __init pxa_Led_init(void) { int ret, i; Updateled(); ret = register_chrdev(0, DEVICE_NAME, pxa_fops); if (ret 0) { printk(DEVICE_NAME cant get major number\n); return ret; } LedMajor = ret; #ifdef CONFIG_DEVFS_FS devfs_Led_dir = devfs_mk_dir(NULL, led, NULL); devfs_Ledraw = devfs_register(devfs_Led_dir, 0, DEVFS_FL_DEFAULT, LedMajor, LedRAW_MINOR, S_IFCHR | S_IRUSR | S_IWUSR, pxa_fops, NULL); #endif printk(DEVICE_NAME initialized\n); return 0; } 创建设备节点 /dev/led/0 其他处理 static void __exit pxa_Led_exit(void) { #ifdef CONFIG_DEVFS_FS devfs_unregister(devfs_Ledraw); devfs_unregister(devfs_Led_dir); #endif unregister_chrdev(LedMajor, DEVICE_NAME); } module_init(pxa_Led_init); module_exit(pxa_Led_exit); 相关操作 static int pxa_Led_open(struct inode *inode, struct file *filp) { MOD_INC_USE_COUNT; DPRINTK(open\n); return 0; } static struct file_operations pxa_fops = { owner: THIS_MODULE, open: pxa_Led_open, write: pxa_Led_write, release: pxa_Led_release, }; 点亮LED static ssize_t pxa_Led_write(struct file *file, const char *buffer, size_t count, loff_t * ppos) { copy_from_user(ledstatus, buffer, sizeof(ledstatus)); Updateled(); DPRINTK(write: led=0x%x, count=%d\n, ledstatus, count); return sizeof(ledstatus); } 配置和编译脚本 Linux内核的编译过程,是通过内核源码中根目录和各个子目录中的Makefile分级管理的。 其中,根目录的Makefile是最重要的,它可以看成是Makefile最初的入口。 Make脚本读取.config文件,并根据其信息最终生成vmlinux(elf格式的Linux内核)和modules(模块)。make通过向下递归调用子目录中的Makefile来编译这两个目标。 内核的kbuild脚本 把驱动程序放到内核中,在编译内核的时候可以自由裁减。 kbuild脚本随着Linux内核的发展,更新很快 参考Documentation/kbuild目录下的相关文档 ARM的工作模式 ARM处理器有7种操作模式: 用户模式(usr) - 正常的程序执行模式 快速中断模式(fiq) - 支持高速数据传输或通道处理 中断模式(irq) - 用于通用中断处理 管理员模式(svc) - 操作系统的保护模式. 中止模式(abt) - 支持虚拟内存和/或内存保护等异常 系统模式(sys) - 支持操作系统的特殊用户模式(运行操作系统任务) 未定义模式(und) - 支持硬件协处理器的软件仿真 除了用户模式外,其他模式均可视为特权模式 ARM的寄存器(1) 37个寄存器 31 个通用32位寄存器,包括程序计数器PC 6 个状态寄存器 15个通用寄存器 (R0 to R14), 以及2个状态寄存器和程序计数器(PC)在任何时候都中可见的 可见的寄存器取决于处理器的模式,不同的模式映射了不同的工作寄存器 ARM的寄存器(2) R0 到 R15 可以直接访问 R0

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档