当前位置:文档之家› Linux驱动试题(参考答案)

Linux驱动试题(参考答案)

Linux驱动试题(参考答案)
Linux驱动试题(参考答案)

Linux驱动试题

笔试题:

1参考答案:字符设备是指存取时没有缓存的设备,大多数字符设备只能顺序读写。比如鼠标、键盘、声卡。

块设备的读写则都有缓存来支持,只能以块为单位进行读写,并且块设备必须能够随机存取(random access),即不管块处于设备的什么地方都可以对它进行读写,字符设备则没有这个要求。比如硬盘、U盘、SD卡。

2、

参考答案:查看驱动中的打印信息用dmesg命令。

查看内核中字符设备和块设备信息可以使用命令cat /proc/devices。

查看正在使用的中断号可以使用命令cat /proc/interrupts。

3、

参考答案:Linux内核是一种单一大内核,如果没有模块机制,在调试阶段,我们需要修改内核中的某个驱动,必须把内核整个编译一遍,还要重新启动机器,这样操作会非常耗时。有了模块,我们只需要对我们关心的驱动以模块方式单独编译,无须编译整个内核,也不需要重启机器。

4、

参考答案:copy_to_user实现从内核空间向用户空间拷贝数据的功能。

copy_from_user实现从用户空间向内核空间拷贝数据的功能。分别用于实现驱动中的read 和write函数。如果交换数据都发生在内核空间中,可以直接使用内核定义的memcpy函数。

5、

参考答案:主设备号用于区别不同的驱动程序,次设备号用于区别使用同一个驱动程序的同一类设备中的不同设备。chartest使用和ttyS0一样的驱动程序。

6、

参考答案:register_chrdev(MAJOR_NUMBER, DRIVER_NAME, &xxx_fops)

该函数有三个参数,分别是主设备号,驱动名字和file_operations结构的指针

7、

参考答案:中断是一段程序,当外部设备引起中断时由CPU执行。DMA是直接内存访问,用于外设与主存储器之间快速的交换数据,利用DMA,在交换数据时可以不通过CPU,提高了CPU的利用率。

注册中断使用request_irq(IRQ_NUMBER, (*handler), IRQ_FLAGS, DRIVER_NAME, dev_id)。该函数共有5个参数,分别是要注册的中断号,中断处理程序的指针,中断标志位,中断的名字和dev_id用于区别共享同一个中断的不同设备。

注销中断使用free_irq(unsigned int, void *)第一个参数是中断号,第二个参数一般是NULL指针。

8、

参考答案:在一般情况下,由于数据量比较小,中断会比轮询更有效率。但是如果数据

量比较大的时候,如果采用中断,由于CPU花在进程切换和保存现场上的时间开销变得比较大,所以这个时候通常采用轮询更有效率。

9、

参考答案:802.3 MAC Engine:实现802.3协议的核心,实现对以太网桢的发送和接收。

Encoder/Decoder:Encoder/Decoder部分实现对曼彻斯特的编码/译码工作。

10Base-T RX/RX filter & Receiver/ Transmitter:实现对物理信号的发送和接收。10、

参考答案:发送数据frame:

a.关中断

b.发送skbuff中的数据到硬件上

c.开中断

d.释放skbuff

接收数据frame:

a.读硬件获得数据长度

b.根据长度分配skbuff

c.从硬件上读数据到skbuff内

d.通过netif_rx将skbuff提交到上层,也就是IP层。

11、

参考答案:发送数据frame的过程可能在线程的上下文中,关中断是为了保证数据发送的一致性,而接收数据frame的过程主要在中断处理中,这个过程本身就是原子的,所以不需要关中断。

12、

参考答案:sk_buff是在Linux网络协议的各个层次上都用到的一个数据结构,目的是防止数据的重复拷贝。sk_buff的分配由最先使用它的模块分配,而由最后使用它的模块进行释放,具体到网络设备来说,就是,发送的时候在网络协议的最高层,也就是TCP层负责分配,而在设备驱动中当向硬件上发送完sk_buff中数据后释放sk_buff;而对于接受就是在设备驱动的接收到以太网侦的时候分配sk_buff以容纳数据,而在最高层,也就是TCP 层负责释放。

linux认证-笔试-基础——简答题、编程和多选题.doc

