当前位置:文档之家› 基于Linux内核编程的实验报告(Linux内核分析实验报告)

基于Linux内核编程的实验报告(Linux内核分析实验报告)

首先输出16个文件的文件名,然后176—191行使用归并排序,设定两个指针,一个从指向0位置,一个指向15位置。分别向后,向前查找出第一个文件头名不是0X00或者0XE5的文件和第一个文件头文字是二者的文件名,如果向后的指针一直位于向前的指针前面,就进行二者的调换,在总的循环中,如果向后的指针超过了向前的指针,则停止循环。最后输出重新排序的文件名
int len ;
struct my_proc_data *mydatap = (struct my_proc_data *) data;
if(count>MYDATA_LEN)
len = MYDATA_LEN;
else
len = count; //闀垮害鏈€澶ф槸16
if(copy_from_user(mydatap->value,buffer,len)){ //鎶奲uffer(鐢ㄦ埛绌洪棿)涓殑鏁版嵁鍐欓亾mapdatap(鍐呮牳绌洪棿)鐨刣ata缁撴瀯涓幓
Linux内核分析实验报告
实验题目:文件系统实验
实验目的:linux文件系统使用虚拟文件系统VFS作为内核文件子系统。可以安装多种不同形式的文件系统在其中共存并协同工作。VFS对用户提供了统一的文件访问接口。本实验的要求是
(1)编写一个get_FAT_boot函数,通过系统调用或动态模块调用它可以提取和显示出FAT文件系统盘的引导扇区信息。这些信息的格式定义在内核文件<include/linux/msdos_fs.h>的fat_boot_sector结构体中。函数可通过系统调用或动态模块调用。
fine name is---------
fine name is------��^---
fine name is---------
fine name is---------
fine name is------ L�---
fine name is------��J��J��J��Jp�J---
fine name is------&---
目录入口=0
数据开始扇=16384
最大簇号=1021954
根开始扇=2
fs信息扇=1
----------------目录文件名:
------before change
file name is------KEJIAN v���<�<- -
file name is------Ƕ��ʽ~1- -
file name is------CHAPTE~1PPT - -
file name is------��^�{t�|- -
file name is------
T- -
file name is------- -
----------have such files
file name is------- -
----------have such files
file name is------- -
二:主要数据结构说明:
(1)超级块对象:
数据结构说明:一个已经安装的文件系统的安装点由超级块对象代表。
struct super_block {
...
const struct super_operations *s_op;
}
(2)索引i节点对象
数据结构说明:索引i节点对象包含了内核要操作的文件的全部控制信息,对应着打开文件的i节点表。
/*#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <linux/jiffies.h>
#include <asm/uaccess.h>
file name is------��^- -
----------have such files
file name is------- -
file name is------- -
file name is------ L�- -
file name is------��J��J��J��Jp�J- -
Function :缂栧啓鍒涘缓proc鏂囦欢绯荤粺鐨勬ā鍧?璇ョ▼搴忓垱寤哄湪/proc鐩綍涓?
:鍒涘缓mydir鐩綍,鍦╩ydir鐩綍涓嬪垱寤轰繚瀛樺綋鍓嶇殑绯荤粺鏃堕棿
jiffies鍊肩殑鏂囦欢myfile,
***************************************************************************/
硬件环境:内存1G以上
软件环境:Linux(Ubuntu)2-6
实验步骤:
一:实验原理:
以实验4为蓝本,在优盘中编译并加载模块,启动测试程序,查看/proc/mydir/myfile的文件内容。从优盘得到fat文件系统的内容存在msdos_sb_info结构中,然后得到msdos_sb_info结构相应的属性值,得到实验一的数据。实验二中,得到fat文件系统第一个扇区的十六个文件信息。然后按照文件名头文字的比较方法,应用归并排序的方法,将头文件是0X00和0XE5的文件调到前面,其他的文件调到后面
len+=sprintf(page,"%s%ld\n",mydatap->value,jiffies); //灏嗗瓧绗︿覆鏍煎紡鍖? //鍙互鐩存帴浣跨敤鍐呮牳鍙橀噺
return len;
}
//鍐欐枃浠秏yfile鐨勫啓椹卞姩鍑芥暟,鎶妋ydata鐨勬暟鍊煎啓鍒 Nhomakorabea枃浠朵腑
static int proc_write(struct file *file,const char *buffer,unsigned long count,void *data){ //file鐩存帴灏辨槸myfile?buffer鎸囧悜鐨勬槸鐢ㄦ埛绌洪棿鐨勪粈涔堟暟鎹紵
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <linux/jiffies.h>
#include <linux/sched.h>
#define MODULE_NAME "Myproc"
#define MYDATA_LEN 16384/2
//鏀剧敤鎴风┖闂翠紶鍏ョ殑鏁版嵁
struct my_proc_data{
char value[MYDATA_LEN];
};
struct my_proc_data mydata;
struct task_struct *task;
(2)编写一个get_FAT_dir函数,通过系统调用或动态模块调用它可以返回FAT文件系统的当
前目录表,从中找出和统计空闲的目录项(文件名以0X00打头的为从未使用过目录项,以0XE5打头的为已删除的目录项),将这些空闲的目录项集中调整到目录表的前部。这些信息的格式定义在内核文件<include/linux/msdos_fs.h>的msdos_dir_entry结构体中。
fine name is------Ƕ��ʽ~1---
fine name is------CHAPTE~1PPT ---
fine name is------��^�{t�|---
fine name is------
T---
fine name is---------
fine name is---------
}
//瑁呭叆妯″潡
int init_module(void)
{
example_dir = (struct proc_dir_entry * )proc_mkdir("mydir",0); //在/proc目录下建立
...
}
(4)文件对象
数据结构说明:文件对象表示已经打开的文件,它是直接连系用户应用程序的内核对象。
struct file {
...
struct file_operations *f_op;
...
}
三:函数说明:
系统函数:
container_of()
sb_bread()
自定义函数:
get_FAT_dir()函数:
#include <linux/moduleparam.h>
#include <linux/list.h>
#include <linux/sched.h>
#include <linux/msdos_fs.h>
#include <linux/file.h>
#include <linux/fs_struct.h>
#include <linux/msdos_fs.h>
#include <asm/uaccess.h>
#include <linux/buffer_head.h>
#include <linux/moduleparam.h>
//#include <linux/msdos_fs_sb.h>
#include "fat.h"
int count;
static struct proc_dir_entry *example_dir;
static struct proc_dir_entry *date_file;
相关主题