版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京航天泰睿科技嵌入式linux笔试题目一、简答题:1.请写出实现后面几个功能的Linux命令:显示文件,拷贝,删除Lsls-la:-l查看文件所有的信息,-a查看所有的文件,包括隐藏的文件。Cp/mnt/a.c/opt/do„„while和while„„do有什么区别?do„„while至少执行一次循环体,while„„do先判断循环条件再执行循环体。Linux系统下.ko文件是什么文件?.so文件是什么文件?.so文件是动态链接库文件,相当于win下的.dll文件。
.ko是内核模块文件,是内核加载的某个模块,一般是驱动程序。如何使用vi进行块拷贝、粘贴、删除的操作yy:复制鼠标当前所在行dd:删除鼠标当前所在行nyy/dd:复制/删除鼠标所在行开始的n行p:粘贴复制内容到鼠标所在行G:移动到文件尾〔大写〕u:取消前一个动作〔大写〕:q:退出:w:保存:wq:保存退出:q!:强行退出:w文件名:另存为如::whello:setnu:显示行号:setnonu:取消行号在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是。/etc:该目录下存放各种配置文件。对于PC上的linux系统,/etc目录下的目录,文件非常多。如何使用gcc得到宏展开的中间代码Gcc-E*.i*.c-c:编译成把源文件目标代码,不做连接的动作。-s:把源文件编译成汇编代码,不做汇编和连接的动作。-E:只把源文件进行预处理之后的结果输出来。不做编译,汇编,连接的动作。如何使用gdb调试多进程答:最常用的是attach方法,首先写程序时在子进程中调用sleep函数休眠30-60秒,将程序编译成可执行文件,后台运行可执行文件,ps-furoot查看进程号,gdb,attach进程号,再使用stop暂停子进程,设置一些断点和一些watch,break设置断点,list命令观察源代码,step单步运行,next运行下一步,continue继续运行,print打印变量信息。用户进程间通信主要哪几种方式管道、信号、消息队列、共享内存、信号量、套接字。线程同步的方法主要有:互斥锁〔mutex〕和信号量解释命令ls-amore具体含义。A:输出所有文件,包括隐藏文件,m:横向输出文件名,并且中间以,号分开,r:列出子目录下的文件,o与-l相似,输出文件的详细信息,不输出组信息。LINUX中的管道指什么,重定向又指什么管道是linux中很重要的一种通信方式,它是把一个程序的输出直接连接到另一个程序的输入。11.请写出以下代码的输出内容#include“〞main(){inta,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d〕;return0;}A:13b:10c:12d:120B,c,d:10,12,12012.编写一个函数intcharnum(charfn[10]),该函数以只读方式翻开文件fn,,通过统计,返回文件中字符的个数,请使用while循环实现计数功能。请勿修改主函数main和其他函数中的任何内容,仅在函数charnum的花括号中填写假设干语句。文件kt7_2.cpp的内容如下:#include#include#includeintcharnum(charfn[10]);voidmain(){intnum;num=charnum("abc.txt");cout<<"num="<<NUM<<ENDL;}Intcharnum(charfn[10]){fstreamfile;file.open(fn,ios::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〕使用wildcard、patsubst函数编写一个C++工程的Makefile文件14.编写一个helloworld程序,要求以创立进程的方式打印HelloWorld!#include<sys/types.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>Main(){Pid_tresult;Result=fork();If(result==-1){perror(fork);exit();}Elseif(result==0){printf(“hellowold〞);}if(result==0){printf(“hellowold〞);}}翻开一个文件,并读取从第100字节开始的50字节数据。#include<sys/types.h>
#include<unistd.h>
#include
#defineMAX_LEN4096
intmain(intargc,char**argv)
{
intfd,i;
charbuf[MAX_LEN];
for(i=0;i<MAX_LEN;i++)
{
buf[i]=0;
}
if(argc!=2)
{
printf("Invalidargument!\n");
exit(1);
}
if((fd=open((char*)argv[1],O_RDONLY))==-1)
{
perror("Openfailed");
exit(1);
}
lseek(fd,100,SEEK_SET);
if(read(fd,buf,50)!=50)
{
perror("Readerror");
exit(1);
}
printf("%s\n",buf);
return0;
}16.编写一对socket程序,要求类似于networkechoprocotol。Client每隔1秒把自己的IP地址轮流循环发送给一个Server.Server接到IP后,在屏幕上打印对方IP;然后把自己的IP发送回去。Client收到回复后,在屏幕上打印对方IP。程序一直运行,直到用户退出。各自分类统计接收到的各IP的数据包的个数。注意:Client可以向多个Server发送请求,Server也可以接收多个Client请求。请描述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板上直接运行此程序了。结合自己的学习或工作感受简述Linux与Windows编程的区别,嵌入式Linux与Windows的嵌入式OS〔如XPE、WinCE〕的区别。1.尝试论述中断产生,到中断处理结束的详细过程7’设备控制器或其他系统产生一个中断,处理器结束当前指令的执行,处理器发送中断应答信号,处理器将PSW和PC压入堆栈,根据中断,处理器加载新的PC值,保存剩余的处理状态,处理中断,恢复处理状态信息,恢复PC和PSW2.试阐述何时可能会导致进程切换,以及进程切换的详细过程8'1、时钟中断,进程允许执行的时间片结束导致进程切换2、IO中断3、内存失效4、发生错误或异常,进程被转换到退出状态5、系统调用,比方翻开文件,通常导致进程为阻塞状态解释命令ls-a|more具体含义.ls-a是将当前目录下的文件名输出到终端,而参加后面的|more是将输出结果分页显示将test.c文件编译输出为test.elf带上调试信息,可以用GDB调试用要经历四个相互关联的步骤:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。预处理(Preprocessing):命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。编译(Compilation):接着调用cc进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编(Assembly):汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.s为后缀的汇编语言源代码文件和汇编.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。连接(Linking):当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到适宜的地方。说明uclinux和linux的区别uclinux不具有的功能:1〕.没有存储管理单元2〕.不能运行时增加进程栈3〕.不支持分页4〕.可执行程序不是elf,而是flat5〕.不能用fork,而是用vfork6〕.RAMDISK7解释下面一组GDB命令的含义.break94设置断定,让程序在执行到第94行之前停止run运行准备调试的程序infoline121查看第121行设置的断点的信息什么是链接脚本,其作用是什么请编写一个简单的链接脚本链接脚本主要用于规定如何把输入文件内的section放入输出文件内,并控制输出文件内各局部在程序地址空间内的布局.实例:以下脚本将输出文件的textsection定位在0×10000,datasection定位在0×8000000:SECTIONS{.=0×10000;.text:{*(.text)}.=0×8000000;.data:{*(.data)}.bss:{*(.bss)}}解释一下上述的例子:.=0×10000:把定位器符号置为0×10000(假设不指定,那么该符号的初始值为0)..text:{*(.text)}:将所有(*符号代表任意输入文件)输入文件的.textsection合并成一个.textsection,该section的地址由定位器符号的值指定,即0×10000..=0×8000000:把定位器符号置为0×8000000.data:{*(.data)}:将所有输入文件的.datasection合并成一个.datasection,该section的地址被置为0×8000000..bss:{*(.bss)}:将所有输入文件的.bsssection合并成一个.bsssection,该section的地址被置为0×8000000+.datasection的大小.连接器每读完一个section描述后,将定位器符号的值*增加*该section的大小.注意:此处没有考虑对齐约束.编写一个SHELL脚本程序,将当前目录及其子目录中所有后缀为.O类型文件的文件名输出到用户指定的文件中.ls-a|*.o>result.txt请写出5个LINUX根本系统调用的函数名称.包括与设备文件的交互和与普通文件的交互的系统调用〔open,close,ioctl,create,unlink,...〕;与进程相关的系统调用又包括进程控制系统调用〔fork,exit,getpid,...〕,描述LINUX中字符设备驱动的根本编写框架.根据structfile_operations的数据结构,填充里面的如:open,write,close,ioctl等函数并进行模块的初始化和退出#include""stdio.h"intmain(){fork();printf("helloworld!/n");exit(0);}编译hello.c生成hello可执行文件在shell中执行#forkhello便可以看到打印结果浅谈bootloader,kelnel,filesystem三者之间的关系.嵌入式是linux启动过程如下。bootloader->kernel->filesystem->application先是bootloader,它是linux-kernel移植的基石,Bootloader是在系统启动之后、Kernel运行之前所执行的第一段代码,其任务是为调用Kernel准备必要的软硬件环境。完成bootlaoder的移植后,就是kernel的移植。主要包括添加特定模块的驱动,针对具体要求对内核进行配置。这里有两点要注意:一是有些参数要与所用的bootloader向对应,如nand的分区参数。二是bootlaoder对特定模块的驱动在进入kernel后便会有kernel接管,并有kernel重新驱动文件系统主要是建立根文件和一些系统功能的实现,如bash。用busybox很容易搞定。Linux系统下.ko文件是什么文件?.so文件是什么文件?Linux下面文件名不代表什么。但是从常识上讲,.ko代码是驱动编译成的格式,.so文件一般是动态库文件二维数组AA[3][7]的另外一种表示方法:*(AA[3]+7)*(*(AA+1)+7)请写出以下代码的输出内容#include“〞main(){inta,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d〕;return0;}输出结果为:b,c,d:10,12,120嵌入式面试题一、ANSIC/C++局部<1>简答题1、如何在C中为一个数组分配空间?2、如何初始化一个指针数组?3、s[10]的另外一种表达方式是什么?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、一般使用malloc是,需要进行强制类型转换,如: char*s;s=(char*)malloc(21); 下面中???该如何填写,才可以正确执行强制类型转换? int(*monthp)[31];monthp=(???)malloc(31);3、指针和数组的区别是什么?用一个简单的声明把它区分开。 指针和数组的声明在什么情况下是相同的?4、C语言的左值(lalue)和右值(rvalue)的含义是什么?5、说明C语言中术语“声明“〞定义“〞原型“的含义?6、编写一个函数,输入一个整形数,可以选择按照8/10/16进制输出字符串;7下面是一个16*16的黑白图标: staticunsignedshortstopwatch[]={16个数}; 如何修改声明,可以使之在源代码中形象的表现出图像的摸样?<3>分析题此题假设下面代码中的变量都合法,调用外部的函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 与上级汇报工作制度
- 供电所值班工作制度
- 习酒制酒工工作制度
- 人财物管理工作制度
- 骨科护理质量控制与护理质量改进经验分享
- 业务监督岗工作制度
- 健身房卫生工作制度
- 办事处加强工作制度
- 办公室科室工作制度
- 动物救助站工作制度
- 2025版幼儿园章程幼儿园办园章程
- 《物流经济地理》课件(共十二章)-下
- 《大学英语》课程说课说课
- 2025年事业单位招聘考试职业能力倾向测验试卷(造价工程师类)
- 《技术经济》课件(共九章)
- 煤矿安全学习平台
- 推掌防御反击技术课件
- 外科ICU职业防护课件
- DB31/T 1339-2021医院多学科诊疗管理规范
- 浙江奇斌钢管科技有限公司年加工3万吨无缝钢管生产线项目环境影响报告表
- DB41T 1021-2015 衰老古树名木复壮技术规程
评论
0/150
提交评论