limix笔试题一一简答题、编程题和多选题 %1.简答题: 1.简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过 程。 参考答案: Linux通过i节点表将文件的逻辑结构和物理结构进行转换。 i节点是一个64字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。在i节点表中最重要的内容是磁盘地址表。在磁盘地址表中有13个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应的块。Linux文件系统通过把i节点和文件名进行连接,当需要读取该文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的i节点号,通过该i节点的磁盘地址表把分散存放的文件物理块连接成文件的逻辑结构。 2.简述进程的启动、终止的方式以及如何进行进程的查看。 参考答案: 在Linux中启动一个进程有手工启动和调度启动两种方式: (1)手工启动 用户在输入端发出命令,直接启动一个进程的启动方式。可以分为: %1前台启动:直接在SHELL中输入命令进行启动。 %1后台启动:启动一个目前并不紧急的进程,如打印进程。 (2)调度启动 系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的时间和场合,到时候系统会自动完成该任务。 经常使用的进程调度命令为:at、batch> crontab o 3.简述DNS进行域名解析的过程。 参考答案: 首先,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后: (1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息; (2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息; (3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。 (4)若没有找到,则返回错误信息。 4.系统管理员的职责包括那些?管理的对象是什么? 参考答案:

linux驱动程序的编写

linux驱动程序的编写 一、实验目的 1.掌握linux驱动程序的编写方法 2.掌握驱动程序动态模块的调试方法 3.掌握驱动程序填加到内核的方法 二、实验内容 1. 学习linux驱动程序的编写流程 2. 学习驱动程序动态模块的调试方法 3. 学习驱动程序填加到内核的流程 三、实验设备 PentiumII以上的PC机,LINUX操作系统,EL-ARM860实验箱 四、linux的驱动程序的编写 嵌入式应用对成本和实时性比较敏感,而对linux的应用主要体现在对硬件的驱动程序的编写和上层应用程序的开发上。 嵌入式linux驱动程序的基本结构和标准Linux的结构基本一致,也支持模块化模式,所以,大部分驱动程序编成模块化形式,而且,要求可以在不同的体系结构上安装。linux是可以支持模块化模式的,但由于嵌入式应用是针对具体的应用,所以,一般不采用该模式,而是把驱动程序直接编译进内核之中。但是这种模式是调试驱动模块的极佳方法。 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。同时,设备驱动程序是内核的一部分,它完成以下的功能:对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。在linux操作系统下有字符设备和块设备,网络设备三类主要的设备文件类型。 字符设备和块设备的主要区别是:在对字符设备发出读写请求时,实际的硬件I/O一般就紧接着发生了;块设备利用一块系统内存作为缓冲区,当用户进程对设备请求满足用户要求时,就返回请求的数据。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。 1 字符设备驱动结构 Linux字符设备驱动的关键数据结构是cdev和file_operations结构体。

Linux驱动程序工作原理简介

Linux驱动程序工作原理简介 一、linux驱动程序的数据结构 (1) 二、设备节点如何产生? (2) 三、应用程序是如何访问设备驱动程序的? (2) 四、为什么要有设备文件系统? (3) 五、设备文件系统如何实现? (4) 六、如何使用设备文件系统? (4) 七、具体设备驱动程序分析 (5) 1、驱动程序初始化时,要注册设备节点,创建子设备文件 (5) 2、驱动程序卸载时要注销设备节点,删除设备文件 (7) 参考书目 (8) 一、linux驱动程序的数据结构 设备驱动程序实质上是提供一组供应用程序操作设备的接口函数。 各种设备由于功能不同,驱动程序提供的函数接口也不相同,但linux为了能够统一管理,规定了linux下设备驱动程序必须使用统一的接口函数file_operations 。 所以,一种设备的驱动程序主要内容就是提供这样的一组file_operations 接口函数。 那么,linux是如何管理种类繁多的设备驱动程序呢? linux下设备大体分为块设备和字符设备两类。 内核中用2个全局数组存放这2类驱动程序。 #define MAX_CHRDEV 255 #define MAX_BLKDEV 255 struct device_struct { const char * name; struct file_operations * fops; }; static struct device_struct chrdevs[MAX_CHRDEV]; static struct { const char *name; struct block_device_operations *bdops; } blkdevs[MAX_BLKDEV]; //此处说明一下,struct block_device_operations是块设备驱动程序内部的接口函数,上层文件系统还是通过struct file_operations访问的。

linux驱动工程师面试题整理

1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件。 评:这只是其中一种方式,也叫手动创建设备文件。还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后。那么在系统启动期间还有devfs创建了设备文件。一共有三种方式可以创建设备文件。 2、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?答:中断处理例程应该尽量短,把能放在后半段(tasklet,等待队列等)的任务尽量放在后半段。 评:写一个中断服务程序要注意快进快出,在中断服务程序里面尽量快速采集信息,包括硬件信息,然后推出中断,要做其它事情可以使用工作队列或者tasklet方式。也就是中断上半部和下半部。 第二:中断服务程序中不能有阻塞操作。为什么?大家可以讨论。 第三:中断服务程序注意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的OK,FAIL之类的。 3、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还是信号量?还是两者都能用?为什么? 答:使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。中断服务例程中的互斥使用的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。 4、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行? 答:原子操作指的是无法被打断的操作。我没懂第二句是什么意思,自己定义一个变量怎么可能标记资源的使用情况?其他进程又看不见这个变量 评:第二句话的意思是: 定义一个变量,比如 int flag =0; if(flag == 0) { flag = 1; 操作临界区; flag = 0; }这样可否?

Linux设备驱动程序举例

Linux设备驱动程序设计实例2007-03-03 23:09 Linux系统中,设备驱动程序是操作系统内核的重要组成部分,在与硬件设备之间 建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设 备进行打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设 备驱动程序,可以深入理解Linux系统和进行系统开发。本文通过一个简单的例子 来说明设备驱动程序的设计。 1、程序清单 //MyDev.c 2000年2月7日编写 #ifndef __KERNEL__ #define __KERNEL__//按内核模块编译 #endif #ifndef MODULE #define MODULE//设备驱动程序模块编译 #endif #define DEVICE_NAME "MyDev" #define OPENSPK 1 #define CLOSESPK 2 //必要的头文件 #include //同kernel.h,最基本的内核模块头文件 #include //同module.h,最基本的内核模块头文件 #include //这里包含了进行正确性检查的宏 #include //文件系统所必需的头文件 #include //这里包含了内核空间与用户空间进行数据交换时的函数宏 #include //I/O访问 int my_major=0; //主设备号 static int Device_Open=0; static char Message[]="This is from device driver"; char *Message_Ptr; int my_open(struct inode *inode, struct file *file) {//每当应用程序用open打开设备时,此函数被调用 printk ("\ndevice_open(%p,%p)\n", inode, file); if (Device_Open) return -EBUSY;//同时只能由一个应用程序打开 Device_Open++; MOD_INC_USE_COUNT;//设备打开期间禁止卸载 return 0; } static void my_release(struct inode *inode, struct file *file)

linux试题3(判断题,有答案)

linux试题3 判断题 1.使用shutdown -k命令并不真正使系统关机,而只是给用户提出警告。 T 2.手工运行fsck的最好时机是在系统备份文件之后,这样在发现错误后,还可以利用备份文件进行修复。 T 3.红旗Linux系统引导后,内核运行init程序,这个程序在处理任何其他规定的运行等级之后,在运行/etc/rc.d/rc.sysinit脚本。 F 4.进程可以处于僵死状态,而在当前进程表中仍有记录。 T 5.dump必须借助于其他工具才能支持备份级别。 T 6.为了应用smbclient读取远程机power上的pub共享目录,共享目录的正确写法是//power:share。 F 7.syslogd守护进程,不仅可以将日志记录在本地机message文件中,还可以将日志记录通过网络发送出去。 T 8.Samba服务器可以设置成在网络下对外宣称自己是一个Windows NT服务器或Win95客户机。 T 9.在fatab文件中,使用;标记注释行。 F 10.为匹配所有的空行,可以使用如下正则表达式 ^$。 T 11.如果系统使用了sendmail,那么sendmail.log文件以二进制形式保存了sendmail的统计信息。 F 12.out是现代Linux的可执行文件、目标文件和系统函数库的标准格式。 T

13.Linux系统以文本文件的形式保存大部分系统日志,如lastlog。 F 14.安装过程中,如果是使用fdisk分区工具,我们必须十分小心,因为对分区表所作的修改在每一步完成后,都会立刻反映到分区表上,除非在第二次打开fdisk后,选择删除新分区,再重新分区。 F 15.目录树结构与文件系统是两个不同的概念,文件系统是磁盘或分区上文件的物理存放方法,而目录树结构是操作系统中管理文件的逻辑方式。 T 16. dump不同于其它备份工具的地方在于:它直接读取文件系统,而不是通过文件系统读取文件来进行备份,这样可在不影响文件时间戳的情况下,备份文件。 T 17. 通常情况下,linux向进程传送的信号,将告诉系统内核按特殊的处理方法去处理额外的事件。 F 18. 在samba配置文件中设置security = domain,这时samba服务器将使用远程SMB服务器(如Windows NT)进行身份验证,如果失败则自动切换到user安全级。 F 19. 当不存在at.allow文件的时候,那么凡不在at.deny文件中列出的用户都可以使用at。 T 20. Linux支持可动态装载和卸载的模块。利用模块,可方便地在内核中添加新的组件或卸载不再需要的内核组件。 T 21. 只有root具有降低任务nice值的能力。 T

LINUX内核经典面试题30道及解答

LINUX内核经典面试题 30道 1) Linux中主要有哪几种内核锁? 2) Linux中的用户模式和内核模式是什么含意? 3) 怎样申请大块内核内存? 4) 用户进程间通信主要哪几种方式? 5) 通过伙伴系统申请内核内存的函数有哪些? 6) 通过slab分配器申请内核内存的函数有? 7) Linux的内核空间和用户空间是如何划分的(以32位系统为例)? 8) vmalloc()申请的内存有什么特点? 9) 用户程序使用malloc()申请到的内存空间在什么范围? 10) 在支持并使能MMU的系统中,Linux内核和用户程序分别运行在物理地址模式还是虚拟地址模式? 11) ARM处理器是通过几级也表进行存储空间映射的? 12) Linux是通过什么组件来实现支持多种文件系通的? 13) Linux虚拟文件系统的关键数据结构有哪些?(至少写出四个) 14) 对文件或设备的操作函数保存在那个数据结构中? 15) Linux中的文件包括哪些? 16) 创建进程的系统调用有那些? 17) 调用schedule()进行进程切换的方式有几种? 18) Linux调度程序是根据进程的动态优先级还是静态优先级来调度进程的? 19) 进程调度的核心数据结构是哪个?

