uClinux驱动开发初步.docVIP

  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文档。上传文档
查看更多
uClinux驱动开发初步

uClinux驱动开发初步 和linux的驱动开发是一致的,只是调试的方式不一样,学习uClinux的驱动开发也就是学习linux驱动开发的过程。linux驱动的调试需要至少一台电脑,外加像GDB,KDBG这样的源码级的内核调试工具,如果装一个虚拟机的话,那么只需要一台电脑即可了,但这样对电脑的性能有更高的要求。对于像uClinux的驱动调试,则最好是有开发板,也可以用模拟器。在ARM芯片上的移植是uClinux的一个重要应用。而最常用的仿真ARM的模拟器有国人开发的开源软件skyeye,不仅可以仿真ARM内核,并对以ARM作为内核的芯片作了进一步的支持。可以用skyeye-h开查看skyeye能仿真的ARM芯片。当然,也可以对skyeye作一些扩展以满足自己的要求。以下是如何在uClinux添加驱动的过程。 一、编写一个简单的字符驱动程序 //---mydevice.c--- #include linux/module.h #include linux/init.h #include linux/fs.h #include asm/uaccess.h MODULE_LICENSE(GPL); #define MAJOR_NUM 254//主设备号 #define DRIVER_NAMEmydevice static ssize_t mydevice_read(struct file*,char*,size_t,loff_t*); static ssize_t mydevice_write(struct file*,const char*,size_t,loff_t*); //初始化字符设备驱动的file_operations结构体 struct file_operations mydevice_fops= { .read=mydevice_read, .write=mydevice_write, }; static int global_var=0;//mydevice设备的全局变量 int mydevice_init(void) { int ret; //注册设备驱动 printk(0 mydevice_init\n); ret=register_chrdev(MAJOR_NUM,DRIVER_NAME,mydevice_fops); printk(0 register_chr_dev return%d\n,ret); if(ret 0) { printk(0 mydevice register failed\n); } else { printk(0 mydevice register success\n); } return ret; } void mydevice_exit(void) { printk(0 mydevice_exit!\n); unregister_chrdev(MAJOR_NUM,DRIVER_NAME); } static ssize_t mydevice_read(struct file*filp,char*buf,size_t len,loff_t*off) { //copy global_var from kernel space to user space if(copy_to_user(buf,global_var,sizeof(int))) { return-EFAULT; } return sizeof(int); } static ssize_t mydevice_write(struct file*filp,const char*buf,size_t len,loff_t*off) { //copy data from user sapce to kernel space if(copy_from_user(global_var,buf,sizeof(int))) { return-EFAULT; } return sizeof(int); } //--- 二、将驱动静态编译进uClinux内核 要将一个写好的驱动加入uClinux,需要对配置文件和Makefile作一些修改,由于我们的这个驱动程序是作为一个字符型驱动程序,我们把mydevice.c拷到(uClinux目录)/(linux内核目录)/drivers/char目录下。并对这个目录下的Config.in和Makefile以及mem.c作一些修改。 1、修改Config.in: 在commentCharacter devices这行底下加上以下一行: boolsupport for mydeviceCONFIG_MYDEVICE y 2、修改Makefile 在 # #uClinux drivers # 下加上以下

文档评论(0)

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

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

1亿VIP精品文档

相关文档