嵌入式LINUX工程师常见笔试题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
If(result == -1)
{perror(fork);exit();}
Else if (result == 0) {printf(“hello wold”);}
if (result == 0) {printf(“hello wold”);}
}
15. 打开一个文件,并读取从第100字节开始的50字节数据。
12. 编写一个函数 int charnum(char fn[10]),该函数以只读方式打开文件 fn,,通过统计,返回文
件中字符的个数,请使用 while 循环实现计数功能。 请勿修改主函数 main 和其他函数中的任何内
容,仅在函数 charnum 的花括号中填写若干语句。
文件 kt7_2.cpp 的内容如下: #include #include #include int charnum(char fn[10]); voidmain() { intnum; num=charnum("abc.txt"); cout<<"num="<<NUM<<ENDL; } Int charnum(char fn[10])
北京航天泰睿科技有限公司 嵌入式 linux 笔试题目 一、 简答题: 1. 请写出实现后面几个功能的 Linux 命令:显示文件,拷贝,删除
Ls ls -la: -l 查看文件所有的信息,-a 查看所有的文件,包括隐藏的文件。
Cp /mnt/a.c /opt/
Rm /mnt/a.c
2. do„„while 和 while„„do 有什么区别?
7. 如何使用 gdb 调试多进程 答:最常用的是 attach 方法, 首先写程序时在子进程中调用 sleep 函数休眠30-60秒,将程序编译成可执行文件,后台运行可执行 文件,ps -fu root 查看进程号,gdb,attach 进程号,再使用 stop 暂停子进程,设置一些断点和一 些 watch,break 设置断点,list 命令察看源代码,step 单步运行,next 运行下一步,continue 继 续运行,print 打印变量信息。 8. 用户进程间通信主要哪几种方式 管道、信号、消息队列、共享内存、信号量、套接字。 线程同步的方法主要有:互斥锁(mutex)和信号量 9. 解释命令 ls -amore 具体含义。 A:输出所有文件,包括隐藏文件,m:横向输出文件名,并且中间以,号分开,r:列出子目录下的 文件,o 与-l 相似,输出文件的详细信息,不输出组信息。 10. LINUX 中的管道指什么,重定向又指什么 管道是 linux 中很重要的一种通信方式,它是把一个程序的输出直接连接到另一个程序的输入。
} 二、编程题 13. 如果有一个简单的 Test 项目目录如下:
# tree Test
Test
|-- common.h
|-- main.cpp
|-- test.cpp
`-- test.h
1)使用 wildcard、patsubst 函数编写一个 C++项目的 Makefile 文件
2)使用 automake、autoconfig 编写一个支持 configure 选项的 configure.in 脚本
4.浅述 GCC 编译器在编译时都有哪几个过程 要经历四个相互关联的步骤:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇 编(Assembly)和连接(Linking)。 预处理(Preprocessing):命令 gcc 首先调用 cpp 进行预处 理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义 define 等)进行分析。 编译(Compilation):接着调用 cc 进行编译,这个阶段根据输入文件生成以.o 为后缀的目标文件。 汇编(Assembly):汇编过程是针对汇编语言的步骤,调用 as 进行工作, 一般来讲,.s 为后缀的汇编语言源代码文件和汇编.s 为后缀的汇编语言文件经过预编译和汇 编之后都生成以.o 为后缀的目标文件。 连接(Linking):当所有的目标文件都生成之后,gcc 就调用 ld 来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被 安排在可执行程序中的恰当位置,同时,该程序所调用到的库函数也从各自所在的档案库中 连到合适的地方。 6.说明 uclinux 和 linux 的区别 uclinux 不具有的功能: 1). 没有存储管理单元 2). 不能运行时增加进程栈 3). 不支持 分页 4). 可执行程序不是 elf, 而是 flat 5). 不能用 fork, 而是用 vfork 6). RAMDISK 7 解释下面一组 GDB 命令的含义. break 94 设置断定,让程序在执行到第94行之前停止 run 运行准备调试的程序 info line 121 查看第121行设置的断点的信息 8.什么是链接脚本,其作用是什么 请编写一个简单的链接脚本 链接脚本主要用于规定如何把输入文件内的 section 放入输出文件内, 并控制输出文件内各 部分在程序地址空间内的布局. 实例:以下脚本将输出文件的 text section 定位在0×10000, data section 定位在0×8000000: SECTIONS { . = 0×10000; .text : { *(.text) } . = 0×8000000; .data : { *(.data) } .bss : { *(.bss) } } 解释一下上述的例子: . = 0×10000 : 把定位器符号置为0×10000 (若不指定, 则该符号的初始值为0). .text : { *(.text) } : 将所有(*符号代表任意输入文件)输入文件的.text section 合并成一个.text section, 该 section 的地址由定位器符号的值指定, 即0×10000. . = 0×8000000 :把定位器符号置为0×8000000 .data : { *(.data) } : 将所有输入文件的.data section 合并成一个.data section, 该 section 的地址被置为0×8000000. .bss : { *(.bss) } : 将 所 有 输 入 文 件 的 .bss section 合 并 成 一 个 .bss section , 该 section 的 地 址 被 置 为 0×8000000+.data section 的大小. 连接器每读完一个 section 描述后, 将定位器符号的值* 增加*该 section 的大小. 注意: 此处没有考虑对齐约束. 9.编写一个 SHELL 脚本程序,将当前目录及其子目录中所有后缀为.O 类型文件的文件名输 出到用户指定的文件中. ls -a | *.o >result.txt
Arm-Linux 系统。 Arm-Linux 程序运行的平台。此系统的硬件载体是一块小型的嵌入式 arm 板,我们在 Linux 宿 主机上开发好程序并编译生成 arm-linux 可执行程序后,将可执行程序文件传送到嵌入式 arm 板中, 然后就可以在 arm 板上直接运行此程序了。
18. 结合自己的学习或工作感受简述 Linux 与 Windows 编程的区别,嵌入式 Linux 与 Windows 的 嵌入式 OS(如 XPE、WinCE)的区别。
Windows 系统。
主要用来文件传送和一些简单的文本文件编辑。这个系统其实并非必需,只是因为目前 PC 机上
最流行的系统仍然是 Windows 系统,我们的很多关于 PC 的文件和数据的操作习惯都是在 Windows
系统上养成的,已经对其形成了严重的依赖,所以 Windows 系统扮演着的“辅助开发系统”的角色。
14. 编写一个 hello world 程序,要求以创建进程的方式打印 Hello World!
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
Main()
{
Pid_t result;
Result = fork();
#include <sys/types.h> #include <unistd.h> #include #define MAX_LEN 4096
int main(int argc, char **argv) {
int fd, i; char buf[MAX_LEN]; for(i=0; i<MAX_LEN;i++) {
程序一直运行,直到用户退出。各自分类统计接收到的各 IP 的数据包的个数。
注意:Client 可以向多个 Server 发送请求,Server 也可以接收多个 Client 请求。
17.请描述 Linux 下程序开发到执行的工作流程(结合自己的项目经历)。
开发 arm-linux 程序至少需要三种系统:
/etc :该目录下存放各种配置文件。对于 PC 上的 linux 系统,/etc 目录下的目录,文件非常多。
6. 如何使用 gcc 得到宏展开的中间代码 Gcc -E *.i *.c
-c:编译成把源文件目标代码,不做连接的动作。 -s:把源文件编译成汇编代码,不做汇编和连接的动作。 -E:只把源文件进行预处理之后的结果输出来。ቤተ መጻሕፍቲ ባይዱ做编译,汇编,连接的动作。
1. 尝试论述中断产生,到中断处理结束的详细过程7’ 设备控制器或其他系统产生一个中断,处理器结束当前指令的执行,处理器发送中断应答信 号,处理器将 PSW 和 PC 压入堆栈,根据中断,处理器加载新的 PC 值,保存剩余的处理状 态,处理中断,恢复处理状态信息,恢复 PC 和 PSW
2. 试阐述何时可能会导致进程切换,以及进程切换的详细过程8' 1、时钟中断,进程允许执行的时间片结束导致进程切换 2、IO 中断 3、内存失效 4、发生错误或异常,进程被转换到退出状态 5、系统调用,比如打开文件,通常导致进程为阻塞状态
do„„while 至少执行一次循环体,while„„do 先判断循环条件再执行循环体。
3. Linux 系统下.ko 文件是什么文件?.so 文件是什么文件? .so 文件是动态链接库文件,相当于 win 下的 .dll 文件。
.ko 是内核模块文件,是内核加载的某个模块,一般是驱动程序。
4. 如何使用 vi 进行块拷贝、粘贴、删除的操作 yy:复制鼠标当前所在行 dd:删除鼠标当前所在行 nyy/dd:复制/删除鼠标所在行开始的 n 行 p:粘贴复制内容到鼠标所在行 G:移动到文件尾(大写) u:取消前一个动作(大写) :q :退出 :w :保存 :wq :保存退出 :q! :强行退出 :w 文件名:另存为 如::w hello :set nu :显示行号 :set nonu:取消行号 5. 在 Linux 系统中,用来存放系统所需要的配置文件和子目录的目录是。
16. 编写一对 socket 程序,要求类似于 network echo procotol。
Client 每隔1秒把自己的 IP 地址轮流循环发送给一个 Server.
Server 接到 IP 后,在屏幕上打印对方 IP;然后把自己的 IP 发送回去。 Client 收到回复后,在屏幕
上打印对方 IP。
PC-Linux 系统。
在此 系统 上安 装 arm-Linux 交叉 编译 器后 ,就可 以对 代码 文本 文件进 行编 译, 生成可 在
arm-Linux 系统中运行可执行程序。此系统被称为“Linux 宿主机”,我们对 Linux 程序的开发工作 (包括代码编写、调试和编译生成可执行文件)基本上就是在此系统上进行的。
11. 请写出下列代码的输出内容
#include “stdio.h”
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;}
A:13 b:10 c:12 d:120
B,c,d:10,12,120
buf[i]=0; } if(argc!=2) {
printf("Invalid argument!\n"); exit(1); } if((fd=open((char*)argv[1], O_RDONLY))==-1) {
perror("Open failed"); exit(1); } lseek(fd, 100, SEEK_SET); if(read(fd, buf, 50)!=50) { perror("Read error"); exit(1); } printf("%s\n", buf); return 0; }
{
fstream file; file.open(fn,ios::in); if(!file) {cout<<"abc.txt can't open"<<endl; abort();} char ch; int i=0; while(!file.eof()) {file.get(ch); i++;} file.close(); return i-1;
1.解释命令 ls -a | more 具体含义. ls -a 是将当前目录下的文件名输出到终端,而加入后面的| more 是将输出结果分页显示 2.LINUX 中的管道指什么重定向又指什么 3.GCC -g -o test.elf test.c 的具体含义 将 test.c 文件编译输出为 test.elf 带上调试信息,可以用 GDB 调试用
相关文档
最新文档