20) 如何加载、卸载一个模块? 21) 模块和应用程序分别运行在什么空间? 22) Linux中的浮点运算由应用程序实现还是内核实现? 23) 模块程序能否使用可链接的库函数? 24) TLB中缓存的是什么内容? 25) Linux中有哪几种设备? 26) 字符设备驱动程序的关键数据结构是哪个? 27) 设备驱动程序包括哪些功能函数? 28) 如何唯一标识一个设备? 29) Linux通过什么方式实现系统调用? 30) Linux软中断和工作队列的作用是什么? 参考解答

LINUX字符设备驱动编写基本流程

---简介 Linux下的MISC简单字符设备驱动虽然使用简单,但却不灵活。 只能建立主设备号为10的设备文件。字符设备比较容易理解,同时也能够满足大多数简 单的硬件设备,字符设备通过文件系统中的名字来读取。这些名字就是文件系统中的特 殊文件或者称为设备文件、文件系统的简单结点,一般位于/dev/目录下使用ls进行查 看会显示以C开头证明这是字符设备文件crw--w---- 1 root tty 4, 0 4月 14 11:05 tty0。 第一个数字是主设备号,第二个数字是次设备号。 ---分配和释放设备编号 1)在建立字符设备驱动时首先要获取设备号,为此目的的必要的函数是 register_chrdev_region,在linux/fs.h中声明:int register_chrdev_region(dev_t first, unsigned int count, char *name);first是你想 要分配的起始设备编号,first的次编号通常是0,count是你请求的连续设备编号的 总数。count如果太大会溢出到下一个主设备号中。name是设备的名字,他会出现在 /proc/devices 和sysfs中。操作成功返回0,如果失败会返回一个负的错误码。 2)如果明确知道设备号可用那么上一个方法可行,否则我们可以使用内核动态分配的设 备号int alloc_chrdev_region(dev_t *dev, unsigned int firstminor,unsigned int count, char *name);dev是个只输出的参数,firstminor请求的第一个要用的次编号, count和name的作用如上1)对于新驱动,最好的方法是进行动态分配 3)释放设备号,void unregister_chrdev_region(dev_t first unsigned int count); ---文件操作file_operations结构体,内部连接了多个设备具体操作函数。该变量内部 的函数指针指向驱动程序中的具体操作,没有对应动作的指针设置为NULL。 1)fops的第一个成员是struct module *owner 通常都是设置成THIS_MODULE。 linux/module.h中定义的宏。用来在他的操作还在被使用时阻止模块被卸载。 2)loff_t (*llseek) (struct file *, loff_t, int);该方法用以改变文件中的当前读/ 写位置 返回新位置。 3)ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);该函数用 以从设备文件 中读取数据,读取成功返回读取的字节数。

