linux驱动面试题_第1页
linux驱动面试题_第2页
linux驱动面试题_第3页
linux驱动面试题_第4页
linux驱动面试题_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、linux驱动面试题21.什么是GPIO?general purpose input/output  GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的功能,即可做GPIO也可做其他用途。 也就是说你可以把这些引脚拿来用作任何一般用途的输入输出,例如用一根引脚连到led的一极来控制它的亮灭,也可以用一根(一些)引脚连到一个传感器上以获得该传感器的状态,这给cpu提供了一个方便的控制周边设备的途经。如果没有足够多的gpio管脚,在控制一些外围设备时就会力有不逮,这时可采取的方案是使用CPLD来帮助

2、管理。2.触摸屏的硬件原理?触摸屏的主要三大种类是:电阻技术触摸屏、 表面声波技术触摸屏、 电容技术触摸屏。电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏, 这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面图有一层透明氧化金属 (ITO氧化铟,透明的导电电阻) 导电层,上面在盖有一层外表面硬化处理、光滑防擦的塑料层 、它的内表面也涂有一层ITO涂层 、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘 。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器侦测到这一接触并计算出(X,Y )的位置,再根据模拟鼠标的方式运作。这就是电阻技

3、术触摸屏的最基本的原理。表面声波技术是利用声波在物体的表面进行传输,当有物体触摸到表面时,阻碍声波的传输,换能器侦测到这个变化,反映给计算机,进而进行鼠标的模拟。电容技术触摸屏利用人体的电流感应进行工作 。用户触摸屏幕时 ,由于人体电场,用户和触摸屏表面形成以一个耦合电容, 对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流3.在Linux C中,ls这个命令是怎么被执行的?使用fork创建一个进程或exec函数族覆盖原进程。4.在一个只有128M内存并且没有交换分区的机器上,说说下面两个程序的运行结果1,#define MEMSIZE 1024*1024int count

4、= 0;void *p = NULL;while(1)   p = (void *)malloc(MEMSIZE);  if (!p) break;  printf("Current allocation %d MBn", +count);2,while(1)   p = (void *)malloc(MEMSIZE);  if (!p) break;  memset(p, 1, MEMSIZE);  printf("Current allocation %d MBn", +count

5、);第一道程序分配内存但没有填充,编译器可能会把内存分配优化掉,程序死循环;第二道,程序分配内存并进行填充,系统会一直分配内存,直到内存不足,退出循环。5.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句搞的比较复杂。主要思想就是a-b的值的最高位是否为0;但是又得考虑整数溢出的问题,所以很复杂。不知道哪位大侠有更好的办法,指点指点。1. #include<stdio.h>2.3. #define ZHENG(i)(i>> 31)= 0)4. #define FU(i)(i>> 31)!=&

6、#160;0)5. #define COMPARE(a,b)(ZHENG(a)&& FU(b)|(ZHENG(a)&& ZHENG(b)|(FU(a)&&FU(b)&&(a)-(b)>> 31)= 0)6.7. void main()8. 9.     int a = 0x80000001;10.     int b = 0x6FFFFFFF

7、;11.12.     if(COMPARE(a,b)13.     14.         printf("a >= bn");15.     16.     else17.     18.         printf("a < bn");19.     20.

8、   1、LINUX下的Socket套接字和Windows下的WinSock有什么共同点?请从C/C+语言开发的角度描述,至少说出两点共同点。(10分,说得好的每点加5分,没有上限。精通SOCK编程者破格录用。)本题的目的就是考考应试者的SOCK功底,以及应用能力。答案可谓是五花八门,但是答对的少得可怜。其实答案很多,也很好回答。可见面试者功底确实一般,对SOCK编程只是一知半解。更有甚者,把TCP/IP的原理搬出来讲了一大堆,却无一条符合要求。参考答案:第1题,答中一个得5分,答出其它正确答案的,也得5分。a)都基于TCP/IP协议,都提供了面向连接的TCP S

9、OCK和无连接的UDP SOCK。b)都是一个sock结构体。c)都是使用sock文件句柄进行访问。d)都具有缓冲机制。2、请编写一个标准Shell脚本testd,实现如下功能:A、在Linux操作系统启动的时候,自动加载/mnt/test/test程序。B、当test异常退出之后,自动重新启动。C、当test程序重启次数超过100次,自动复位操作系统。假设你所拥有的资源:A、目标机器是一台具有标准shell的嵌入式计算机,CPU为ARM7 56MB,内存16MB,软件环境基于Linux2.6.11和BusyBox1.2构建。B、当前已有11个用户进程在运行,占用了大部分的CPU时间和内存,你

