linux驱动项目工程师面试题整编汇总

合集下载

Linux面试题大全(含答案)

Linux面试题大全(含答案)

Linux面试题大全,测测你的水平(答案)一.填空题:1. 在Linux系统中,以文件方式访问设备。

2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统。

3. Linux文件系统中每个文件用索引节点来标识。

Linux文件系统使用索引节点来记录文件信息,作用于Windows的文件分配表类似,索引节点是一个数据结构,它包含了一个文件的文件名,位置,大小,建立或修改时间,访问权限,所属关系等文件控制信息,一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引结点数组中的唯一一个元素对应,系统为每个索引结点分配了一个号码,也就是该结点在数组中的索引号,称为索引结点号。

Linux文件系统将文件索引结点号和文件名同时保存在目录中,所以目录只是将文件的名称和它的索引结点号结合在一起的一张表。

目录中每一对文件名称和索引结点号称为一个连接。

4. 全部磁盘块由四个部分组成,分别为引导块、专用块、i节点表块和数据存储块。

Linux系统中的每个文件都被赋予一个唯一的数值,这个数值称做索引节点。

索引节点存储在一个称作索引节点表<inode table>中,该表在磁盘格式化时被分配。

每个实际的磁盘或分区都有其自己的索引节点表。

一个索引节点包含文件的所有信息,包括磁盘上数据的地址和文件类型。

文件类型包括如普通文件、目录和特殊文件这样的信息。

linux硬盘组织方式为:引导区、超级块(superblock),索引结点(inode),数据块(datablock),目录块(diredtory block)。

其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置。

但是索引结点中不包括文件的名字,文件名是放在目录块里的。

linux 驱动面试题

linux 驱动面试题

linux 驱动面试题Linux驱动面试题Linux驱动是许多技术岗位面试过程中经常出现的一个重要考点。

在这篇文章中,我将通过一系列Linux驱动面试题,帮助您更好地理解和掌握Linux驱动的相关知识。

本文将涵盖从基础知识到深入理解的面试问题,旨在帮助您应对Linux驱动岗位的挑战。

1. 什么是Linux驱动?Linux驱动是用于设备与操作系统之间通信以实现设备功能的软件程序。

它充当着设备硬件和操作系统之间的接口,使得操作系统能够与设备进行交互。

Linux支持各种类型的驱动,包括字符设备驱动、块设备驱动和网络设备驱动等。

2. Linux驱动的加载和卸载过程是怎样的?在Linux系统中,驱动的加载和卸载通过模块实现。

首先,驱动程序将被编译为模块,然后使用insmod命令将模块加载到内核中。

加载模块时,内核会执行模块的初始化函数。

相反,使用rmmod命令可以将模块从内核中卸载,卸载模块时,内核会执行模块的清理函数。

3. Linux驱动的主要组成部分是什么?Linux驱动主要由两个组成部分组成:设备驱动程序和设备文件。

设备驱动程序由设备主要功能的实现组成,包括硬件的初始化、读写操作的处理以及与操作系统的交互等。

设备文件是与设备驱动程序进行交互的接口,通过设备文件可以对设备进行访问和控制。

4. 请解释一下Linux中的字符设备和块设备。

字符设备是指按字节顺序进行访问的设备,其输入输出是连续、无结构的流。

例如,键盘和鼠标就是字符设备。

对字符设备的访问是以字节为单位进行的,一次只能读取或写入一个字符。

块设备是指以固定大小的块进行访问的设备,其输入输出是按块进行的,块的大小通常为512字节或4KB。

例如,硬盘就是块设备。

对块设备的访问可以一次读取或写入一个或多个块。

5. Linux驱动中的缓冲区是什么?它的作用是什么?缓冲区是用于在内存中暂存数据的一块区域。

在Linux驱动中,缓冲区用来存储从设备读取的数据或要写入设备的数据。

linux工程师面试题及答案

linux工程师面试题及答案

