欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    嵌入式Linux工程师常见笔试题.docx

    • 资源ID:922775       资源大小:33.56KB        全文页数:9页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式Linux工程师常见笔试题.docx

    北京航天泰容科技嵌入式Iinux笔试题目一、简答题:1 .请写出实现后面几个功能的LinUX命令:显示文件,拷叫删除LsIs-la:-I查看文件所有的信息,-a查看所有的文件,包括隐藏的文件。Cpmnta.copt2 .do”,while和while,do有什么区别?do,while至少执行一次循环体,while,do先判断循环条件再执行循环体。3 .LinUX系统下.ko文件是什么文件?.so文件是什么文件?.so文件是动态链接库文件,相当于Wirl下的.dll文件。.ko是内核模块文件,是内核加载的某个模块,一般是驱动程序。4 .如何使用Vi进行块拷贝、粘贴、删除的操作yy:复制鼠标当前所在行dd:删除鼠标当前所在行nyy/dd:复制/删除鼠标所在行开始的n行P:粘贴复制内容到鼠标所在行G:移动到文件尾大写u:取消前一个动作(大写:q:退出:W:彳踞:wq:保存退出:q!:强行!出:w文件名:另存为如:Whello:setnu:显示行号:setnonu:取消行号5 .在LinUX系统中,用来存放系统所需要的配置文件和子目录的目录是。/etc:该目录下存放各种配置文件。对于PC上的IinUX系统,/etc目录下的目录,文件非常多。6 .如何使用gcc得到宏展开的中间代码Gcc-E*.i*.c- c:编译成把源文件目标代码,不做连接的动作。- s:把源文件编译成汇编代码,不做汇编和连接的动作。- E:只把源文件进行预处理之后的结果输出来。不做编译,汇编,连接的动作。7 .如何使用gdb调试多进程答:最常用的是attach方法,首先写程序时在子进程中调用SIeeP函数休眠30-60秒,将程序编译成可执行文件,后台运行可执行文件,ps-furoot查看进程号,gdb,attach进程号,再使用StOP暂停子进程,设置一些断点和一些WatCh,break设置断点,IiSt命令观察源代码,SteP单步运行,next运行下一步,COntinUe继续运行,Print打印变量信息。8 .用户进程间通信主要哪几种方式管道、信号、消息队列、共享内存、信号量、套接字。线程同步的方法主要有:互斥锁(mutex)和信号量9 .解释命令Is-amore具体含义。A:输出所有文件,包括隐藏文件,m:横向输出文件名,并且中间以,号分开,r:列出子目录下的文件,。与-I相似,输出文件的详细信息,不输出组信息。10 .LINUX中的管道指什么,重定向又指什么管道是Iinux中很重要的一种通信方式,它是把一个程序的输出直接连接到另一个程序的输入。11 .请写出以下代码的输出内容#include""main()inta,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf("b.c,d:%d,%d,%dn,b,c,d);return0;A:13b:10c:12d:120BCd:10,12,12012 .编写一个函数intcharnum(charfn10),该函数以只读方式翻开文件fn,通过统计,返回文件中字符的个数,请使用WhiIe循环实现计数功能。请勿修改主函数main和其他函数中的任何内容,仅在函数CharnUm的花括号中填写假设干语句。文件kt7.2.cpp的内容如下:#include#include#includeintcharnum(charfn10);voidmain()intnum;num=charnum("abc.txtn);cout<<'num='<<NUM<<ENDL;)Intcharnum(charfn10)fstreamfile;file.open(fnjos:in);if(!file)cout<<,abc.txtcan'topen<<endl;abort();charch;inti=0;while(!file.eof()file.get(ch);i+;)file.close();returni-1;)二、编程题13 .如果有一个简单的Test工程目录如下:#treeTestTest1)使用wildcardpatsubst函数编写一个C+工程的Makefile文件14 .编写一个helloworld程序,要求以创立进程的方式打印HelloWorld!#include<systypes.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>Main()PidJresult;Result=forkO;If(result=-1)perror(fork);exitO;Elseif(result=0)printf(uhellowoldz,);if(result=0)printf(uhellowoldw);)15 .翻开一个文件,并读取从第100字节开始的50字节数据。ttinclude<systypes.h>ttinclde<unistd.h>include#defineMAX_LEN4096intmain(intargc,char*argv)(intfd,i;charbufMAX.LEN;for(i=0;i<MAX_LEN;i+)bufi=O;)if(argc!=2)(printf(yzInvalidargument!n/z);exit(1);)if(fd=open(char*)argvl,0_RD0NLY)=-1)PerrOr(“0Penfailed");exit;)Iseek(fd,100,SEEK_SET);if(read(fd,buf,50)!=50)(perror("Readerror");exit(1);)Printf("%sn”,buf);return0;)16 .编写一对socket程序,要求类似于networkechoprocotoLClient每隔1秒把自己的IP地址轮流循环发送给一个Server.SerVer接到IP后,在屏幕上打印对方IP:然后把自己的IP发送回去。Cliem收到回复后,在屏幕上打印对方IP。程序一直运行,直到用户退出。各自分类统计接收到的各IP的数据包的个数。注意:CIient可以向多个SerVer发送请求,SerVer也可以接收多个CIient请求。17 .请描述LinUX下程序开发到执行的工作流程结合自己的工程经历)。开发arm-linux程序至少需要三种系统:Windows系统。主要用来文件传送和一些简单的文本文件编辑。这个系统其实并非必需,只是因为目前PC机上最流行的系统仍然是WindOWS系统,我们的很多关于PC的文件和数据的操作习惯都是在WindOWS系统上养成的,已经对其形成了严重的依赖,所以WindOWS系统扮演着的“辅助开发系统”的角色。PC-Linux系统。在此系统上安装arm-Linux交叉编译器后,就可以对代码文本文件进行编译,生成可在arm-Linux系统中运行可执行程序。此系统被称为“Linux宿主机",我们对LinUX程序的开发工作(包括代码编写、调试和编译生成可执行文件)根本上就是在此系统上进行的。Arm-Linux系统。Arm-LinUX程序运行的平台。此系统的硬件载体是一块小型的嵌入式arm板,我们在LinUX宿主机上开发好程序并编译生成arm-linux可执行程序后,将可执行程序文件传送到嵌入式arm板中,然后就可以在arm板上直接运行此程序了。18 .结合自己的学习或工作感受简述LinUX与Windows编程的区别,嵌入式LinUX与Windows的嵌入式OS(如XPE.WinCE)的区别。1 .尝试论述中断产生,到中断处理结束的详细过程7'设备控制器或其他系统产生一个中断,处理器结束当前指令的执行,处理器发送中断应答信号,处理器将PSW和PC压入堆栈,根据中断,处理器加载新的PC值,保存剩余的处理状态,处理中断,恢复处理状态信息,恢复PC和PSW2 .试阐述何时可能会导致进程切换,以及进程切换的详细过程S1、时钟中断,进程允许执行的时间片结束导致进程切换2、IO中断3、内存失效4、发生错误或异常,进程被转换到退出状态5、系统调用,比方翻开文件,通常导致进程为阻塞状态1.解释命令Is-a|more具体含义.Is-a是将当前目录下的文件名输出到终端,而参加后面的ImOre是将输出结果分页显示将test.c文件编译输出为test.elf带上调试信息,可以用GDB调试用要经历四个相互关联的步骤:预处理(也称预编译,Preprocessing)、编译(CornPiIation)、汇编(ASSembIy)和连接(Linking)。预处理(PreProCeSSing):命令gcc首先调用CPP进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。编译(ComPilatiOn):接着调用CC进行编译,这个阶段根据输入文件生成以Q为后缀的目标文件。汇编(ASSembly):汇编过程是针对汇编语言的步骤,调用as进行工作,般来讲,.s为后缀的汇编语言源代码文件和汇编.s为后缀的汇编语言文件经过预编译和汇编之后都生成以Q为后缀的目标文件。连接(Linking):当所有的目标文件都生成之后,gcc就调用Id来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到适宜的地方。6.说明Udinux和Iinux的区别UCIinUX不具有的功能:1).没有存储管理单元2).不能运行时增加进程栈3).不支持分页4).可执行程序不是elf,而是flat5).不能用fork,而是用VfOrk6).RAMDISK7解释下面一组GDB命令的含义.break94设置断定,让程序在执行到第94行之前停止run运行准备调试的程序infoline121查看第121行设置的断点的信息8 .什么是链接脚本,其作用是什么请编写一个简单的链接脚本链接脚本主要用于规定如何把输入文件内的section放入输出文件内,并控制输出文件内各局部在程序地址空间内的布局.实例:以下脚本将输出文件的textsection定位在OX100O0,datasection定位在OX8000000:SECTIONS.=0×10000;.text:*(.text).=0×8000000;.data:*(.data).bss:*(.bss)解释一下上述的例子:.=0×10000:把定位器符号置为0义10000(假设不指定,那么该符号的初始值为0).text:*(.text):将所有(*符号代表任意输入文件)输入文件的.textsection合并成一个.textsection,该section的地址由定位器符号的值指定,W0×10000.=0×8000000:把定位器符号置为0×8000000.data:*(.data):将所有输入文件的.datasection合并成一个.datasection,该section的地址被置为OX8000000.bss:*(.bss):将所有输入文件的.bsssection合并成个.bsssection,该section的地址被置为0X8000000+.datasection的大小.连接器每读完一个section描述后,将定位器符号的值*增加*该SeCtiOn的大小.注意:此处没有考虑对齐约束.9 .编写一个SHELL脚本程序,将当前目录及其子目录中所有后缀为Q类型文件的文件名输出到用户指定的文件中.Is-a|*.o>result.txt10 .请写出5个LINUX根本系统调用的函数名称.包括与设备文件的交互和与普通文件的交互的系统调用(open,close,ioctl,create,unlink,.);与进程相关的系统调用又包括进程控制系统调用(fork,exit,getpid,.),11 .描述LlNUX中字符设备驱动的根本编写框架.根据StrUCtfiIjOPerMiOnS的数据结构,填充里面的如:OPen,whte,Closejoctl等函数并进行模块的初始化和退出12 .#include""stdio.h,intmain()(fork();printf("helloworld!n);函t(0);编译hello.c生成hello可执行文件在shell中执行#forkhello便可以看到打印结果13 .浅谈bootloader,kelnel,filesystem三者之间的关系.嵌入式是Iinux启动过程如下。bootloader->kernel->filesystem->application先是bootloader,它是IinlJX-kernel移植的基石,BoOtIOader是在系统启动之后、Kemel运行之前所执行的第段代码,其任务是为调用Kernel准备必要的软硬件环境。完成bootlaoder的移植后,就是kernel的移植。主要包括添加特定模块的驱动,针对具体要求对内核进行配置。这里有两点要注意:一是有些参数要与所用的bootloader向对应,如nand的分区参数。二是bootlaoder对特定模块的驱动在进入kernel后便会有kernel接管,并有kernel重新驱动文件系统主要是建立根文件和一些系统功能的实现,如bash。用busybox很容易搞定。3 .Linux系统下.ko文件是什么文件?.so文件是什么文件?LinUX下面文件名不代表什么。但是从常识上讲,.ko代码是驱动编译成的格式,.so文件一般是动态库文件4 .二维数组AA37的另外一种表示方法:*(AA3+7)*(*(AA+1)+7)5 .请写出以下代码的输出内容#includemain()inta,b,c1d;a=10;b=a+;c=+a;printf(,'b,c,d:%d,%d,%d",b,c,d);returnO;输出结果为:b,c,d:10,12,120嵌入式面试题一、ANSlC/C+局部<1>简答题1、如何在C中为一个数组分配空间?2、如何初始化一个指针数组?3、s10的另外一种表达方式是什么?4、对(-1.2345)取整是多少?5、如何让局部变量具有全局变量的生命期?6、C中的常量字符串应在何时定义?7、如何在两个C文件中引用对方的变量?8、a+b所表示的是什么意思?有什么问题?<2>问答题1、下面x,y,*p的值是多少,有什么问题?intx,y,z=2;int*p=&z;X=sizeof(*p);y=x*p;2、-一般使用malk是,需要进行强制类型转换,如:char*s;s=(char*)malloc(21);下面中?该如何填写,才可以正确执行强制类型转换?int(*monthp)31;monthp=(?)malloc(31);3、指针和数组的区别是什么?用一个简单的声明把它区分开。指针和数组的声明在什么情况下是相同的?4、C语言的左值(IalUe)和右值(rvalue)的含义是什么?5、说明C语言中术语“声明”"定义原型”的含义?6、编写一个函数,输入一个整形数,可以选择按照8/10/16进制输出字符串;7下面是一个16*16的黑白图标:staticunsignedshortstopwatch=16个数);如何修改声明,可以使之在源代码中形象的表现出图像的摸样?<3>分析题此题假设下面代码中的变量都合法,调用外部的函数都正确,答复几个问题:这些代码意图要干什么?是否有问题?如果有问题,该如何修改,或者如何防止类是错误的发生?如果没有问题,如果有输出,输出时什么?I./*X=2,y=3,Z=?*/if(x=0)if(y=0)z="l:elsez=x+y;intis_gb2312_char(charcl,charc2)(if(cl>=0xal&&c2>=Oxal)return1;elsereturnO;)二、PoSIX方面的知识<1>简答题。下面的题目必须全部答对才给分;1、在UNIX环境中,编译流程是什么?2、一般UNIX的程序有多少段,举一个实际的例子说明。3、系统调用和库函数调用有什么区别。在linux2.4.xx上的glibc和newlib(种嵌入式C库)的系统调用有什么不同?4、列出你所知道的2个内存跟踪库设计一个内存跟踪方案,为什么选择这个方案<2>综合编程题1、有一个8MB的文件,编写一个COPy程序,拷贝这个文件,并计算所需要的时间,指出是哪些代码或函数造成速度瓶颈。提示:如果只是用read/Write调用,不是一个好的实现。三、编译器与调试器1、如何使用gcc得到宏展开的中间代码2、如何通过gcc在命令行中传入宏定义3、在哪一级优化的情况下,内联函数才真正的内联到代码中4、gdb的WatCh命令如何使用,有何缺点5、gdb中使用什么命令可以显示调用的栈帧,如何查看某个栈帧上的局部变量6、如何使用gdb调试多线程四、Makefile如果有一个简单的Test工程目录如下:#treetesttest使用WiIdCard、patsubst函数编写一个C+工程的Makefile文件

    注意事项

    本文(嵌入式Linux工程师常见笔试题.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开