Linux期末考试试题(十二)

Linux期末考试试题 一、填空题(20%) 1.默认情况下,超级用户和普通用户的登录提示符分别是:“#”和“$”。 2.Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统。 3.Linux系统下经常使用的两种桌面环境是:GNOME和KDE。 4.链接分为:硬链接和符号链接。 5.Linux系统中有三种基本的文件类型:普通文件、目录文件和设备文件。 6.某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为:644 ,该文件属性是目录。 7.在超级用户下显示Linux系统中正在运行的全部进程,应使用的命令及参数是ps -aux 。 8.将前一个命令的标准输出作为后一个命令的标准输入,称之为管道。 9./sbin 目录用来存放系统管理员使用的管理程序。 10.观察当前系统的运行级别可用命令:who -r实现。 11.grep -E '[Hh]enr(y|ietta)' file的功能是:(在文件File中查找Henry、henry、Henrietta或henrietta) 12.设C语言程序my.c A. 生成目标文件my.o的命令是(gcc -c my.c)。 B. 生成汇编语言文件my.s的命令是(gcc -S my.c)。 C. 生成可执行程序myp的命令是(gcc -o myp my.c)。

13.设有两个C语言程序模块c1.c和c2.c(不含main函数) A. 由c1.c和c2.c生成静态库libmyar.a的命令是(gcc -o libmyar.a -c c1.c c2.c)。 B. 由c1.c和c2.c生成共享库libmyar.so的命令是(gcc -shared -o libmyvar.so -c f1.c f2.c)。 14.在某Makefile内有以下语句: SRC = f1.c f2.c f3.c TGT = $(SRC:.c=.d) SRC += f4.c 则TGT=________ f1.o f2.o f3.o ____________ SRC=_______ f1.c f2.c f3.c f4.c _________ 二、选择题(40%) 1.关于Linux内核版本的说法,以下错误的是()。 A.表示为主版本号.次版本号.修正号 B.1.2.3表示稳定的发行版 C.1.3.3表示稳定的发行版 D.2.2.5表示对内核2.2的第5次修正

Linux笔试题及答案