10、可使用的内存只有2MB左右,CPU时间由系统分派。(本题满分20分,程序15分,注释5分。程序不能运行的0分,能够运行但有BUG的10分,能够正确无误的运行的15分。清楚编写注释的5分。)本题是考查LINUX和嵌入式编程功底的,写出程序来的不少,但是95%以上的人竟无视我假设的资源,不知道在重启test程序的时候需要加上一个适当的掩饰时间,以便资源紧张的操作系统有时间回收资源。85%的人不知道写完testd之后,要在init里边加载这个脚本,才能实现启动时自动加载的功能。有人甚至在脚本开头使用bash作为脚本解析器,我已经清清楚楚说明了用“标准shell”!用sh不就完了吗?是习惯作祟吗?参考

11、答案:#testd is a daemon script to start an watch the program test#!/bin/sh#load *.so that may needif -r /sbin/ldconfig ; thenldconfigfi#add the libs PATH that may needexport LD_LIBRARY_PATH="/lib"#count is the counter of test started timescount=0#main loopwhile 1 ;do#add execute property for

12、 /mnt/test/testchmod +x /mnt/test/test#start test/mnt/test/test#the running times counterlet count=count+1echo "test running times is $count"#Is test running too many times?if "$count" -gt 100 ; thenecho "Will reboot because of test running too many times"rebootfi#wait

13、for test stoping.sleep 3done#  就业模拟测试题-LINUX驱动、系统底层工程师职位   1.你平常是怎么用C写嵌入式系统的死循环的? 3分  2.写一条命令,实现在dir以及其子目录下找出所有包含“hello world”字符串的文件2分  3.下面的两段程序中,循环能否执行?为什么?A: unsigned short i; unsigned short index = 0; for(i = 0; i <index-1; i+)     printf

14、(“an”);                        B: unsigned short i; unsigned long index = 0; for(i = 0; i <index-1; i+)      printf(“bn”);       

15、60;           4.一个计划跑LINUX系统的ARM系统把bootloader烧录进去后,上电后串口上没有任何输出,硬件和软件各应该去检查什么?    提示: 1.跑LINUX的系统一般都需要外扩DRAM,一般的系统也经常有NOR或NAND FLASH           2.bootloader一般是由汇编和C编写的裸奔程序

16、5分    5.列举最少3种你所知道的嵌入式的体系结构,并请说明什么是ARM体系结构。7分  6.请简述下面这段代码的功能 mov r12, #0x0        ldr r13, =0x30100000 mov r14, #4096 loop:   ldmia      r12!, r0-r11  stmia      r13!, r

17、0-r11    cmp       r12, r14   blo          loop  2分   7.嵌入式中常用的文件系统有哪些?说出它们的主要特点和应用场合?5分    8.某外设寄存器rGpioBase的地址是0x56000000,寄存器的015位有效,请写出给外设寄存器高八位(815位)设置成0xc3

18、的代码7分  9.根据时序图和说明编写程序:  GPIO已经设置好,只需要调用函数gpio_seet_level(int gpio, int level)即课使某个GPIO输出高电平或者低电平。图中用于产生时序的gpio已经分别定义为SSP_XCS,SSP_SCLK,SSP_DIN,level的定义分别为GPIO_LO和GPIO_HI,需要编写函数的原型为:void ssp_io_write_word(u32 command),该函数用来输出一个字(如上图中的A0到C0一组9位),这9个位是在参数command中的低9位. 5分  10.简述LINUX系

19、统从上电开始到系统起来的主要流程?  提示: 1.可以uboot、内核和文件系统的主要功能去总结          2.这个题主要是在笔试之后的面试,需要在35分钟之内表述清楚8分   11.如何编写一个LINUX驱动? 提示:主要说字符设备的编写过程 7分    12.简述LINUX驱动中字符设备和块设备的区别?5分     13.试总结单片机底层开发与LINUX驱

20、动开发有哪些异同?4分    14.请从网卡、USB HOST、LCD驱动器、NAND FLASH、WIFI 、音频芯片中选择一个或者2个(可以以具体的芯片为例),对下面的问题做答: 1.如果是外部扩展芯片,请说出你用的芯片的型号                       每空5分  15.画出上题中你选定

21、相应硬件模块与CPU的主要引脚连线5分  16. 编写上题中你选定相应硬件模块相应LINUX驱动的流程?6分        int *ptr = (int *)0xaa66; *ptr = 0x67a9; 我感觉自己写的应该不算错吧(自我感觉,还请达人指正),我写的适合裸机下用,当做寄存器用,而答案就是适合在操作系统下的写法。    1. linux内核里面,内存申请有哪几个函数,各自的区别?  2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的?  3.   int *a;  char *b;  a 和 b本身是什么类型?  a、b里面本身存放的只是一个地址,难道是这两个地址有不同么?    4. 中断的上半部分和下半部分的问

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论