linux工程师面试题及答案Linux是一种开源操作系统,广泛应用于各种计算机领域。

作为一名Linux工程师,熟悉Linux系统的原理、管理和维护至关重要。

在面试过程中,常常会涉及一些与Linux系统相关的问题,下面是一些常见的Linux工程师面试题及其答案。

一、Linux系统相关面试题1. 请说明什么是Linux系统?Linux系统是一种基于Unix的操作系统,最初由Linus Torvalds在1991年开发而成。

它的特点是开放源代码、多用户、多任务、多线程和稳定可靠。

2. 请解释什么是Linux内核?Linux内核是操作系统的核心部分,负责管理硬件、文件系统和其他系统资源。

它控制着计算机的所有核心功能,并提供了对外部应用程序的接口。

3. 怎样查看Linux系统的版本信息?在终端命令行输入以下命令:```uname -a```即可查看Linux系统的版本、内核版本以及其他详细信息。

4. 请简述Linux系统的目录结构?Linux系统的目录结构采用层级式的树状结构,以根目录“/”为起点,分为许多子目录,如/bin、/etc、/home、/usr等。

每个子目录都有其特定的用途,例如/bin存放可执行文件,/etc存放系统配置文件。

5. 如何查看当前工作目录?在终端命令行输入以下命令:```pwd```即可查看当前所在的工作目录。

二、Linux系统管理面试题1. 怎样查看Linux系统的CPU使用情况?在终端命令行输入以下命令:```top```即可实时查看CPU的使用情况,包括每个进程的CPU占用率。

2. 如何查看Linux系统的内存使用情况?在终端命令行输入以下命令:```free -m```即可查看内存的总量、已使用量和剩余量。

3. 怎样查看Linux系统的磁盘空间使用情况?在终端命令行输入以下命令:```df -h```即可查看各个磁盘分区的总空间、已使用空间和剩余空间。

4. 如何查找文件?在终端命令行输入以下命令:```find /path/to/directory -name "filename"```其中,/path/to/directory表示要查找的目录路径,"filename"表示要查找的文件名。

嵌入式linuxandroid驱动工程师面试题总汇

嵌入式linuxandroid驱动工程师面试题总汇

嵌入式linuxandroid驱动工程师面试题总汇嵌入式linux android驱动工程师面试题总汇1. 嵌入式系统中断服务子程序(ISR) 收藏中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。

具代表事实是,产生了一个新的关键字__interrupt。

下面的代码就使用了__interrupt 关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; } 1). ISR 不能返回一个值。

2). ISR 不能传递参数。

3). 在许多的处理器/编译器中,浮点一般都是不可重入的。

有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。

此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。

4). 与第三点一脉相承,printf()经常有重入和性能上的问题。

2.C语言中对位的操作,比如对a的第三位清0,第四位置1.本来应该会的,一犯晕写反了,以后注意!#define BIT3 (1<<3)#define BIT4 (1<<4)a &= ~BIT3; a |= BIT4;3.考到volatile含义并举例:理解出错,举了很具体的例子,连程序都搬上去了,有些理解不深的没举出来……volatile表示这个变量会被意想不到的改变,每次用他的时候都会小心的重新读取一遍,不适用寄存器保存的副本。

volatile表示直接存取原始地址例:并行设备的硬件寄存器(状态寄存器)在多线程运行的时候共享变量也要时时更新一个中断服务子程序中访问到的的非自动变量(不太清楚,正在查找资料ing……)4.要求设置一绝对地址为0x67a9 的整型变量的值为0xaa66当时我的写法:#define AA *(volatile unsigned long *)0xaa66AA = 0x67a9;答案:int *ptr = (int *)0xaa66;*ptr = 0x67a9;我感觉自己写的应该不算错吧(自我感觉,还请达人指正),我写的适合裸机下用,当做寄存器用,而答案就是适合在操作系统下的写法。

linux 驱动 面试题