一。填空题: 1. 在Linux系统中,以文件方式访问设备。 2. Linux内核引导时,从文件/etc/fstab中读取要加载的文件系统。 3. Linux文件系统中每个文件用i节点来标识。 4. 全部磁盘块由四个部分组成,分别为引导块、专用块、i节点表块和数据存储块。 5. 链接分为:硬链接和符号链接。 6. 超级块包含了i节点表和空闲块表等重要的文件系统信息。 7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八进制数为:644,该文件属性是目录。 8. 前台起动的进程使用Ctrl+c终止。 9. 静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置。 10. 网络管理的重要任务是:控制和监控。 11. 安装Linux系统对硬盘分区时,必须有两种分区类型:文件系统分区和交换分区。 13. 编写的Shell程序运行前必须赋予该脚本文件执行权限。 14. 系统管理的任务之一是能够在分布式环境中实现对程序和数据的安全保护、备份、恢复和更新。 15. 系统交换分区是作为系统虚拟存储器的一块区域。 16. 内核分为进程管理系统、内存管理系统、I/O管理系统和文件管理系统等四个子系统。 17. 内核配置是系统管理员在改变系统配置硬件时要进行的重要操作。 18. 在安装Linux系统中,使用netconfig程序对网络进行配置,该安装程序会一步步提示用户输入主机名、域名、域名服务器、IP地址、网关地址和子网掩码等必要信息。 19. 唯一标识每一个用户的是用户ID和用户名。 20 . RIP 协议是最为普遍的一种内部协议,一般称为动态路由信息协议。 21. 在Linux系统中所有内容都被表示为文件,组织文件的各种方法称为文件系统。 22. DHCP可以实现动态IP 地址分配。 23. 系统网络管理员的管理对象是服务器、用户和服务器的进程以及系统的各种资源。 24. 网络管理通常由监测、传输和管理三部分组成,其中管理部分是整个网络管理的中心。 25. 当想删除本系统用不上的设备驱动程序时必须编译内核,当内核不支持系统上的设备驱动程序时,必须对内核升级。 26 Ping命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用于测试网络的连通性。 27. vi编辑器具有两种工作模式:命令模式和输入模式。 28. 可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占 1 位,表示文件类型,第二段占3位,表示文件所有者对该文件的权限。 29. 进程与程序的区别在于其动态性,动态的产生和终止,从产生到终止进程可以具有的基本状态为:运行态、就绪态和等待态(阻塞态)。 30. DNS实际上是分布在internet上的主机信息的数据库,其作用是实现IP地址和主机名之间的转换。 31. Apache是实现WWW服务器功能的应用程序,即通常所说的―浏览web服务器‖,在服务器端为用户提供浏览web服务的就是apache应用程序。 32. 在Linux系统上做备份可以有两种类型:系统备份和用户备份。其中前者是指对操作系统的备份,后者是指对应用程序和用户文件的备份。 33. CD-ROM标准的文件系统类型是iso9660。 34. 当lilo.conf配置完毕后,使之生效,应运行的命令及参数是lilo。 35. 在使用ls命令时,用八进制形式显示非打印字符应使用参数-b。 36. Linux使用支持Windows 9.x/2000长文件名的文件系统的类型是vfat。 37. 设定限制用户使用磁盘空间的命令是quota。 38 在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是/etc。 39. 硬连接只能建立对文件链接。符号链接可以跨不同文件系统创建。 40. 套接字文件的属性位是s。 41. 结束后台进程的命令是kill。 42. 进程的运行有两种方式,即独立运行和使用父进程运行。 43. Links分为硬链接和符号链接。 44. 在超级用户下显示Linux系统中正在运行的全部进程,应使用的命令及参数是ps -aux。

Linux 基础试题

Linux 基础题库 一.单项选择题 1.下列厂商和操作系统相对应正确的是( B ) A.Digital - MVS B.Sun – Solaris C.IBM – VMS D.HP - VMS 2.Linux系统的1.0版内核的发布是在( C ) A.1992年 B.1993年 C.1994年 D.1995年 3.完全安装Red Hat Linux 8.0需要的磁盘空间是( D ) A.1.8GB B.2.3GB C.400MB D.4.5GB 4.Linux系统是一个( D )的操作系统 A.单用户、单任务 B.单用户、多任务 C.多用户、单任务 D.多用户、多任务5.在安装开始前,用光盘启动系统,想要进入字符界面安装,需要输入的命令是( C )A.linux doc B.linux C.linux text D.linux note 6.Red Hat Linux系统中用户默认的Shell是( A ) A.bash B.ksh C.csh D.sh 7.在Linux系统中,管道的符号是( C ) A.> B.< C.| D.: 8.Linux的文件名的长度限制在( D )字符以内 A.11 B.128 C.256 D.255 9.如果忘记了ls命令的用法,可以采用( C )命令获得帮助 A.?ls B.help ls C.man ls D.get ls 10.在vi编辑器的命令模式中,在光标所在位置的右侧插入字符的命令是( A) A.a B.A C.i D.I 11.在vi编辑器的命令模式中,删除一行的命令是( B ) A.yy B.dd C.pp D.xx 12.以下输出重定向命令中,覆盖存在文件的是( B ) A.>> B.> C.< D.<< 13.在GRUB的配置文件grub.conf中,“timeout=-1”的含义是( C ) A.不等待用户选择,直接启动默认的系统 C.一直等待用户选择要启动的系统 B.在10秒钟内,等待用户选择要启动的系统 D.无效 14.系统中文件系统的挂载配置文件是( A ) A./etc/fstab B./usr/fstab C./etc/mount D./usr/mount 15.在挂载文件系统的时候,如果想要以只读的方式挂载,需要的参数是( A ) A.-o ro B.-o rw C.-a ro D.-a rw 16.要给文件file1加上其他人可执行属性的命令是( C ) A.chmod a+x B.chown a+x C.chmod o+x D.chown o+x 17.添加用户“user”的命令是( B ) https://www.doczj.com/doc/1018935156.html,er user https://www.doczj.com/doc/1018935156.html,eradd user C.add user D.adduser 18.删除用户“user”及其主目录下所有文件的命令是( B ) https://www.doczj.com/doc/1018935156.html,erdel –p user https://www.doczj.com/doc/1018935156.html,erdel –r user https://www.doczj.com/doc/1018935156.html,erdel –a user https://www.doczj.com/doc/1018935156.html,erdel –z user 19.查看系统当中所有进程的命令是( D ) A.ps all B.ps aix C.ps auf D.ps aux 20.显示系统启动时间的命令是( B )

