复习-嵌入式1-3.doc

上传人:m**** 文档编号:560792513 上传时间:2023-12-07 格式:DOC 页数:22 大小:169.01KB
返回 下载 相关 举报
复习-嵌入式1-3.doc_第1页
第1页 / 共22页
复习-嵌入式1-3.doc_第2页
第2页 / 共22页
复习-嵌入式1-3.doc_第3页
第3页 / 共22页
复习-嵌入式1-3.doc_第4页
第4页 / 共22页
复习-嵌入式1-3.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《复习-嵌入式1-3.doc》由会员分享,可在线阅读,更多相关《复习-嵌入式1-3.doc(22页珍藏版)》请在金锄头文库上搜索。

1、简答题(每小题2分,共20分)1、请解释以下语句。gcc -g -c -o -lmgcc -I./ -I/1234/include d test.cmake -f text.make -I /include/mk /I /wmake clean2、举出5个驱动程序的常用接口函数。以下任意五个均可以,(1) int register_chdev(usigned int major,const char *name,struct file_oprations *fops)注册主设备号。Major:主设备号;name:驱动程序名(出现在/proc/dev中);fops:文件操作表。该函数将返回主设备

2、号,如果出错将返回小于0的值。(2) int unregister_chdev(usigned int major,const char *name)注销字符设备(3) void init_timer(struct timer_list *timer)struct timer_list TIMER_INITIALIZER(_function,_expires,_data)timer:定时器变量_function:要调用的函数_expires:期望定时器执行的jiffies值,jiffes为操作系统启动以来的时钟滴答数目_data:要传递的参数(4) void add_timer(struct

3、timer_list *timer)timer:定时器变量(5) void del_timer(struct timer_list *timer)删除定时器(6) usigned long copy_from_user(void *to,const void *from,unsigned long count)unsigned long copy_to_user(void *to,const void *from,unsigned long count)用户地址空间和内核地址空间的数据交换To:目标空间地址From:源空间地址Count:数据的数目(7) int request_irq(uns

4、igned int irq,irqreturn_t (*handler)(),unsigned long flags,const char *dev_name,voin *dev_id)注册中断Irq:要申请的中断号Handler:要安装的中断处理函数指针Flags:位掩码选项Dev_name:传递给requset_irq的字符串Dev_id:用于共享的中断信号线(8) void free_irq(unsigned int irq,void *dev_id)irq:要注销的中断号dev_id:用于共享的中断信号线3、从嵌入式系统底层到上层应用软件,试分析嵌入式计算系统的组成主要分为哪几个部分,

5、并写出各部分所完成的功能。(1)硬件层;(2)中间层(嵌入式系统初始化,硬件相关的驱动程序);(3)软件层(操作系统、文件系统、GUI,网络及通用组件);(4)功能层。4、嵌入式系统程序员经常需要编写一些直接访问控制外设的代码。对于不同的嵌入式处理器体系机构,外设可能采用内存映射方式(如Motorola的大部分嵌入式处理器),也可能采用端口方式(如Intel的大部分嵌入式处理器)。试分析两种方法的原理。ARM处理器采用的是哪一种,简单叙述其具体做法。ARM采用的是内存映射方式。当寄存器位于I/O空间时,称为I/O端口,当位于内存空间时,称为I/O内存。(1分)I/O端口的使用较为简单,使用Li

6、nux提供的函数访问定位于I/O空间的端口,包括:unsigned inb(unsigned port)、unsigned outb(unsigned char byte,unsigned port)。(0.5分)而I/O内存则首先需要用ioremap()将设备所处的物理地址映射到虚拟地址之后用I/O内存的方法进行端口访问,最后释放I/O端口,并释放映射虚拟地址。(0.5分)5、简述设备驱动的开发流程。(1)查看原理图,理解设备的工作原理;(2)定义主设备号;(3)在驱动程序中实现驱动的初始化,如果驱动程序采用模块的方式,则实现模块的初始化;(1分)(4)设计所要实现的文件的操作,定义file

7、_operation结构;(5)实现中断服务(中断并不是每个设备驱动所必须的);(6)编译该驱动程序到内核中,或者用insmod命令加载;(7)测试该设备。(1分)6、简述I/O内存访问流程。Request_mem_region()ioremap()ioread8()、ioread16()、iowrite8()等iounmap()Release_mem_region()。(2分)7、驱动程序对外设物理地址的访问方式?统一编址:I/O内存映射,I/O端口映射。(1分)独立编址:直接I/O端口访问。(1分)8、什么时候用轮询?什么时候用中断?在I/O设备驱动程序开发中,如何克服消耗CPU资源过多?

8、9、如何建立守护进程?(1)创建子进程,父进程退出;(0.5分)(2)调用setsid()创建一个新的会话,并担任该会话组组长;(0.5分)(3)改变当前目录为根目录chdir(“/”); (0.5分)(4)重设文件权限掩码umask(0)。(0.5分)10、什么情况下用共享内存、信号、消息队列?(1)从资源使用情况;(1分)(2)任务规模大小;(3)进程的同步或异步性质。(1分)操作题删除非空文件夹/daisy下所有文件及文件夹。rm r /daisy2、终止进程号为1001的进程。kill 10013、加载U盘内容到/mnt/udisk文件夹下。mount t vfat o iochars

9、et=gb2312 /dev/sda1 /mnt/udisk4、查看本机的网址。ifconfig eth05、查看已安装的rpm软件包。rpm -qia在/root文件夹下查找后缀为.c的文件。find /root name *.c程序填空题(每小题2分,共14分)下面是创维特实验箱上的LED模块驱动程序的部分代码,请在空白处填写完整的代码,完成程序。初始条件为:(1)四个LED灯为共阳极接法,(2)LED灯采用I/O内存方式,地址为0X10000000,建议映射时宽度为0X0100#include #include#define LED_MAJOR 253#define DEVICE_NAM

10、E led #define LED_ON 1#define LED_OFF 2static void* out_base;/*static int leds_ioctl( struct inode *inode,struct file *file,unsigned int ioctl_num, unsigned long arg) switch(ioctl_num) case LED_OFF: printk(led offn); 1 ; / writeb(0xff,out_base); break; case LED_ON: printk(led onn); 2 ; / writeb(0x00

11、,out_base); break; default: return 0; return 0; /*static int leds_open(struct inode *inode,struct file *file) MOD_INC_USE_COUNT; /counter increamentprintk(Open successfuln); return 0; /*static int leds_close(struct inode *inode,struct file *file) MOD_DEC_USE_COUNT; / counter decreament printk(Close

12、successfuln); return 0; /*static struct file_operations fops = .owner = THIS_MODULE, .open = leds_open, .release = leds_close, .ioctl = leds_ioctl, ; /*static int _init leds_init( void ) int ret_val; ret_val = 3 ; / register_chrdev(LED_MAJOR, DEVICE_NAME, &fops); if (ret_val 0) printk (%s failed wit

13、h %dn,Sorry, registering the character device , ret_val); return ret_val; else printk(register successfully!-xyl); 4 ;/ request_mem_region(0x10000000,0x0100,DEVICE_NAME); 5 ;/ ioremap(0x10000000,0x0100); return 0; ; /*static void _exit leds_exit(void) int ret; 6 ;/ iounmap(out_base); 7 ;/ release_mem_region(0x10000000,0x0100); ret = 8 ;/ unregister_chrdev(LED_MAJOR, DEVICE_NAME); if (ret 0) printk(Error in module_unregister_chrdev: %dn, ret); else printk(unregister is

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号