linux 驱动 面试题

linux 驱动面试题Linux驱动面试题1. 概述Linux驱动程序是连接硬件设备和操作系统之间的重要软件,其作用是向操作系统提供对硬件设备的控制和访问接口。

在Linux系统下,驱动程序的设计和实现是嵌入式系统开发中的重要环节。

本文将介绍一些常见的Linux驱动面试题,帮助读者进行备考和提升相关知识水平。

2. 设备模型与驱动框架Linux内核具有完善的设备模型和驱动框架,以支持各种硬件设备的驱动开发。

在面试中,面试官通常会询问与设备模型和驱动框架相关的问题,如:a) 请介绍Linux内核的设备模型以及其作用。

b) 请解释驱动框架中的Platform设备和Pins控制器是如何配合工作的。

3. 字符设备驱动字符设备驱动是Linux常见的一种驱动类型,用于向应用程序提供对字符设备的访问接口。

相关的面试题可能包括:a) 请解释字符设备驱动的基本工作原理。

b) 内核中的“注册字符设备驱动”的过程是怎样的?c) 请介绍字符设备驱动中的主要数据结构,并解释其作用。

4. 块设备驱动块设备驱动用于向操作系统提供对块设备(如硬盘)的访问接口。

在Linux面试中,可能会涉及以下问题:a) 请解释块设备驱动与字符设备驱动的区别。

b) 在Linux内核中,块设备驱动是如何处理块设备的请求的?c) 请介绍块设备驱动中的磁盘调度算法以及其作用。

5. 中断处理中断是处理外部事件的一种机制,驱动程序需要能够正确处理中断。

面试中可能会涉及以下问题:a) 请解释中断处理机制,并描述Linux内核中的中断处理流程。

b) 在驱动程序中,如何注册和处理中断?c) 请介绍Linux内核中的软中断和Tasklet。

6. 性能优化和调试性能优化和调试是驱动程序开发中重要的环节,也是面试中常见的问题之一。

相关问题可能包括:a) 请介绍一些常用的性能优化方法和工具,用于提高驱动程序的性能。

b) 在Linux内核中,如何进行驱动程序的调试和故障定位?c) 请解释内核中的“内核态”和“用户态”,以及二者之间的区别。

Linux面试题大全(含答案)

Linux面试题大全(含答案)

Linux面试题大全,测测你的水平(答案)一.填空题:1. 在Linux系统中,以文件的方式访问设备.2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用索引节点来标识。

Linux文件系统使用索引节点来记录文件信息,作用于Windows的文件分配表类似,索引节点是一个数据结构,它包含了一个文件的文件名,位置,大小,建立或修改时间,访问权限,所属关系等文件控制信息,一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引结点数组中的唯一一个元素对应,系统为每个索引结点分配了一个号码,也就是该结点在数组中的索引号,称为索引结点号。

Linux文件系统将文件索引结点号和文件名同时保存在目录中,所以目录只是将文件的名称和它的索引结点号结合在一起的一张表.目录中每一对文件名称和索引结点号称为一个连接. 4. 全部磁盘块由四个部分组成,分别为引导块、专用块、i节点表块和数据存储块。

Linux系统中的每个文件都被赋予一个唯一的数值,这个数值称做索引节点。

索引节点存储在一个称作索引节点表<inode table>中,该表在磁盘格式化时被分配。

每个实际的磁盘或分区都有其自己的索引节点表.一个索引节点包含文件的所有信息,包括磁盘上数据的地址和文件类型.文件类型包括如普通文件、目录和特殊文件这样的信息。

linux硬盘组织方式为:引导区、超级块(superblock),索引结点(inode),数据块(datablock),目录块(diredtory block)。

其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置。

但是索引结点中不包括文件的名字,文件名是放在目录块里的。

Linux工程师面试试题题库

Linux工程师面试试题题库