linux面试题及答案

1.如何编写一个驱动? 2.设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备。 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少实现和系统调用。字符终端、串口、鼠标、键盘、摄像头、声卡和显卡等就是典型的字符设备。 块设备:和字符设备类似,块设备也是通过目录下的文件系统节点来访问。块设备上能够容纳文件系统,如:u盘,卡,磁盘等。 字符设备和块设备的区别仅仅在于内核内部管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。 3.查看驱动模块中打印信息应该使用什么命令?如何查看内核中已有的字符设备的信息?如何查看正在使用的有哪些中断号? 1) 查看驱动模块中打印信息的命令: 2) 查看字符设备信息可以用和,可以查看模块的依赖关系,在加载模块时会加载其他依赖的模块。 3)显示当前使用的中断号 4.请简述主设备号和次设备号的用途。如果执行 c 4 64,创

建 使用的是那一类设备驱动程序。 1)主设备号:主设备号标识设备对应的驱动程序。虽然现代的内核允许多个驱动程序共享主设备号,但我们看待的大多数设备仍然按照“一个主设备对应一个驱动程序”的原则组织。 次设备号:次设备号由内核使用,用于正确确定设备文件所指的设备。依赖于驱动程序的编写方式,我们可以通过次设备号获得一个指向内核设备的直接指针,也可将此设备号当作设备本地数组的索引。 2)由驱动程序4管理,该文件所指的设备是64号设备。(感觉类似于串口终端或者字符设备终端)。 5.设备驱动程序中如何注册一个字符设备?分别解释一下它的几个参数的含义。 注册一个字符设备驱动有两种方法: 1) ( *, *) 该注册函数可以将结构嵌入到自己的设备特定的结构中。是一个指向结构体的指针,而是指向一个类似于结构(可以是结构,但不限于该结构)的指针. 2) ( , * , ) *); 该注册函数是早期的注册函数,是设备的主设备号,是驱动程序的名称,而是默认的结构(这是只限于结构)。

linux 驱动程序开发

1 什么是驱动 a)裸板驱动 b)有系统驱动linux 将驱动封装了一套框架(每个驱动) c)大量和硬件无关的代码已写好只需要编程实现和硬件相关的代码 d)难点:框架的理解代码的理解 e)需要三方面的知识: i.硬件相关的知识 1.电路原理图 2.芯片的数据手册 3.总线协议rs232 i2c等 ii.内核的知识 1.内核驱动属于内核的一部分,它运行在内核态需要对内核知识有了解 2.内存管理 3.解决竞争状态(如上锁) 4.。。。 iii.驱动框架的知识 1.内核中已经实现了大量硬件驱动完成了驱动的框架编程只需要根据硬 件进行添加 2 搭建linux驱动开发工具 a)安装交叉编译环境 i.arm-linux-gcc uboot PATH b)移植uboot c)移植内核 d)制作根文件系统然后通过nfs方式让开发板可以加载 3 内核驱动开发的基本知识 a)如何学驱动编程? i.最好的老师就是内核源码(没有man 功能) 1.要是用某个函数就去查看某个函数的定义注释 2.查看内核中其他模块儿时如何使用该函数的 3.专业书籍: a)内核开发:linux内核的设计与实现机械工程出版社 b)驱动开发:圣经级别的-LDD3:LINUX DEVICE c)操作性别叫强的:精通linux设备驱动程序开发

关于linux内核: 1)linux内核中所使用的函数都是自身实现的它肯定不会调用c库中的函数 2)linux中代码绝大多数代码时gun c语言完成的不是标准c语言可以理解为标c的扩展版和少部分汇编 需要注意的问题: 1)内核态不能做浮点数运算 2)用户空间的每个进程都有独立的0-3G的虚拟空间 多个进程共享同一个内核 内核使用的地址空间为3G-4G 3)每个线程有独立的栈空间 4 写一个最简单的内核模块儿(因为驱动时内核的一个模块套路都一样) a)几个宏 i.__FUNCTION__:展开为所在函数的名称 ii.__LINE__:展开为printk所在的行号 iii.__DATE__:展开为编译程序的日期 b)通用头文件 i.#include ii.#include c)没有main函数 然后写一个makefile 其中:obj -m +=helloworld.o -m表示生成模块儿 make -C 内核路径编译对象路径modules(固定表示模块儿) 例子:make -C /home/changjian/dirver/kernel M=$(PWD) modules 报错:如taints kernel(污染内核)因为写的驱动没有声明license 因为linux为开源所以写的驱动也必须声明为开源可以在程序里加入:MODULE_LICENSE(“GPL”);声明为开源 模块儿驱动开发 1、模块儿参数 a)内核中安装模块时也可以传递参数 i.insmod xx.ko var=123 b)模块参数的使用方法 i.首先在模块中定义全局变量 ii.然后使用module_param 或者module_param_array来修饰该变量 这样一个普通的全局变量就变成可以安装模块时传递参数的模块参数 module_param(name,type,perm) name:变量名称 type: name的类型(不包括数组) perm:权限类型rwxr-x 等类型内核做了相关的宏定义形如efine S_IRWXG 表示r w x g(同组) module_param_array(name,type,nump,perm)将某个数组声明为模块 参数

