linux驱动面试题
- 格式:docx
- 大小:54.72 KB
- 文档页数:8
Linux面试题大全,测测你的水平(答案)一.填空题:1. 在Linux系统中,以文件方式访问设备。
2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统。
3. Linux文件系统中每个文件用索引节点来标识。
Linux文件系统使用索引节点来记录文件信息,作用于Windows的文件分配表类似,索引节点是一个数据结构,它包含了一个文件的文件名,位置,大小,建立或修改时间,访问权限,所属关系等文件控制信息,一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引结点数组中的唯一一个元素对应,系统为每个索引结点分配了一个号码,也就是该结点在数组中的索引号,称为索引结点号。
Linux文件系统将文件索引结点号和文件名同时保存在目录中,所以目录只是将文件的名称和它的索引结点号结合在一起的一张表。
目录中每一对文件名称和索引结点号称为一个连接。
4. 全部磁盘块由四个部分组成,分别为引导块、专用块、i节点表块和数据存储块。
Linux系统中的每个文件都被赋予一个唯一的数值,这个数值称做索引节点。
索引节点存储在一个称作索引节点表<inode table>中,该表在磁盘格式化时被分配。
每个实际的磁盘或分区都有其自己的索引节点表。
一个索引节点包含文件的所有信息,包括磁盘上数据的地址和文件类型。
文件类型包括如普通文件、目录和特殊文件这样的信息。
linux硬盘组织方式为:引导区、超级块(superblock),索引结点(inode),数据块(datablock),目录块(diredtory block)。
其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置。
但是索引结点中不包括文件的名字,文件名是放在目录块里的。
linux 驱动面试题Linux驱动面试题Linux驱动是许多技术岗位面试过程中经常出现的一个重要考点。
在这篇文章中,我将通过一系列Linux驱动面试题,帮助您更好地理解和掌握Linux驱动的相关知识。
本文将涵盖从基础知识到深入理解的面试问题,旨在帮助您应对Linux驱动岗位的挑战。
1. 什么是Linux驱动?Linux驱动是用于设备与操作系统之间通信以实现设备功能的软件程序。
它充当着设备硬件和操作系统之间的接口,使得操作系统能够与设备进行交互。
Linux支持各种类型的驱动,包括字符设备驱动、块设备驱动和网络设备驱动等。
2. Linux驱动的加载和卸载过程是怎样的?在Linux系统中,驱动的加载和卸载通过模块实现。
首先,驱动程序将被编译为模块,然后使用insmod命令将模块加载到内核中。
加载模块时,内核会执行模块的初始化函数。
相反,使用rmmod命令可以将模块从内核中卸载,卸载模块时,内核会执行模块的清理函数。
3. Linux驱动的主要组成部分是什么?Linux驱动主要由两个组成部分组成:设备驱动程序和设备文件。
设备驱动程序由设备主要功能的实现组成,包括硬件的初始化、读写操作的处理以及与操作系统的交互等。
设备文件是与设备驱动程序进行交互的接口,通过设备文件可以对设备进行访问和控制。
4. 请解释一下Linux中的字符设备和块设备。
字符设备是指按字节顺序进行访问的设备,其输入输出是连续、无结构的流。
例如,键盘和鼠标就是字符设备。
对字符设备的访问是以字节为单位进行的,一次只能读取或写入一个字符。
块设备是指以固定大小的块进行访问的设备,其输入输出是按块进行的,块的大小通常为512字节或4KB。
例如,硬盘就是块设备。
对块设备的访问可以一次读取或写入一个或多个块。
5. Linux驱动中的缓冲区是什么?它的作用是什么?缓冲区是用于在内存中暂存数据的一块区域。
在Linux驱动中,缓冲区用来存储从设备读取的数据或要写入设备的数据。
linux 驱动面试题Linux驱动面试题1. 概述Linux驱动程序是连接硬件设备和操作系统之间的重要软件,其作用是向操作系统提供对硬件设备的控制和访问接口。
在Linux系统下,驱动程序的设计和实现是嵌入式系统开发中的重要环节。
本文将介绍一些常见的Linux驱动面试题,帮助读者进行备考和提升相关知识水平。
2. 设备模型与驱动框架Linux内核具有完善的设备模型和驱动框架,以支持各种硬件设备的驱动开发。
在面试中,面试官通常会询问与设备模型和驱动框架相关的问题,如:a) 请介绍Linux内核的设备模型以及其作用。
b) 请解释驱动框架中的Platform设备和Pins控制器是如何配合工作的。
3. 字符设备驱动字符设备驱动是Linux常见的一种驱动类型,用于向应用程序提供对字符设备的访问接口。
相关的面试题可能包括:a) 请解释字符设备驱动的基本工作原理。
b) 内核中的“注册字符设备驱动”的过程是怎样的?c) 请介绍字符设备驱动中的主要数据结构,并解释其作用。
4. 块设备驱动块设备驱动用于向操作系统提供对块设备(如硬盘)的访问接口。
在Linux面试中,可能会涉及以下问题:a) 请解释块设备驱动与字符设备驱动的区别。
b) 在Linux内核中,块设备驱动是如何处理块设备的请求的?c) 请介绍块设备驱动中的磁盘调度算法以及其作用。
5. 中断处理中断是处理外部事件的一种机制,驱动程序需要能够正确处理中断。
面试中可能会涉及以下问题:a) 请解释中断处理机制,并描述Linux内核中的中断处理流程。
b) 在驱动程序中,如何注册和处理中断?c) 请介绍Linux内核中的软中断和Tasklet。
6. 性能优化和调试性能优化和调试是驱动程序开发中重要的环节,也是面试中常见的问题之一。
相关问题可能包括:a) 请介绍一些常用的性能优化方法和工具,用于提高驱动程序的性能。
b) 在Linux内核中,如何进行驱动程序的调试和故障定位?c) 请解释内核中的“内核态”和“用户态”,以及二者之间的区别。
驱动开发面试题目及答案1. 什么是驱动开发(Driver Development)?驱动开发是指为操作系统提供硬件设备的控制程序。
驱动程序与硬件设备之间通过操作系统的驱动模块进行交互,实现设备的初始化、数据传输、中断处理和错误处理等功能。
2. 驱动开发的基本要求有哪些?- 具备良好的编程基础和扎实的操作系统原理知识- 熟悉硬件电路和设备的工作原理- 熟悉特定硬件设备的相关规范和协议- 具备调试和故障排除的能力- 具备团队合作和沟通能力3. 驱动开发的流程包括哪些步骤?- 需求分析和规划:确定需要开发的驱动类型、支持的硬件设备和操作系统版本,制定开发进度和计划。
- 硬件适配和端口配置:了解硬件设备的接口特征和相关寄存器,编写初始化代码和配置驱动程序与设备的通信接口。
- 设备驱动程序编写:根据硬件设备的规范和操作系统的驱动接口,编写设备驱动程序,包括设备初始化、数据传输、中断处理等。
- 调试和测试:通过调试工具和测试用例验证驱动程序的正确性和性能,修复错误和优化程序。
- 集成和发布:将开发好的驱动程序集成到操作系统中,并进行安装和发布,确保程序能够正常运行。
4. 驱动开发中常见的编程语言有哪些?- C语言:大部分驱动程序都是使用C语言编写的,因为其具有良好的效率和可移植性。
- 汇编语言:部分特定的硬件设备驱动程序可能需要使用汇编语言编写,以直接操作硬件寄存器和指令。
- C++语言:在一些需要更高级别的抽象和封装的场景下,可以选择使用C++语言开发驱动程序。
5. 驱动开发中涉及的常用接口和框架有哪些?- Windows驱动程序框架(WDF):用于开发驱动程序的框架,提供了一系列的函数和模型,简化了驱动程序的开发和维护。
- Linux设备模型(Device Model):用于将设备抽象为设备树的形式,并提供一组API进行设备驱动程序的开发。
- Android驱动开发框架:用于在Android操作系统上开发设备驱动程序的框架,提供了一系列Java和C/C++函数库。
linux驱动与应用开发a考试题
Linux驱动与应用开发是一个广泛的主题,涉及到许多方面的知识。
在考试中可能会涉及到以下一些问题:
1. 请解释一下什么是Linux驱动程序,它们的作用是什么?
2. 请列举一些常见的Linux设备驱动类型,并简要描述它们的功能。
3. 请解释一下字符设备驱动和块设备驱动的区别。
4. 什么是Linux内核模块?请描述如何编写和加载一个简单的Linux内核模块。
5. 请解释一下Linux设备树,它在Linux驱动开发中的作用是什么?
6. 请描述一下Linux用户空间和内核空间之间的通信方式。
7. 请解释一下Linux中的中断处理机制,以及在驱动开发中如
何处理中断。
8. 请描述一下Linux中的字符设备驱动的文件操作函数,如read、write、open和release等的作用和使用方法。
9. 请解释一下Linux中的内存管理,以及在驱动开发中如何进行内存分配和释放。
10. 请简要描述一下Linux应用程序的开发流程,包括编译、链接和调试等步骤。
以上是一些可能涉及到的问题,希望这些可以帮助你为考试做好准备。
如果你有其他具体的问题,也欢迎随时提出。
下面的设备文件,供上层应用程/dev/1、字符型驱动设备你是怎么创建设备文件的,就是序打开使用的文件?命令结合设备的主设备号和次设备号,可创建一个设备文件。
答:mknod自动创建设备文件的方还有UDEV/MDEV评:这只是其中一种方式,也叫手动创建设备文件。
包括创建和删除设备文件,可以动态管理设备文件,式,UDEV/MDEV是运行在用户态的程序,一创建了设备文件。
运行在用户态意味着系统要运行之后。
那么在系统启动期间还有devfs共有三种方式可以创建设备文件。
、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?2的任务尽量放在后)答:中断处理例程应该尽量短,把能放在后半段(tasklet,等待队列等半段。
包括硬写一个中断服务程序要注意快进快出,在中断服务程序里面尽量快速采集信息,评:也就是中断上方式。
tasklet件信息,然后推出中断,要做其它事情可以使用工作队列或者半部和下半部。
第二:中断服务程序中不能有阻塞操作。
为什么?大家可以讨论。
第三:中断服务程序注意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的之类的。
FAILOK,、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁3 还是信号量?还是两者都能用?为什么?中断服务例程中的互斥使用使用信号量的进程可以睡眠。
答:使用自旋锁的进程不能睡眠,的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。
、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源4 只有一个使用者行不行?自己定义一个变量怎么我没懂第二句是什么意思,答:原子操作指的是无法被打断的操作。
可能标记资源的使用情况?其他进程又看不见这个变量评:第二句话的意思是:定义一个变量,比如 int flag =0;if(flag == 0){flag = 1;操作临界区;flag = 0;这样可否?}呢?这两个函数在设计上要注insmod 一个驱动模块,会执行模块中的哪个函数?rmmod5、意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?这两个函数在设计时要注意什么?卸载函数。
linux面试题及答案20231. 什么是Linux内核?答案:Linux内核是Linux操作系统的核心部分,负责管理系统资源,如CPU、内存、硬盘等,并提供应用程序运行的环境。
2. 如何查看当前Linux系统的版本?答案:可以使用`uname -r`命令查看当前Linux系统的内核版本。
3. 解释什么是文件描述符。
答案:文件描述符是一个非负整数,用于在程序中唯一标识打开的文件。
每个打开的文件都会分配一个文件描述符。
4. 如何查看当前Linux系统中正在运行的进程?答案:可以使用`ps`命令查看当前系统中正在运行的进程。
5. 解释什么是硬链接和软链接。
答案:硬链接是文件系统中的文件的直接引用,而软链接(也称为符号链接)是指向另一个文件或目录的引用。
6. 如何查看Linux系统中的磁盘空间使用情况?答案:可以使用`df`命令查看磁盘空间使用情况。
7. 解释什么是管道(pipe)。
答案:管道是一种UNIX和Linux系统的特性,允许将一个程序的输出作为另一个程序的输入。
8. 如何在Linux中查找文件?答案:可以使用`find`命令在Linux中查找文件。
9. 解释什么是Linux中的inode。
答案:inode是文件系统中存储文件元数据的数据结构,每个文件和目录都有一个inode。
10. 如何查看Linux系统中的网络配置?答案:可以使用`ifconfig`(在较新的系统中是`ip addr`)命令查看网络配置。
11. 解释什么是Linux中的chroot。
答案:chroot是一种改变当前进程根目录的命令,用于限制进程访问文件系统的特定部分。
12. 如何在Linux中查看当前路径?答案:可以使用`pwd`命令查看当前工作目录的完整路径。
13. 解释什么是Linux中的守护进程。
答案:守护进程是运行在后台的进程,通常用于执行长期任务或等待特定事件。
14. 如何在Linux中查看当前登录用户?答案:可以使用`who`命令查看当前登录的用户。
linux驱动面试题Linux驱动是指在Linux操作系统中,用于控制与硬件之间的交互和通信的软件模块。
在Linux的工作环境中,驱动程序起着至关重要的作用。
如果你准备参加Linux驱动的面试,以下是一些常见的Linux驱动面试题,希望可以对你有所帮助。
一、简述Linux驱动的作用和功能。
Linux驱动是一种软件模块,用来控制硬件设备与操作系统之间的通信和交互。
它负责将输入/输出请求传递给硬件设备,并处理来自硬件设备的中断和事件。
Linux驱动的功能包括设备初始化和配置、数据传输和处理以及错误处理等。
二、请简要介绍Linux驱动程序的加载过程。
当系统启动时,Linux内核首先会加载核心模块和驱动程序模块。
驱动程序模块是以目标硬件设备为基础的,它们包含了与设备通信所需的函数和数据结构。
一般情况下,系统会根据硬件设备信息自动加载对应的驱动程序模块。
加载驱动程序模块需要通过insmod或modprobe命令进行,这些命令可以在启动时自动执行。
三、请简述Linux驱动程序的实现方式。
Linux驱动程序的实现方式包括内核空间驱动和用户空间驱动。
内核空间驱动是指驱动程序运行在内核空间,直接与硬件设备进行交互。
用户空间驱动是指驱动程序运行在用户空间,通过系统调用和内核模块实现与硬件设备的通信。
内核空间驱动的优势是性能更好,但需要对内核进行编译和加载,而用户空间驱动的优势是开发更加容易,但性能会稍差。
四、请介绍Linux驱动程序中常用的数据结构和函数。
在Linux驱动程序中,常用的数据结构有file结构体、inode结构体和cdev结构体等。
file结构体用于表示一个打开的设备文件,可以通过它传递与设备相关的信息。
inode结构体用于表示一个文件的元数据信息,包括文件的权限、大小和创建时间等。
cdev结构体用于表示一个字符设备,包含了设备文件的操作函数和设备号等信息。
常用的函数包括register_chrdev、unregister_chrdev、request_irq和release_irq等。
第1篇一、基础知识1. 请简述Linux内核的基本组成部分及其作用。
2. 解释Linux内核中的进程管理、内存管理、文件系统等核心概念。
3. 描述Linux内核中的中断处理机制,包括中断请求、中断处理和中断响应。
4. 解释Linux内核中的虚拟内存管理原理,包括页表、分页和交换等技术。
5. 简述Linux内核中的同步机制,如信号量、互斥锁、自旋锁等。
6. 请简述Linux内核中的I/O子系统,包括字符设备、块设备、网络设备等。
7. 解释Linux内核中的设备驱动程序的作用,以及它们与内核之间的关系。
8. 描述Linux内核中的文件系统结构,包括超级块、inode、dentry等概念。
9. 请简述Linux内核中的网络协议栈,包括TCP/IP、UDP、ICMP等协议。
10. 解释Linux内核中的模块加载和卸载机制,以及模块之间的依赖关系。
二、设备驱动程序开发1. 请简述字符设备驱动程序的开发流程,包括设备注册、设备初始化、设备打开、设备读写等。
2. 解释块设备驱动程序的开发流程,包括设备注册、设备初始化、设备请求处理等。
3. 请简述网络设备驱动程序的开发流程,包括设备注册、设备初始化、数据包处理等。
4. 解释USB设备驱动程序的开发流程,包括设备注册、设备初始化、USB传输处理等。
5. 请简述I2C设备驱动程序的开发流程,包括设备注册、设备初始化、I2C传输处理等。
6. 解释SPI设备驱动程序的开发流程,包括设备注册、设备初始化、SPI传输处理等。
7. 请简述PCI设备驱动程序的开发流程,包括设备注册、设备初始化、PCI配置空间处理等。
8. 解释ACPI设备驱动程序的开发流程,包括设备注册、设备初始化、ACPI事件处理等。
9. 请简述设备驱动程序中的中断处理,包括中断请求、中断处理和中断响应。
10. 解释设备驱动程序中的同步机制,如信号量、互斥锁、自旋锁等。
三、调试与优化1. 请简述Linux内核中常见的调试工具,如kgdb、gdb、strace等。
linux驱动⾯试题⽬汇总1、linux驱动分类2、信号量与⾃旋锁3、platform总线设备及总线设备如何编写4、kmalloc和vmalloc的区别5、module_init的级别6、添加驱动7、IIC原理,总线框架,设备编写⽅法,i2c_msg8、kernel panic9、USB总线,USB传输种类,urb等10、android boot 流程11、android init解析init.rc12、同步和互斥答案:Linux设备驱动的分类 (1)字符设备。
(2)块设备。
(3)⽹络设备。
字符设备指那些必须以串⾏顺序依次进⾏访问的设备,如触摸屏、磁带驱动器、⿏标等。
块设备可以⽤任意顺序进⾏访问,以块为单位进⾏操作,如硬盘、软驱等。
字符设备不经过系统的快速缓冲,⽽块设备经过系统的快速缓冲。
但是,字符设备和块设备并没有明显的界限,如对于Flash设备,符合块设备的特点,但是我们仍然可以把它作为⼀个字符设备来访问。
统⾥⽀持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的⽀持。
⾃旋锁 ⾃旋锁是专为防⽌多处理器并发⽽引⼊的⼀种锁,它应⽤于中断处理等部分。
对于单处理器来说,防⽌中断处理中的并发可简单采⽤关闭中断的⽅式,不需要⾃旋锁。
⾃旋锁最多只能被⼀个内核任务持有,如果⼀个内核任务试图请求⼀个已被争⽤(已经被持有)的⾃旋锁,那么这个任务就会⼀直进⾏忙循环——旋转——等待锁重新可⽤。
要是锁未被争⽤,请求它的内核任务便能⽴刻得到它并且继续进⾏。
⾃旋锁可以在任何时刻防⽌多于⼀个的内核任务同时进⼊临界区,因此这种锁可有效地避免多处理器上并发运⾏的内核任务竞争共享资源。
事实上,⾃旋锁的初衷就是:在短期间内进⾏轻量级的锁定。
⼀个被争⽤的⾃旋锁使得请求它的线程在等待锁重新可⽤的期间进⾏⾃旋(特别浪费处理器时间),所以⾃旋锁不应该被持有时间过长。
如果需要长时间锁定的话, 最好使⽤信号量。
但是⾃旋锁节省了上下⽂切换的开销。
linux驱动面试题21.什么是GPIO?general purpose input/outputGPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的功能,即可做GPIO也可做其他用途。
也就是说你可以把这些引脚拿来用作任何一般用途的输入输出,例如用一根引脚连到led的一极来控制它的亮灭,也可以用一根(一些)引脚连到一个传感器上以获得该传感器的状态,这给cpu提供了一个方便的控制周边设备的途经。
如果没有足够多的gpio管脚,在控制一些外围设备时就会力有不逮,这时可采取的方案是使用CPLD来帮助管理。
2.触摸屏的硬件原理?/Article/Maintain/Technology/175945932.htm/u2/78837/showart_1186312.html触摸屏的主要三大种类是:电阻技术触摸屏、表面声波技术触摸屏、电容技术触摸屏。
电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面图有一层透明氧化金属(ITO氧化铟,透明的导电电阻)导电层,上面在盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层ITO涂层、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘。
当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器侦测到这一接触并计算出(X,Y )的位置,再根据模拟鼠标的方式运作。
这就是电阻技术触摸屏的最基本的原理。
表面声波技术是利用声波在物体的表面进行传输,当有物体触摸到表面时,阻碍声波的传输,换能器侦测到这个变化,反映给计算机,进而进行鼠标的模拟。
电容技术触摸屏利用人体的电流感应进行工作。
用户触摸屏幕时,由于人体电场,用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流3.在Linux C中,ls这个命令是怎么被执行的?使用fork创建一个进程或exec函数族覆盖原进程。
4.在一个只有128M内存并且没有交换分区的机器上,说说下面两个程序的运行结果1,#define MEMSIZE 1024*1024int count = 0;void *p = NULL;while(1) {p = (void *)malloc(MEMSIZE);if (!p) break;printf("Current allocation %d MB\n", ++count);}2,while(1) {p = (void *)malloc(MEMSIZE);if (!p) break;memset(p, 1, MEMSIZE);printf("Current allocation %d MB\n", ++count);}第一道程序分配内存但没有填充,编译器可能会把内存分配优化掉,程序死循环;第二道,程序分配内存并进行填充,系统会一直分配内存,直到内存不足,退出循环。
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)!= 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;11.12. if(COMPARE(a,b))13. {14. printf("a >= b\n");15. }16. else17. {18. printf("a < b\n");19. }20.}1、LINUX下的Socket套接字和Windows下的WinSock有什么共同点?请从C/C++语言开发的角度描述,至少说出两点共同点。
(10分,说得好的每点加5分,没有上限。
精通SOCK编程者破格录用。
)本题的目的就是考考应试者的SOCK功底,以及应用能力。
答案可谓是五花八门,但是答对的少得可怜。
其实答案很多,也很好回答。
可见面试者功底确实一般,对SOCK编程只是一知半解。
更有甚者,把TCP/IP的原理搬出来讲了一大堆,却无一条符合要求。
参考答案:第1题,答中一个得5分,答出其它正确答案的,也得5分。
a)都基于TCP/IP协议,都提供了面向连接的TCP SOCK和无连接的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时间和内存,你可使用的内存只有2MB左右,CPU时间由系统分派。
(本题满分20分,程序15分,注释5分。
程序不能运行的0分,能够运行但有BUG的10分,能够正确无误的运行的15分。
清楚编写注释的5分。
)本题是考查LINUX和嵌入式编程功底的,写出程序来的不少,但是95%以上的人竟无视我假设的资源,不知道在重启test程序的时候需要加上一个适当的掩饰时间,以便资源紧张的操作系统有时间回收资源。
85%的人不知道写完testd之后,要在init里边加载这个脚本,才能实现启动时自动加载的功能。
有人甚至在脚本开头使用bash作为脚本解析器,我已经清清楚楚说明了用“标准shell”!用sh不就完了吗?是习惯作祟吗?参考答案:#########################################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 /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 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(“a\n”); }B: unsigned short i; unsigned long index = 0; for(i = 0; i <index-1; i++){ printf(“b\n”); }4.一个计划跑LINUX系统的ARM系统把bootloader烧录进去后,上电后串口上没有任何输出,硬件和软件各应该去检查什么?提示:1.跑LINUX的系统一般都需要外扩DRAM,一般的系统也经常有NOR或NAND FLASH2.bootloader一般是由汇编和C编写的裸奔程序[5分]5.列举最少3种你所知道的嵌入式的体系结构,并请说明什么是ARM体系结构。
[7分]6.请简述下面这段代码的功能mov r12, #0x0 ldr r13, =0x30100000 mov r14, #4096 loop: ldmia r12!,{r0-r11} stmia r13!, {r0-r11} cmp r12, r14 blo loop [2分]7.嵌入式中常用的文件系统有哪些?说出它们的主要特点和应用场合?[5分]8.某外设寄存器rGpioBase的地址是0x56000000,寄存器的0~15位有效,请写出给外设寄存器高八位(8~`15位)设置成0xc3的代码[7分]9.根据时序图和说明编写程序:GPIO已经设置好,只需要调用函数gpio_seet_level(int gpio, int level)即课使某个GPIO输出高电平或者低电平。
图中用于产生时序的gpio已经分别定义为SSP_XCS,SSP_SCLK,SSP_DIN,level的定义分别为GPIO_LO和GPIO_HI,需要编写函数的原型为:voidssp_io_write_word(u32 command),该函数用来输出一个字(如上图中的A0到C0一组9位),这9个位是在参数command中的低9位. [5分] 10.简述LINUX系统从上电开始到系统起来的主要流程?提示: 1.可以uboot、内核和文件系统的主要功能去总结2.这个题主要是在笔试之后的面试,需要在3~5分钟之内表述清楚[8分]11.如何编写一个LINUX驱动?提示:主要说字符设备的编写过程[7分] 12.简述LINUX驱动中字符设备和块设备的区别?[5分]13.试总结单片机底层开发与LINUX驱动开发有哪些异同?[4分]14.请从网卡、USB HOST、LCD驱动器、NAND FLASH、WIFI 、音频芯片中选择一个或者2个(可以以具体的芯片为例),对下面的问题做答:1.如果是外部扩展芯片,请说出你用的芯片的型号[每空5分]15.画出上题中你选定相应硬件模块与CPU的主要引脚连线[5分] 16. 编写上题中你选定相应硬件模块相应LINUX驱动的流程?[6分]int *ptr = (int *)0xaa66; *ptr = 0x67a9;我感觉自己写的应该不算错吧(自我感觉,还请达人指正),我写的适合裸机下用,当做寄存器用,而答案就是适合在操作系统下的写法。