uClinux学习笔记之三.docxVIP

  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学习笔记之三??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.hMODULE_LICENSE(GPL);#define MAJOR_NUM 254 //主设备号#define DRIVER_NAME mydevicestatic ssize_tmydevice_read(struct file *, char *, size_t, loff_t*);static ssize_tmydevice_write(struct file *, const char *, size_t, loff_t*);//初始化字符设备驱动的file_operations结构体structfile_operationsmydevice_fops ={??????.read = mydevice_read,??????.write = mydevice_write,};static intglobal_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(0mydevice register failed /n);??????}??????else??????{???????????printk(0mydevice register success /n);??????}??????return ret;}void mydevice_exit(void){??????printk(0mydevice_exit!/n);??????unregister_chrdev(MAJOR_NUM,DRIVER_NAME);}static ssize_tmydevice_read(struct file *filp,char *buf,size_tlen,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_tmydevice_write(struct file *filp,const char *buf,size_tlen,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);}//----------------------------------------------

文档评论(0)

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

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

1亿VIP精品文档

相关文档