历史上的今天
返回首页

历史上的今天

今天是:2025年10月13日(星期一)

正在发生

2022年10月13日 | mini2440 入门块设备驱动(用RAM缓存模拟磁盘)代码记录(内核用的是2.6.32.2)

2022-10-13 来源:csdn

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

#include

#include

#include

 

#define RAMBLOCK_SIZE (1024*1024)

 

static struct gendisk *grh_gendisk;

static struct request_queue *grh_queue;

static DEFINE_SPINLOCK(grh_spin_lock);

static int major;

static unsigned char *ramblock_buf;

 

 

//对队列中的请求进行处理的函数

static void grh_do_ramblock_req(struct request_queue *q){

struct request *req;

static int read_count=0, write_count=0;

unsigned long offset, count;

req = blk_fetch_request(q);

while (req) {

 

//真正的数据操作

offset = blk_rq_pos(req); //req对应的扇区的偏移量

count = blk_rq_cur_sectors(req); //req对应的数据传输量,以扇区为单位

offset <<= 9;

count <<= 9;

if(rq_data_dir(req) == READ){ //读操作

printk(KERN_EMERG"read count=%dn", ++read_count);

memcpy(req->buffer, ramblock_buf+offset, count); /*从ramdisk把需要搬移的扇区数据移动到req的buffer里面*/

}

else{ //写操作

printk(KERN_EMERG"write count=%dn", ++write_count);

memcpy(ramblock_buf+offset, req->buffer, count);

}

 

if (!__blk_end_request_cur(req, 0))

req = blk_fetch_request(q);

}

 

}

 

 

//获取柱面和扇区信息的函数,用于向分区工具提供参数

static int grh_getgeo(struct block_device *bdev, struct hd_geometry *geo){

geo->heads = 2; //假设2个面

geo->cylinders = 32; //假设32个柱面

geo->sectors = RAMBLOCK_SIZE/512/2/32; //算出扇区个数

return 0;

}

 

static struct block_device_operations grh_bdops = {

.owner = THIS_MODULE,

.getgeo = grh_getgeo,

};

 

static int ram_block_init(void){

//分配gendisk

grh_gendisk = alloc_disk(16); //分区个数为16

 

//设置gendisk

grh_queue = blk_init_queue(grh_do_ramblock_req, &grh_spin_lock); //创建操作队列

grh_gendisk->queue = grh_queue;

major = register_blkdev(0, "grh_ramblock");

grh_gendisk->major = major;

grh_gendisk->first_minor = 0;

sprintf(grh_gendisk->disk_name, "ramblock");

grh_gendisk->fops = &grh_bdops;

set_capacity(grh_gendisk, RAMBLOCK_SIZE/512); //设置块设备大小为1M

 

ramblock_buf = kzalloc(RAMBLOCK_SIZE, GFP_KERNEL);

if(NULL == ramblock_buf){

printk(KERN_EMERG"allocate buffer error!n");

}

 

//注册gendisk

add_disk(grh_gendisk);

 

return 0;

}

 

static void ram_block_exit(void){

unregister_blkdev(major, "grh_ramblock");

del_gendisk(grh_gendisk);

put_disk(grh_gendisk);

blk_cleanup_queue(grh_queue);

kfree(ramblock_buf);

return;

}

 

 

module_init(ram_block_init);

module_exit(ram_block_exit);

 

MODULE_AUTHOR("GRH");

MODULE_VERSION("1.0");

MODULE_DESCRIPTION("RAM BLOCK DRIVER");

MODULE_LICENSE("GPL");


推荐阅读

史海拾趣

Electromagnetic Industries Llp公司的发展小趣事

在技术创新的同时,EMI公司也注重市场拓展。公司根据市场需求和产品特点,制定了有针对性的营销策略。一方面,公司积极参加国内外各种电子展会和论坛,展示产品和技术实力;另一方面,公司加强与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。通过这些努力,EMI公司的市场份额不断扩大,品牌影响力也逐渐提升。

Esterline Technologies Corporation公司的发展小趣事

作为一家有社会责任感的企业,EMI公司不仅关注经济效益的增长,还积极履行社会责任。公司积极参与各种公益活动和社会救助行动,为灾区捐款捐物、支持教育事业等。同时,公司还注重环保和可持续发展,通过引进环保技术和设备、加强废弃物处理等措施降低生产过程中的环境污染。这些行动展现了EMI公司的良好企业形象和社会责任感。

