版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
NeusoftInstituteofInformation嵌入式系统工程系--嵌入式Linux设备驱动开发目录一ARM体系结构三Linux板级LED驱动程序二GPIO访问作品简介Linux内核访问外设I/O资源的方式一、动态映射(ioremap)方式对I/O内存的操作需按如下步骤完成:
1.申请structresource*request_mem_region(unsignedlongstart,unsignedlonglen,char*name)
2.映射void*ioremap(unsignedlongphys_addr,unsignedlongsize)
3.访问unsignedioread8(void*addr)voidiowrite8(u8value,void*addr)
4.释放voidiounmap(void*addr)Linux内核访问外设I/O资源的方式一、动态映射(ioremap)方式定义#defineS3C2410_PA_IIS (0x55000000)映射our_card->regs=ioremap(S3C2410_PA_IIS,0x100);
访问readl(our_card->regs)writel(value,our_card->regs)Linux内核访问外设I/O资源的方式二、静态映射(map_desc)方式
通过map_desc结构体静态创建I/O资源映射表
内核或驱动中访问该I/O资源时则无需再进行ioreamp动态映射,可以直接通过映射后的I/O虚拟地址去访问./*include/asm-arm/mach/map.h*/
structmap_desc{
unsignedlongvirtual;
/*映射后的虚拟地址*/
unsignedlongpfn;
/*I/O资源物理地址所在的页帧号*/
unsignedlonglength;
/*I/O资源长度*/
unsignedinttype;
/*I/O资源类型*/
};二、静态映射(map_desc)方式staticstructmap_descs3c2410_iodesc[]__initdata={
{
.virtual
=
(unsignedlong)S3C24XX_VA_LCD),
.pfn
=
__phys_to_pfn(S3C24XX_PA_LCD),
.length
=
S3C24XX_SZ_LCD,
.type
=
MT_DEVICE
},
……
};Map_io成员函数会在系统初始化过程中被调用,流程如下:Start_kernel->setup_arch()-->paging_init()-->devicemaps_init()中被调用.
自动创建设备文件
创建设备文件的方法:
1.mknod手工创建
2.?自动创建(2.4内核)devfs_register(devfs_handle_tdir,constchar *name,unsignedintflags,unsignedint major,unsignedintminor,umode_tmode,void*ops, void*info)在指定的目录中创建设备文件。dir:目录名,为空表示在/dev/目录下创建;name:文件名;flags:创建标志;major:主设备号;minor:次设备号;mode:创建模式;ops:操作函数集;info:通常为空
自动创建(2.6内核)从Linux2.6.13开始,devfs不复存在,udev成为devfs的替代。相比devfs,udev(mdev)存在于应用层。利用udev(mdev)来实现设备文件的自动创建很简单,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。自动创建(2.6内核)例:structclass*myclass=class_create(THIS_MODULE, “my_device_driver”);class_device_create(myclass,NULL,MKDEV(major_num,0),NULL, “my_device”);当驱动被加载时,udev(mdev)就会自动在/dev下创建my_device设备文件。staticstructclass*led_class;if(LED_MAJOR){ dev=MKDEV(LED_MAJOR,LED_MINOR); result=register_chrdev_region(dev,scull_nr_devs,"DEVICE_NAME
"); }else{ result=alloc_chrdev_region(&dev,LED_MINOR,scull_nr_devs,"DEVICE_NAME
"); LED_MAJOR=MAJOR(dev); }//注册一个类,使mdev可以在"/dev/"目录下面建立设备节点
led_class=class_create(THIS_MODULE,DEVICE_NAME); if(IS_ERR(led_class)) { printk("Err:failedinNeusoft-ledsclass.\n"); return-1; } //创建一个设备节点,节点名为DEVICE_NAME
class_device_create(led_class,NULL,MKDEV(LED_MAJOR,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省南阳市邓州市重点名校2025-2026学年初三第三次模拟考试英语试题含解析
- 邵东县2025-2026学年初三第五次中考模拟考试语文试题含解析
- 岳阳市湘阴县重点名校2025-2026学年初三下学期期末教学质量检测试题(Ⅰ)数学试题含解析
- 浙江省宁波市名校2026届初三暑假末结业考试物理试题含解析
- 江苏省东台市第四联盟市级名校2025-2026学年初三英语试题期末练习试卷含解析
- 重庆市七中学2025-2026学年初三下期第二次模拟考试英语试题文试题含解析
- (正式版)DB37∕T 3039-2017 《化妆品中溴硝丙二醇的测定 高效液相色谱法》
- 压疮护理中的护理实践与经验
- 2026年旅游管理专业导游证考取与带团技巧
- 2026年基站建设项目施工计划书
- 2025新人教版七年级下册英语 Unit 8知识点梳理及语法讲义(答案版)
- 食品厂复工复产方案
- 2024年数智工程师职业鉴定考试复习题库(含答案)
- 哮喘免疫治疗
- 生态修复绿化项目施工技术标书
- 写字楼装修合同协议
- 人教A版2019必修第一册专题3.2函数的基本性质【十大题型】(原卷版+解析)
- 中医培训课件:《放血疗法》
- 人工智能伦理导论- 课件 3-人工智能伦理
- 《制药卫生》课件
- (完整版)杭州钱江新城中心区城市设计控规部分
评论
0/150
提交评论