还剩1页未读,继续阅读
文本内容:
学生实验报告系别计算机学院课程名称Linux嵌入式应用开发专业计算科学与技术13级实验名称嵌入式Linux底层驱动综合开发实验姓名余博文评阅老师学号20成绩报告内容
1.综合实验目的通过一个综合的底层驱动实验掌握嵌入式驱动程序开发的基本步骤,能够独立的将自己的代码嵌入内核中,基本掌握字符型设备的一般开发步骤与原理,初步理解数据包在内核中的游历过程
2.实验内容本实验分四个小项目进行,分别是a)内核模块编程基本实验b)字符型设备驱动程序开发实验c)LED灯驱动开发实验d)网络内核流量统计实验
3.实验总结及思考试用自己的语言回答以下问题a)内核中是使用net_device结构体来描述所有的网络设备,它们在内核是如何组织的?每一个设备对应一个struct net_device结构体,在内核中,使用一个单向链表把所有的结构体串起来,单向链表的首地址是struct net_device*dev_base通过这个首地址可以遍历这个单向链表,以访问、查询、获取网卡的统计信息b Linux里面有一个概念叫做文件就是一切,请问你对这句话是如何理解的?0请看看下面的语句,回答问题假设函数原型如下struct net_device_stats**get_stats struct net_dev ice*dev;该函数返回值里包含了什么数据,请一一列出可以百度一下struct net_device_statsunsigned longrx_packets;/*total packetsreceived*/unsigned longtx_packets;/*total packetstransmitted♦/unsigned longrx_bytes;/*total bytesreceived♦/unsigned longtx_bytes;/*total bytestransmitted*/unsigned longrx_errors;/*bad packetsreceived*/unsigned longtx_errors;/♦packet transmitproblems♦/unsigned longrx_dropped;/♦no spacein linuxbuffers♦/unsigned longtx_dropped;/♦no spaceavailable inlinux♦/unsigned longmulticast;/*multicast packetsreceived♦/unsigned longcollisions;/♦detailed rxerrors:♦/unsigned longrx_length_errors;rxunsigned longover errors:rx crc/♦receiver ringbuff overflow/**/unsigned long errors;reeved pktwith crcerror/♦reevd*/unsigned longrx frameerrors:rx framealignment error/♦reev*r*/unsigned longfifo errors:rx fifooverrun♦/unsigned longmissed errors:/♦receiver missedpacket♦//♦detailed tx_errors♦/tx abortedunsigned long errors:tx carrierunsigned long errors:tx fifounsigned longerrors:unsignedlongtx_heartbeat_errorsunsigned longtx windowerrors;■9r/♦for cslipetc♦/unsignedlongrx_compressed;unsignedlongtx_compressed;};d Linux系统中对于中断的处理总是分为两部分顶半操作与底半操作,请问为什么要分成两部分?在顶半与底半操作中,通常会完成什么功能?e请简单叙述一下Linux内核是如何接收一个网络数据包的?请从网卡中断开始叙述欲查询网络数据包,需通过网卡发送一个软中断给CPU,然后CPU到中断向量表中查询所需执行的中断函数的地址,并执行中断函数该函数具体操作为static ssize_tnet_stats_readstruct file*filp charuser*bufferz zsize_t count,loff_t*ppos//定义个net/eyice结构体指针;{struct net_device*p;//定义个结构体指针;struct net_device_stats*s;//使结构体指针指向全局变量p=dev_base;//该变量为单向链表的首地址~一//是否为链表的结束while p{//net_device_stats//结构体指针指nprintkKERN_INFO devname:%s\n,p-name;向dev函数的返回值,以获取统计信息;//将结构体指针指向的内容s=p-get_stats p;//打印出来,例如发送与收到的字节数一f,nprintk KERN_INFO rx_bytes:%81u\n,s-rx_bytes;printkKERN_INFO Mtx_bytes:%81u\nn,s-tx_bytes;//匕匕袅dev-name是否为I,u Mif!strcmp p-name,lo{//如果是,则进入循环if countsizeofstruct net_device_stats{//女口果count〈net_deYice_stats结构体的大小copy_to_userbuffer,s,count;}~~else{copy_to_userbuffer,s,sizeofstruct net_device_stats;}-}一//指向下个链表成员p=p-next;}return0;。
个人认证
优秀文档
获得点赞 0