|
楼主 |
发表于 2004-2-3 11:18:36
|
显示全部楼层
对不起,昨天不小心出错了,以为用下面的方法不能读,现在改进后可以了,下面是改进后的源代码:
/*hd.c*/
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/unistd.h>
#include <linux/fs.h>
#include <asm/fcntl.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
#define BLOCKS 512
int write_disk_data()
{
struct file *filp=NULL;
char buf[BLOCKS];
int result;
mm_segment_t old_fs;
memset(buf,0,BLOCKS);
filp= filp_open("/dev/hda1", O_RDWR, 0600);
if(!IS_ERR(filp))
{
old_fs=get_fs();
set_fs(get_ds());
if(filp->f_op && filp->f_op->read)
{
filp->f_pos=0;
result=filp->f_op->read(filp,buf,BLOCKS,&filp->f_pos);
if(result<0)
{
printk("read file error.\n");
set_fs(old_fs);
filp_close(filp, NULL);
return 0;
}
}
/*decide the TOPSEC_RANDOM_SIZE's value*/
printk("buf[0x1bc-d]=%x%x.\n",buf[0x1bc],buf[0x1bd]);
buf[0x1bc]=0x10;
buf[0x1bd]=0x58;
if(filp->f_op && filp->f_op->write)
{
filp->f_pos=0;
result=filp->f_op->write(filp,buf,BLOCKS,&filp->f_pos);
if(result<0)
{
printk("write file error.\n");
set_fs(old_fs);
filp_close(filp, NULL);
return 0;
}
printk("write buf[0x1bc-d]=%x%x.\n",buf[0x1bc],buf[0x1bd]);
}
filp_close(filp, NULL);
set_fs(old_fs);
return 0;
}
return 0;
}
int init_module(void)
{
write_disk_data();
return 0;
}
void cleanup_module(void)
{
}
下面是make文件:
DFLAGS= -D __KERNEL__ -D MODULE
CFLAGS= -O2 -g -Wall -Wstrict-prototypes -pipe -I/usr/include/linux/ -I/usr/src/linux/drivers/block
hd.o : hd.c
gcc -c hd.c $(DFLAGS) $(CFLAGS) -o hd.o
clean:
rm -f *.o
通过上面的例子,我想大家也知道在应用层怎么读写了吧。 |
|