Linux驱动试题(参考答案)

Linux驱动试题 笔试题: 1参考答案:字符设备是指存取时没有缓存的设备,大多数字符设备只能顺序读写。比如鼠标、键盘、声卡。 块设备的读写则都有缓存来支持,只能以块为单位进行读写,并且块设备必须能够随机存取(random access),即不管块处于设备的什么地方都可以对它进行读写,字符设备则没有这个要求。比如硬盘、U盘、SD卡。 2、 参考答案:查看驱动中的打印信息用dmesg命令。 查看内核中字符设备和块设备信息可以使用命令cat /proc/devices。 查看正在使用的中断号可以使用命令cat /proc/interrupts。 3、 参考答案:Linux内核是一种单一大内核,如果没有模块机制,在调试阶段,我们需要修改内核中的某个驱动,必须把内核整个编译一遍,还要重新启动机器,这样操作会非常耗时。有了模块,我们只需要对我们关心的驱动以模块方式单独编译,无须编译整个内核,也不需要重启机器。 4、 参考答案:copy_to_user实现从内核空间向用户空间拷贝数据的功能。 copy_from_user实现从用户空间向内核空间拷贝数据的功能。分别用于实现驱动中的read 和write函数。如果交换数据都发生在内核空间中,可以直接使用内核定义的memcpy函数。

5、 参考答案:主设备号用于区别不同的驱动程序,次设备号用于区别使用同一个驱动程序的同一类设备中的不同设备。chartest使用和ttyS0一样的驱动程序。 6、 参考答案:register_chrdev(MAJOR_NUMBER, DRIVER_NAME, &xxx_fops) 该函数有三个参数,分别是主设备号,驱动名字和file_operations结构的指针 7、 参考答案:中断是一段程序,当外部设备引起中断时由CPU执行。DMA是直接内存访问,用于外设与主存储器之间快速的交换数据,利用DMA,在交换数据时可以不通过CPU,提高了CPU的利用率。 注册中断使用request_irq(IRQ_NUMBER, (*handler), IRQ_FLAGS, DRIVER_NAME, dev_id)。该函数共有5个参数,分别是要注册的中断号,中断处理程序的指针,中断标志位,中断的名字和dev_id用于区别共享同一个中断的不同设备。 注销中断使用free_irq(unsigned int, void *)第一个参数是中断号,第二个参数一般是NULL指针。 8、 参考答案:在一般情况下,由于数据量比较小,中断会比轮询更有效率。但是如果数据

非常全的linux面试笔试题及参考答案

一.填空题: 1. 在系统中,以文件方式访问设备 . 2. 内核引导时,从文件中读取要加载的文件系统. 3. 文件系统中每个文件用i节点来标识. 4. 全部磁盘块由四个部分组成,分别为引导块、专用块、i节点表块和数据存储块. 5. 链接分为:硬链接和符号链接. 6. 超级块包含了i节点表和空闲块表等重要的文件系统信息. 7. 某文件的权限为:,用数值形式表示该权限,则该八进制数为: 644 ,该文件属性是目录 . 8. 前台起动的进程使用 c 终止. 9. 静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置. 10. 网络管理的重要任务是:控制和监控. 11. 安装系统对硬盘分区时,有两种分区类型:文件系统分区和交换分区 . 13. 编写的程序运行前赋予该脚本文件执行权限. 14. 系统管理的任务之一是能够在分布式环境中实现对程序和数据的安全保护、备份、恢复和更新. 15. 系统交换分区是作为系统虚拟存储器的一块区域. 16. 内核分为进程管理系统、内存管理系统、管理系统和文件管理系统等四个子系统. 17. 内核配置是系统管理员在改变系统配置硬件时要进行的重要操作. 18. 在安装系统中,使用程序对网络进行配置,该安装程序会一步步提示用户输入主机名、域名、域名服务器、地址、网关地址和子网掩码等必要信息. 19. 唯一标识每一个用户的是用户和用户名. 20 . 协议是最为普遍的一种内部协议,一般称为动态路由信息协议. 21. 在系统中所有内容都被表示为文件,组织文件的各种方法称为文件系统 . 22. 可以实现动态地址分配. 23. 系统网络管理员的管理对象是服务器、用户和服务器的进程以及系统的各种资源. 24. 网络管理通常由监测、传输和管理三部分组成,其中管理部分是整个网络管理的中心. 25. 当想删除本系统用不上的设备驱动程序时编译内核,当内核不支持系统上的设备驱动程序时,对内核升级 . 26 命令可以测试网络中本机系统是否能到达一台远程主机,常常用于测试网络的 连通性 . 27. 编辑器具有两种工作模式:命令模式和输入模式 . 28. 可以用命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占1 位,表示文件类型,第二段占3位,表示文件所有者对该文件的权限. 29. 进程与程序的区别在于其动态性,动态的产生和终止,从产生到终止进程可以具有的基本状态为:运行态、就绪态和等待态(阻塞态) .