Comtech AHA Corp公司的发展小趣事

品质是Comtech AHA Corp的生命线。公司始终坚持严格的品质管理,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。正是这种对品质的执着追求,使得Comtech AHA Corp的产品在市场上赢得了良好的口碑。许多知名企业纷纷与Comtech AHA Corp建立长期合作关系,进一步推动了公司的发展。

AnDAPT__Inc.公司的发展小趣事

在电子行业快速发展的背景下,Comtech AHA Corp敏锐地洞察到了物联网、5G等新兴领域的市场潜力。公司及时调整战略方向,加大在这些领域的研发投入,推出了一系列符合市场需求的新产品。凭借精准的市场定位和优质的产品质量,Comtech AHA Corp成功抓住了市场机遇,实现了业务的快速增长。

Endicott Research Group Inc (ERG)公司的发展小趣事

自1979年起,Endicott Research Group(ERG)就开始涉足电源转换产品的制造领域。在初创时期,公司面临着资金紧张和技术挑战,但团队坚持创新,专注于为LCD背光供电的LED驱动器及相关电源设备的研发。通过不断的试验和改进,他们成功地开发出了一系列高效稳定的产品,为公司的后续发展奠定了坚实的基础。这一时期的艰苦奋斗和技术积累,成为了ERG发展历程中的重要篇章。

智浦欣(Chipstar)公司的发展小趣事

随着公司规模的不断扩大和业务的快速发展,智浦欣公司意识到,必须加强内部管理和人才培养才能确保公司的持续健康发展。于是,公司引进了一套先进的管理体系和人才培养计划。在管理体系方面,公司建立了完善的组织架构和业务流程,提高了工作效率和协同能力;在人才培养方面,公司注重员工的个人发展和职业规划,提供了多样化的培训和学习机会,激发了员工的工作热情和创新能力。

问答坊 | AI 解惑

全面认识存储器(RAM与DRAM)

下面这篇文章相当全面的介绍了各种RAM的基本原理读写及区别. 好像也是从各个地方收集到一起的,不过组织还可以.可惜是PDF格式而且带框的,不知道如何弄下来.如果你对RAM认识还不够的话,强烈推荐你看看. http://www.dz3w.com/info/basic/memory/index ...…

查看全部问答>

看看TI高层如何管理自己的时间

德州仪器(TI)全球特殊应用产品部大中国业务策略拓展副总裁 林坤山 林坤山博士以数字信号处理器(DSP)先锋著称,是早期的DSP博士之一,曾于70年代后期在美国新墨西哥与田纳西大学任教。拥有12项专利的林博士,曾在国际会议与期刊杂志上发表超过5 ...…

查看全部问答>

简述滤波器的发展历程及前景

滤波器的发展历程   ---凡是有能力进行信号处理的装置都可以称为滤波器。在近代电信设备和各类控制系统中,滤波器应用极为广泛;在所有的电子部件中,使用最多,技术最为复杂的要算滤波器了。滤波器的优劣直接决定产品的优劣,所以,对 ...…

查看全部问答>

tornado 工程中如何编译汇编代码(*.s)?

我用Makefile是可以编*.s代码的,但工程中就是不可以. 不知为何? …

查看全部问答>

请帮忙推荐arm9开发板

要求如下 1、支持wince6 2、带有电话、gprs、短信模块 3、ARM9 CPU 总的来说就是方便我能用这个开发板进行一款基于wince6平台的手机开发,价格2000以内吧,如果有性价比更好的,价格高一些也可以,谢谢大家了!…

查看全部问答>

有满足如下要求的串口调试工具吗?

1.在单机上调试串口通讯, 2.不连接串口的收发针脚, 在这种情况下,有没有什么调试工具可以模拟串口的通讯?…

查看全部问答>

lm3s9b96上接3g上网卡或wifi的usb 开发

本人新人一个。。 以前不做这块的,刚去一个新单位,领导要开发这么一个东西。 主要目的就是通过usb口接的3g或wifi模块同外部设备进行数据传输。   大家有什么方案建议之类的没有? 例程最好了。学习文档之类的也非常感谢。   多 ...…

查看全部问答>

dsp 28335

有谁能告诉我警告的意思? <Linking> warning: creating output section "PartIdRegsFile" without a SECTIONS    specification …

查看全部问答>