linux驱动面试题2
general purpose input/output
GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的功能,即可做GPIO也可做其他用途。
也就是说你可以把这些引脚拿来用作任何一般用途的输入输出,例如用一根引脚连到led的一极来控制它的亮灭,也可以用一根(一些)引脚连到一个传感器上以获得该传感器的状态,这给cpu提供了一个方便的控制周边设备的途经。如果没有足够多的gpio管脚,在控制一些外围设备时就会力有不逮,这时可采取的方案是使用CPLD来帮助管理。
表面声波技术是利用声波在物体的表面进行传输,当有物体触摸到表面时,阻碍声波的传输,换能器侦测到这个变化,反映给计算机,进而进行鼠标的模拟。
电容技术触摸屏利用人体的电流感应进行工作 。用户触摸屏幕时 ,由于人体电场,用户和触摸屏表面形成以一个耦合电容, 对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流
在Linux C中,ls这个命令是怎么被执行的?
1,
#define MEMSIZE 1024*1024
int 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);
}
搞的比较复杂。主要思想就是a-b的值的最高位是否为0;但是又得考虑整数溢出的问题,所以很复杂。不知道哪位大侠有更好的办法,指点指点。
- #include<stdio.h>
- #define ZHENG(i)((i>> 31)== 0)
- #define FU(i)((i>> 31)!= 0)
- #define COMPARE(a,b)((ZHENG(a)&& FU(b))||(((ZHENG(a)&& ZHENG(b))||(FU(a)&& FU(b)))&&((((a)-(b))>> 31)== 0)))
- void main()
- {
- int a = 0x80000001;
- int b = 0x6FFFFFFF;
- if(COMPARE(a,b))
- {
- printf("a >= b\n");
- }
- else
- {
- printf("a < b\n");
- }
- }
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 need
if [ -r /sbin/ldconfig ]; then
ldconfig
fi
#add the libs PATH that may need
export LD_LIBRARY_PATH="/lib"
#count is the counter of test started times
count=0
#main loop
while [ 1 ] ;do
#add execute property for /mnt/test/test
chmod +x /mnt/test/test
#start test
/mnt/test/test
#the running times counter
let count=count+1
echo "test running times is $count"
#Is test running too many times?
if [ "$count" -gt 100 ]; then
echo "Will reboot because of test running too many times"
reboot
fi
#wait for test stoping...
sleep 3
done
#########################################
就业模拟测试题-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 FLASH
2.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,需要编写函数的原型为:void ssp_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;
我感觉自己写的应该不算错吧(自我感觉,还请达人指正),我写的适合裸机下用,当做寄存器用,而答案就是适合在操作系统下的写法。
1. linux内核里面,内存申请有哪几个函数,各自的区别?
2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的? 3.
int *a;
char *b;
a 和 b本身是什么类型?
a、b里面本身存放的只是一个地址,难道是这两个地址有不同么?
4. 中断的上半部分和下半部分的问题:
讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现?
5. 内核函数mmap的实现原理,机制?
6. 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?
7. spinlock自旋锁是如何实现的?
8. 任务调度的机制?
【二、本人碰到】
1. 嵌入式linux和wince操作系统的特点和特性?
2. 嵌入式linux中tty设备驱动的体系结构?
3. 嵌入式设备,为加快启动速度,可以做哪些方面的优化?
4. USB设备的枚举过程?
5. PSRAM、SDRAM、DDR、DDR2的时序特性?
6. I2C触摸屏芯片与CPU的数据传输流程?画出相关图例?(这题目记得不是太清楚了,大概是考查I2C设备驱动的数据传输过程)
1、linux驱动分类
2、信号量与自旋锁
3、platform总线设备及总线设备如何编写
4、kmalloc和vmalloc的区别
5、module_init的级别
6、添加驱动
7、IIC原理,总线框架,设备编写方法,i2c_msg
8、kernel panic
9、USB总线,USB传输种类,urb等
10、android boot 流程
11、android init解析init.rc
linux驱动面试题2的更多相关文章
- linux驱动面试题整理
1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也 ...
- Linux驱动面试题
1. Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备. 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种 ...
- Linux驱动面试题总结
1. Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备. 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种 ...
- Linux 驱动面试题总结【转】
本文转载自:http://zkread.com/article/872291.html 1. Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备. 字符 ...
- 【转】嵌入式Linux驱动面试题三道
题一: Linux设备中字符设备与块设备有什么主要的区别? 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性.字符设备驱动程序通常至少实现open,cl ...
- Linux代码的重用与强行卸载Linux驱动
(一)Linux代码的重用 重用=静态重用(将要重用的代码放到其他的文件的头文件中声明)+动态重用(使用另外一个Linux驱动中的资源,例如函数.变量.宏等) 1.编译是由多个文件组成的Linux驱动 ...
- Linux驱动学习之常用的模块操作命令
1.常用的模块操作命令 (1)lsmod(list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表 (2)insmod(install module,安装模块),功能是向当前 ...
- Linux驱动学习之驱动开发准备工作
一.开启驱动开发之路 1.驱动开发的准备工作 (1)正常运行linux系统的开发板.要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的.原因在于在安装模块的时候会进行安全性校验 ...
- Linux驱动学习之什么是驱动?
一.什么是驱动? 1: 驱动一词的字面意思 2: 物理上的驱动 3: 硬件中的驱动 4: linux内核驱动.软件层面上的驱动广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序. ...
随机推荐
- html5标签收集
<meta name="viewport" content="width=device-width,initial-scale=1 user-scalable=0& ...
- 关于SVN版本控制器的问题与解决方法
1.SVN Working copy is too old 有个.svn的文件夹,去掉在commit试试! 2.中文字符变乱码 尽量不要用中文命名文件,因为很多软件对中文的支持还是有不好的地方.
- RMAN-configure命令
在Oracle 10g中的配置情况 使用RMAN>show all; 可以显示出RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # ...
- (转载)Linux网络配置和setup工具包安装
查看网卡是否正常安装 命令:lspci |grep Ether 1.修改网卡配置 命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth ...
- SqlBulkCopy的一个例子
public bool InsertAll(IList<NewStockLuoPan> list) { DataTable dt = new DataTable(); dt.Columns ...
- (转)HTTP 无法注册 URL http://+:9999/CalculatorService/。进程不具有此命名空间的访问权限
写WCF时在 1 host.Open(); 报错:HTTP 无法注册 URL http://+:9999/CalculatorService/.进程不具有此命名空间的访问权限(有关详细信息,请参见 h ...
- PowerDesigner与UML建模应用
一. PD简介 PowerDesigner 是一个集所有现代建模技术于一身的完整工具,它集成了强有力的业务建模技术.传统的数据库分析和实现,以及UML对象建模.通过了元数据的管理.冲突分析和真正的 ...
- java Math.random()随机数的产生
Math.random()是java内置产生随机数的函数,Math.random()能够产生[0,1)的浮点数,当我们要产生特定范围的数时,可以采用如下办法: 1.Math.random()*(最大数 ...
- 各邮箱服务器地址及端口<转>
gmail(google.com) POP3服务器地址:pop.gmail.com(SSL启用端口:995) SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587) 21cn.c ...
- Java系列--第二篇 基于Maven的Android开发HelloAndroidWorld
曾经写过一篇Android环境配置的随笔,个人感觉特繁琐,既然有Maven,何不尝试用用Maven呢,经网上搜索这篇文章但不限于这些,而做了一个基于Maven的Android版的Hello Andro ...