Linux设备驱动程序说明介绍

Linux设备驱动程序简介 Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel 中的函数,有些常用的操作要自己来编写,而且调试也不方便。本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经验,愿与Linux fans共享,有不当之处,请予指正。 以下的一些文字主要来源于khg,johnsonm的Write linux device driver,Brennan's Guide to Inline Assembly,The Linux A-Z,还有清华BBS上的有关device driver的一些资料. 这些资料有的已经过时,有的还有一些错误,我依据自己的试验结果进行了修正. 一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作.设备驱动程序是内核的一部分,它完成以下的功能: 1.对设备初始化和释放. 2.把数据从内核传送到硬件和从硬件读取数据. 3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据. 4.检测和处理设备出现的错误. 在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备.字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作.块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待. 已经提到,用户进程是通过设备文件来与实际的硬件打交道.每个设备文件都都有其文件属性(c/b),表示是字符设备还蔤强樯璞?另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们.设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序. 最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度.也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作.如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck. 读/写时,它首先察看缓冲区的内容,如果缓冲区的数据 如何编写Linux操作系统下的设备驱动程序 二、实例剖析 我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理.把下面的C代码输入机器,你就会获得一个真正的设备驱动程序.不过我的kernel是2.0.34,在低版本的kernel上可能会出现问题,我还没测试过. [code]#define __NO_VERSION__

Linux设备驱动程序学习(18)-USB 驱动程序(三)

Linux设备驱动程序学习(18)-USB 驱动程序(三) (2009-07-14 11:45) 分类:Linux设备驱动程序 USB urb (USB request block) 内核使用2.6.29.4 USB 设备驱动代码通过urb和所有的 USB 设备通讯。urb用 struct urb 结构描述(include/linux/usb.h )。 urb以一种异步的方式同一个特定USB设备的特定端点发送或接受数据。一个USB 设备驱动可根据驱动的需要,分配多个 urb 给一个端点或重用单个 urb 给多个不同的端点。设备中的每个端点都处理一个 urb 队列, 所以多个 urb 可在队列清空之前被发送到相同的端点。 一个 urb 的典型生命循环如下: (1)被创建; (2)被分配给一个特定 USB 设备的特定端点; (3)被提交给 USB 核心; (4)被 USB 核心提交给特定设备的特定 USB 主机控制器驱动; (5)被 USB 主机控制器驱动处理, 并传送到设备; (6)以上操作完成后,USB主机控制器驱动通知 USB 设备驱动。 urb 也可被提交它的驱动在任何时间取消;如果设备被移除,urb 可以被USB 核心取消。urb 被动态创建并包含一个内部引用计数,使它们可以在最后一个用户释放它们时被自动释放。 struct urb

struct list_head urb_list;/* list head for use by the urb's * current owner */ struct list_head anchor_list;/* the URB may be anchored */ struct usb_anchor *anchor; struct usb_device *dev;/* 指向这个 urb 要发送的目标 struct usb_device 的指针,这个变量必须在这个 urb 被发送到 USB 核心之前被USB 驱动初始化.*/ struct usb_host_endpoint *ep;/* (internal) pointer to endpoint */ unsigned int pipe;/* 这个 urb 所要发送到的特定struct usb_device 的端点消息,这个变量必须在这个 urb 被发送到 USB 核心之前被 USB 驱动初始化.必须由下面的函数生成*/ int status;/*当 urb开始由 USB 核心处理或处理结束, 这个变量被设置为 urb 的当前状态. USB 驱动可安全访问这个变量的唯一时间是在 urb 结束处理例程函数中. 这个限制是为防止竞态. 对于等时 urb, 在这个变量中成功值(0)只表示这个 urb 是否已被去链. 为获得等时 urb 的详细状态, 应当检查 iso_frame_desc 变量. */ unsigned int transfer_flags;/* 传输设置*/ void*transfer_buffer;/* 指向用于发送数据到设备(OUT urb)或者从设备接收数据(IN urb)的缓冲区指针。为了主机控制器驱动正确访问这个缓冲, 它必须使用 kmalloc 调用来创建, 不是在堆栈或者静态内存中。对控制端点, 这个缓冲区用于数据中转*/ dma_addr_t transfer_dma;/* 用于以 DMA 方式传送数据到 USB 设备的缓冲区*/ int transfer_buffer_length;/* transfer_buffer 或者 transfer_dma 变量指向的缓冲区大小。如果这是 0, 传送缓冲没有被 USB 核心所使用。对于一个 OUT 端点, 如果这个端点大小比这个变量指定的值小, 对这个USB 设备的传输将被分成更小的块,以正确地传送数据。这种大的传送以连续的 USB 帧进行。在一个 urb 中提交一个大块数据, 并且使 USB 主机控制器去划分为更小的块, 比以连续地顺序发送小缓冲的速度快得多*/

相关主题
文本预览
相关文档 最新文档