Linux工程师面试试题题库Linux工程师面试试题题库1、Linux挂载Winodws共享文件夹2、查看http的并发请求数及其TCP连接状态:3、用tcpdump嗅探80端口的访问看看谁最高4、统计/var/log/下文件个数5、查看当前系统每IP连接数6、shell下32位随机密码生成7、统计出apache的access.log中访问量最多的5个IP8、如何查看二进制文件的内容9、ps aux 中VSZ代表什么意思 RSS代表什么10、检测并修复/dev/hda511、Linux开机启动顺序12、符号链接和硬链接的区别13、保存当前磁盘分区的分区表15、手动安装grub16、改内核参数17、在1-39内取随机数18、限定apache每秒钟连接数为1,峰值为319、FTP主动与被动模式20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的`行;21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本;26、写一个脚本:1、创建一个函数,能接受两个参数:1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;27、写一个脚本:1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;而后将此磁盘设备上的所有分区清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1实现,注意其中的设备路径不要写错了;如果此步骤失败,返回67给主程序;接着在此磁盘设备上创建两个主分区,一个大小为100M,一个大小为1G;如果此步骤失败,返回68给主程序;格式化此两分区,文件系统类型为ext3;如果此步骤失败,返回69给主程序;如果上述过程都正常,返回0给主程序;2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来。

linux驱动工程师面试题整理

linux驱动工程师面试题整理

下面的设备文件,供上层应用程/dev/1、字符型驱动设备你是怎么创建设备文件的,就是序打开使用的文件?命令结合设备的主设备号和次设备号,可创建一个设备文件。

答:mknod自动创建设备文件的方还有UDEV/MDEV评:这只是其中一种方式,也叫手动创建设备文件。

包括创建和删除设备文件,可以动态管理设备文件,式,UDEV/MDEV是运行在用户态的程序,一创建了设备文件。

运行在用户态意味着系统要运行之后。

那么在系统启动期间还有devfs共有三种方式可以创建设备文件。

、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?2的任务尽量放在后)答:中断处理例程应该尽量短,把能放在后半段(tasklet,等待队列等半段。

包括硬写一个中断服务程序要注意快进快出,在中断服务程序里面尽量快速采集信息,评:也就是中断上方式。

tasklet件信息,然后推出中断,要做其它事情可以使用工作队列或者半部和下半部。

第二:中断服务程序中不能有阻塞操作。

为什么?大家可以讨论。

第三:中断服务程序注意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的之类的。

FAILOK,、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁3 还是信号量?还是两者都能用?为什么?中断服务例程中的互斥使用使用信号量的进程可以睡眠。

答:使用自旋锁的进程不能睡眠,的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。

、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源4 只有一个使用者行不行?自己定义一个变量怎么我没懂第二句是什么意思,答:原子操作指的是无法被打断的操作。

可能标记资源的使用情况?其他进程又看不见这个变量评:第二句话的意思是:定义一个变量,比如 int flag =0;if(flag == 0){flag = 1;操作临界区;flag = 0;这样可否?}呢?这两个函数在设计上要注insmod 一个驱动模块,会执行模块中的哪个函数?rmmod5、意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?这两个函数在设计时要注意什么?卸载函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件?答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件。

评:这只是其中一种方式,也叫手动创建设备文件。

还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后。

那么在系统启动期间还有devfs创建了设备文件。

一共有三种方式可以创建设备文件。

2、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?答:中断处理例程应该尽量短,把能放在后半段(tasklet,等待队列等)的任务尽量放在后半段。

评:写一个中断服务程序要注意快进快出,在中断服务程序里面尽量快速采集信息,包括硬件信息,然后推出中断,要做其它事情可以使用工作队列或者tasklet方式。

也就是中断上半部和下半部。

第二:中断服务程序中不能有阻塞操作。

为什么?大家可以讨论。

第三:中断服务程序注意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的OK,FAIL之类的。

3、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还是信号量?还是两者都能用?为什么?答:使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。

中断服务例程中的互斥使用的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。

4、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行?答:原子操作指的是无法被打断的操作。

我没懂第二句是什么意思,自己定义一个变量怎么可能标记资源的使用情况?其他进程又看不见这个变量评:第二句话的意思是:定义一个变量,比如 int flag =0;if(flag == 0){flag = 1;操作临界区;flag = 0;}这样可否?5、insmod 一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?答:insmod调用init函数,rmmod调用exit函数。

这两个函数在设计时要注意什么?卸载模块时曾出现卸载失败的情形,原因是存在进程正在使用模块,检查代码后发现产生了死锁的问题。

评:要注意在init函数中申请的资源在exit函数中要释放,包括存储,ioremap,定时器,工作队列等等。

也就是一个模块注册进内核,退出内核时要清理所带来的影响,带走一切不留下一点痕迹。

6、在驱动调试过程中遇到过oops没?你是怎么处理的?7、ioctl和unlock_ioctl有什么区别?8、驱动中操作物理绝对地址为什么要先ioremap?答:因为内核没有办法直接访问物理内存地址,必须先通过ioremap获得对应的虚拟地址。

9、设备驱动模型三个重要成员是?platfoem总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?10、linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些?11、linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化,高端内存概念?12、linux中中断的实现机制,tasklet与workqueue的区别及底层实现区别?为什么要区分上半部和下半部?13、linux中断的响应执行流程?中断的申请及何时执行(何时执行中断处理函数)?14、linux中的同步机制?spinlock与信号量的区别?15、linux中RCU原理?16、linux中软中断的实现原理?17、linux系统实现原子操作有哪些方法?18、MIPS Cpu中空间地址是怎么划分的?如在uboot中如何操作设备的特定的寄存器?19、linux中系统调用过程?如:应用程序中read()在linux中执行过程即从用户空间到内核空间?20、linux内核的启动过程(源代码级)?21、linux调度原理?22、linux网络子系统的认识?23、linux内核里面,内存申请有哪几个函数,各自的区别?Kmalloc() __get_free_page() mempool_create()24. IRQ和FIQ有什么区别,在CPU里面是是怎么做的?25. 中断的上半部分和下半部分的问题:讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现?上半部分执行与硬件相关的处理要求快, 而有些驱动在中断处理程序中又需要完成大量工作,这构成矛盾,所以Linux有所谓的bottom half机制,中断处理程序中所有不要求立即完成的,在开中断的环境下,由底半程序随后完成.Linux的底半处理实际上是建立在内核的软中断机制上的.Linux 的底半机制主要有Tasklet 和 work queue 以及 softirq ( 2.4内核则有BH , Task queue , softirq , tasklet 没有work queue),其实底半可以理解成一种工作的延迟。

所以实际使用时跟timer机制基本上一个意思。

26. 内核函数mmap的实现原理,机制?mmap函数实现把一个文件映射到一个内存区域,从而我们可以像读写内存一样读写文件,他比单纯调用read/write也要快上许多。

在某些时候我们可以把内存的内容拷贝到一个文件中实现内存备份,当然,也可以把文件的内容映射到内存来恢复某些服务。

另外,mmap 实现共享内存也是其主要应用之一,mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。

27. 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?28. spinlock自旋锁是如何实现的?自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于临界区中。

这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定服务。

这里也介绍下信号量的概念,因为它的用法和自旋锁有相似的地方。

linux中的信号量是一种睡眠锁。

如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。

这时处理器获得自由去执行其它代码。

当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

29. 任务调度的机制?30. 嵌入式linux和wince操作系统的特点和特性?31. 嵌入式linux中tty设备驱动的体系结构?32. 嵌入式设备,为加快启动速度,可以做哪些方面的优化?33. USB设备的枚举过程?(1) Get Device Descriptor。

主机的第一个命令要求得到设备描述符,此SETUP 包为8 个字节数据(80,06,00,01,00,00,40,00),发向地址0,端口0。

“40”表示返回数据长度最大为40H 个字节。

实际上,只返回一个包,即数组DEV_DESC[ ]中的前8 个字节,用于说明设备的描述符的真实长度和设备的类型。

(2) Set Address。

接着是设置设备地址处理事件,主机发送一个含有指定地址的数据包(00,05,02,00,00,00,00,00),在主机只有一个USB 设备的时候,这个地址一般会是2,最大地址127,USB 协议中可以连接127 个设备。

设置地址事件处理结束后,设备进入地址状态,主机以后会在新的指定地址处访问设备。

(3) Get Device Descriptor。

主机再次发送请求得到设备描述符的数据包(80,06,00,01,00,00,12,00),与上次不同的是,要求的数据的长度是实际的数据长度,同时是发送到Set Address命令所设置的地址。

(4) 读取全部Configuration Descriptor。

接着主机要求得到设备全部的配置描述符、接口描述符和节点描述符(80,06,00,02,00,00,40,00),由于主机不知道设备描述符的真实长度,因此它要求得到64个字节。

(5) Set Interface,主机发送数据包(01,0B,00,00,00,00,00,00),设置接口值为0。

(6) Set Conifguration,确定USB设备工作在哪一个配置下。

对于U盘设备来说,一般只有1个配置值,其值为01。

主机发送数据包(00,09,01,00,00,00,00,00)。

(7) 如果以上步骤都正确,主机将找到新设备,并且配置成功,该设备可以正常使用,可以进行后续的U盘枚举过程了。

(8) 用busHound观察计算机对于U盘的枚举过程,发现上述步骤后还有一个GetMaxLun的操作,但是实际上对于U盘来说忽略该步骤也没有问题。

34. PSRAM、SDRAM、DDR、DDR2的时序特性?35.什么是GPIO?general purpose input/outputGPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的功能,即可做GPIO也可做其他用途。

也就是说你可以把这些引脚拿来用作任何一般用途的输入输出,例如用一根引脚连到led的一极来控制它的亮灭,也可以用一根(一些)引脚连到一个传感器上以获得该传感器的状态,这给cpu提供了一个方便的控制周边设备的途经。

如果没有足够多的gpio管脚,在控制一些外围设备时就会力有不逮,这时可采取的方案是使用CPLD来帮助管理。

36.触摸屏的硬件原理?触摸屏的主要三大种类是:电阻技术触摸屏、表面声波技术触摸屏、电容技术触摸屏。

电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面图有一层透明氧化金属(ITO氧化铟,透明的导电电阻)导电层,上面在盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层ITO涂层、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘。

当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器侦测到这一接触并计算出(X,Y )的位置,再根据模拟鼠标的方式运作。

这就是电阻技术触摸屏的最基本的原理。

表面声波技术是利用声波在物体的表面进行传输,当有物体触摸到表面时,阻碍声波的传输,换能器侦测到这个变化,反映给计算机,进而进行鼠标的模拟。

电容技术触摸屏利用人体的电流感应进行工作。

用户触摸屏幕时,由于人体电场,用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流37.在Linux C中,ls这个命令是怎么被执行的?使用fork创建一个进程或exec函数族覆盖原进程。

38.在一个只有128M内存并且没有交换分区的机器上,说说下面两个程序的运行结果1#define MEMSIZE 1024*1024int count = 0;void *p = NULL;while(1) {p = (void *)malloc(MEMSIZE);if (!p) break;printf("Current allocation %d MB\n", ++count);}2while(1) {p = (void *)malloc(MEMSIZE);if (!p) break;memset(p, 1, MEMSIZE);printf("Current allocation %d MB\n", ++count);}第一道程序分配内存但没有填充,编译器可能会把内存分配优化掉,程序死循环;第二道,程序分配内存并进行填充,系统会一直分配内存,直到内存不足,退出循环。

相关文档
最新文档