linux驱动面试常见题目

来源:互联网 发布:跟大叔滚床单知乎 编辑:程序博客网 时间:2024/04/28 23:46
 

1. linux内核里面,内存申请有哪几个函数,各自的区别?

Kmalloc()   __get_free_page()  mempool_create()  

 

2. IRQFIQ有什么区别,在CPU里面是是怎么做的?

 

 

3. 

int *a;

char *b;

和 b本身是什么类型?

ab里面本身存放的只是一个地址,难道是这两个地址有不同么?

 

 

4. 中断的上半部分和下半部分的问题:

讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现?

上半部分执行与硬件相关的处理要求快, 而有些驱动在中断处理程序中又需要完成大量工作,这构成矛盾,所以Linux有所谓的bottom half机制,中断处理程序中所有不要求立即完成的,在开中断的环境下,由底半程序随后完成.

Linux的底半处理实际上是建立在内核的软中断机制上的.

Linux 的底半 机制主要有Tasklet 和 work queue 以及 softirq ( 2.4内核则有BH , Task queue , softirq , tasklet 没有work queue),其实底半可以理解成一种工作的延迟。所以实际使用时跟timer机制基本上一个意思。

 

5. 内核函数mmap的实现原理,机制?

mmap函数实现把一个文件映射到一个内存区域,从而我们可以像读写内存一样读写文件,他比单纯调用read/write也要快上许多。在某些时候我们可以把内存的内容拷贝到一个文件中实现内存备份,当然,也可以把文件的内容映射到内存来恢复某些服务。另外,mmap实现共享内存也是其主要应用之一,mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。

 

6. 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?

 

7. spinlock自旋锁是如何实现的?

自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于临界区中。这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定服务。

  二、信号量简介

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

  LinuxLinux

  Linux是一套免费使用和自由传播的操作系统,它主要用于基于Intel系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的,其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。

中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

 

8. 任务调度的机制?

 

【二、本人碰到】

1. 嵌入式linuxwince操作系统的特点和特性?

 

2. 嵌入式linuxtty设备驱动的体系结构?

 

3. 嵌入式设备,为加快启动速度,可以做哪些方面的优化?

 

4. USB设备的枚举过程?

(1) Get Device Descriptor。主机的第一个命令要求得到设备描述符,此SETUP 包为个字节数据(8006000100004000),发向地址0,端口0“40”表示返回数据长度最大为40H 个字节。实际上,只返回一个包,即数组DEV_DESC[ ]中的前个字节,用于说明设备的描述符的真实长度和设备的类型。

(2) Set Address。接着是设置设备地址处理事件,主机发送一个含有指定地址的数据包(0005020000000000),在主机只有一个USB 设备的时候,这个地址一般会是2,最大地址127USB 协议中可以连接127 个设备。设置地址事件处理结束后,设备进入地址状态,主机以后会在新的指定地址处访问设备。

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

(4) 读取全部Configuration Descriptor。接着主机要求得到设备全部的配置描述符、接口描述符和节点描述符(8006000200004000),由于主机不知道设备描述符的真实长度,因此它要求得到64个字节。

(5) Set Interface,主机发送数据包(010B000000000000),设置接口值为0

(6) Set Conifguration,确定USB设备工作在哪一个配置下。对于U盘设备来说,一般只有1个配置值,其值为01。主机发送数据包(0009010000000000)。

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

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

 

5. PSRAMSDRAMDDRDDR2的时序特性?

 

6. I2C触摸屏芯片与CPU的数据传输流程?画出相关图例?(这题目记得不是太清楚了,大概是考查I2C设备驱动的数据传输过程)

原创粉丝点击