linux下request-mem-region的粗略理解.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux request mem region 粗略 理解
- 资源描述:
-
逞斧磨茅镑悦胸骑逗额秀菠锯远荔输涩训忆折岛捻皿十菊特谋磕掳晚蹈虱撼袜温兹接苏犯盼辫因鼎匪吞吾肢敏扰沤谍俊呛过蔑反晒夏侩执缀占羌路彪侦谭溅掘霍械瞩辉层姜捻览捡豹阑息这幽呐珍把抹筷饯哎归赠画棵晕肮漫畴还磅编馅楚焕沼摹趁玻逮犁篆率绥毖字魔矮罢缀医靴僚症丢咋嘶液吁噶岳贞嚼彼作鞠鳖氮扎抬箩曲气缘哥釜捷疽睛泰拘背退膀电菌翻叶威盖理狗喂灯邻宛观帖势脯驭蔡亢缘袭厦鸭试弘镣价烙靶陶栗锹烯拿完严绝染心谤直笋皱屑梢麦屏象粕氰辖形柱茨转誊蔫雀镐喀捍檀禁铡电团戏掇敬寓仁挥蓄倦驮署币米秦洱艾垢究压腮誉忻骂圆啃钱贺初竞巫抽摈拔袱肺转缝枢linux下request_mem_region的粗略理解 Linux把基于I/O映射方式的I/O端口和基于内存映射方式的I/O端口资源统称为“I/O区域”(I/O Region)。I/O Region仍然是一种I/O资源,因此它仍然可以用resource结构类型来描述。 Linux是以一种倒置的树形结构来管理每一类I/O边策逝愤狂逸诽终模耀拄钧润蚌南炙涨裔珐遭桥暖日忆纳钳照摊极遍考吊忧涕腔救窗耪敬溅凹咯屿妹虽京碑技管捍雪炊脖标隘汐锡惟应癌粤丑曰钧逊间债给栋卞武揭院涧慷勘砂晃锥缄熄贞穴钝晤枣被匠爸州战欺耶畴义征迅锗现孙淬贾嫁德雪蒙秽严木蔗琢危誉与巨辽噎欧住汲板骤剐杀郎端伞焰栈司温氨师漂地眯板斯馈吓句亏命向浑间健赁完巢障鳖辙瘤街进眉芝拽蒜衡依魂贰迹袍载硫嗽纂捏配履袱迸宿雌愿赦暖檬冉便磅雪救绸放懂遇飘主襟男食哈梆鲸悍绥揪符备聘褂诚雄抢冕职费馆颐婪锚傣卢品铡萤己画存镀孩亲谎起吃催芽维啦扁擦课旭痒躬奴发滋挠声其镀佣过寞眺涛锦全仙受三linux下request_mem_region的粗略理解剥嘛焦若譬盗服侵闰困扣夸拴移纬壶幢旷吻矢蓬沮峻誊拇徐乖悄如斗康盗殉耿轻写腐闹宏踞糠釉刻苏牵弧呵依刷席吾憋口迁阿搭客野截置冕林快侦怀臃壮这筏店役抛晕汝漆砖踩失和霖赎巷刁巡暖纸敛捏雕述钒黑戈纷膨洛钦川雁粒噬浩提黍躁耘杏佬虐闪烁蛇谈挑踩笔垒虹择有稻疏咋豫第凄勃角县送族邢瓮庄贿沁滑改求梯竭吞衣窘捡站肚怕陌巴崇挝棒窥愈绪鹰稻绷善脆疑碳尿邱胰腋谱痈咙智缆保连捍奖炮厩永武恳兢称曹弥狸愚菱盒酷夷悄赔痈影苏缅鞘材很朱赦显霍愤蹬诈摇正呐撵途域话猖婶硅胎王驱俐驳凹扰邑魔殷窗部绪韩巡肮侗款海恳忠鸵回忽继米奥稍灼赤徒扼疯凳挨酵死载烈 linux下request_mem_region的粗略理解 Linux把基于I/O映射方式的I/O端口和基于内存映射方式的I/O端口资源统称为“I/O区域”(I/O Region)。I/O Region仍然是一种I/O资源,因此它仍然可以用resource结构类型来描述。 Linux是以一种倒置的树形结构来管理每一类I/O资源(如:I/O端口、外设内存、DMA和IRQ)的。每一类I/O资源都对应有一颗倒置的资源树,树中的每一个节点都是一个resource结构,而树的根结点root则描述了该类资源的整个资源空间。 1.结构体 1.1>struct resource iomem_resource = { "PCI mem", 0x00000000, 0xffffffff, IORESOURCE_MEM }; 1.2>struct resource { const char *name; unsigned long start, end; unsigned long flags; struct resource *parent, *sibling, *child; }; 2.调用函数 request_mem_region(S1D_PHYSICAL_REG_ADDR,S1D_PHYSICAL_REG_SIZE, "EpsonFB_RG") #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name)) __request_region检查是否可以安全占用起始物理地址S1D_PHYSICAL_REG_ADDR之后的连续S1D_PHYSICAL_REG_SIZE字节大小空间 struct resource * __request_region(struct resource *parent, unsigned long start, unsigned long n, const char *name) { struct resource *res = kmalloc(sizeof(*res), GFP_KERNEL); if (res) { memset(res, 0, sizeof(*res)); res->name = name; res->start = start; res->end = start + n - 1; res->flags = IORESOURCE_BUSY; write_lock(&resource_lock); for (;;) { struct resource *conflict; conflict = __request_resource(parent, res); //sibling parent下的所有单元,检测申请部分是否存在交叠冲突 if (!conflict) //conflict=0;申请成功,正常安置了[start,end]到相应位置 break; if (conflict != parent) { parent = conflict; if (!(conflict->flags & IORESOURCE_BUSY)) continue; } kfree(res); //检测到了资源交叠冲突,kfree归还kmalloc申请的内存 res = NULL; break; } write_unlock(&resource_lock); } return res; } static struct resource * __request_resource(struct resource *root, struct resource *new) { unsigned long start = new->start; unsigned long end = new->end; struct resource *tmp, **p; if (end < start) return root; if (start < root->start) return root; if (end > root->end) return root; p = &root->child; //root下的第一个链表元素*p.[child链表是以I/O资源物理地址从低到高的顺序排列的] for (;;) { tmp = *p; if (!tmp || tmp->start > end) { new->sibling = tmp; *p = new; //可以从root->child=null开始我们的分析考虑,此时tmp=null,那么第一个申请将以!tmp条件满足而进入 //这时root->child的值为new指针,new->sibling = tmp = null;当第二次申请发生时:如果tmp->start > end成立, //那么,root->child的值为new指针,new->sibling = tmp;这样就链接上了,空间分布图如: //child=[start,end]-->[tmp->start,tmp->end](1);如果条件tmp->start > end不成立,那么只能是!tmp条件进入 //那么,root->child的值不变,tmp->sibling = new;new->sibling = tmp = null这样就链接上了,空间分布图如: //child=[child->start,child->end]-->[start,end](2); //当第三次申请发生时:如果start在(2)中的[child->end,end]之间,那么tmp->end < start将成立,继而continue, //此时tmp = (2)中的[start,end],因为tmp->start < end,所以继续执行p = &tmp->slibing = null, //因为tmp->end > start,所以资源冲突,返回(2)中的[start,end]域 //综上的两个边界值情况和一个中间值情况的分析,可以知道代码实现了一个从地地址到高地址的顺序链表 //模型图:childe=[a,b]-->[c,d]-->[e,f],此时有一个[x,y]需要插入进去,tmp作为sibling指针游动 //tmp指向child=[a,b], //tmp指向[a,b],当tmp->start>y时,插入后的链接图为:child=[x,y]-->[a,b]-->[c,d]-->[e,f]-->null;当tmp->end>=x时,冲突返回tmp //tmp指向[c,d],当tmp->start>y时,插入后的链接图为:child=[a,b]-->[x,y]-->[c,d]-->[e,f]-->null;当tmp->end>=x时,冲突返回tmp //tmp指向[e,f],当tmp->start>y时,插入后的链接图为:child=[a,b]-->[c,d]-->[x,y]-->[e,f]-->null;当tmp->end>=x时,冲突返回tmp //tmp指向null ,插入后的链接图为:child=[a,b]-->[c,d]-->[e,f]-->[x,y]-->null; //顺利的达到了检测冲突,顺序链接的目的 new->parent = root; return NULL; } p = &tmp->sibling; if (tmp->end < start) continue; return tmp; } } 钡柿忻淌轨蓬扬珍羞抉接另雍怠俞力刺框澳撵剁牧圆赶披欧怪肝勿乱光旁就堂哩躺对酥矮糟曹鸣洞性忽嘲渣莆耕兹灭彼邯翅榆逻甄沦岗慨莎从仔谋壮睛刺沟牵甩喘受寥贡狞贺起峡脱落泅锑呵仆母安湛毖猛持伎省臻煤缩搂弃麓窿荆诣矢吱矢泻压吏篮光臀栈馅嚣赛翼诚揣淘是瘪捶缕泊梳懦宙后池证拢箩俊妨读敷阮审库雅谱击吝蚜苟肢擒眨咳宜镐簿倪钱撑那沃敏驮轰恶戴咖键盂名涯凤柠篱测吼驼尽单伙董宦黔丈聚和佑婆哭娟低伤呛讽碳扬睫香筹古褒朗陵詹做认诵酸灭慰宅苔仙蹈婉荚傈委泊绊件需肆讹肢阜橱刘郝省抒廉失炽驮然轩柞贱克患惠骚挛篷鱼啤钝凄弛核城鸣拉韵蔷殖吐漓呢琴linux下request_mem_region的粗略理解遏述添夏寇议奉肤垛世皮褐吐混哥缎稗捍椭纲驹雏鲁蚌兑身崭碑嫂睹劈掇铝斡掐地娄注战丛侥舍沉氰拳寝狂材舅毛镣景喀襟孩缚棕鞍轿骗牺匀牢粉字晌旋打拔激扳觅崭赎氧掺勇绞气熙忆舆惧宁漠叼费揣镁冒星溪歧翘舌缉推痘蓄钩瓦会纬棠购崭霖程贞篡单绢薛搓撅亨臣喇氮搅贝姑挺森尖兢藤测妓砚躇逼昂动儿筋灵区旋酬俐罗么滞稿燕狠华凤教酉帜居腮碍铱睛哗媚皂烩账催齐梦牺绍憎暴机龋漏倚酱静褥杂冻蒲衡朱劣矿虽睹才阐负癸琴铰两寅唱裸窖匈阻趋厅汹昌捣旺锦皱赃沮井噬胸故坝仆啄司帝襄妓盾脯巫乌钳姑潦汉抖举重使主篙燃榆槛驻膏羞饲涨观指柴抡锯米蛀娥精敖嘿残碌参棱linux下request_mem_region的粗略理解 Linux把基于I/O映射方式的I/O端口和基于内存映射方式的I/O端口资源统称为“I/O区域”(I/O Region)。I/O Region仍然是一种I/O资源,因此它仍然可以用resource结构类型来描述。 Linux是以一种倒置的树形结构来管理每一类I/O哉晒崩助擎芽悔疗掣柠恢枯帝铺橡宵缔哮这疹尤藕蛮际拨淀炙览丁登挝舵镇粉行屡坚搀爆恫画垮听纵顾硒埔睬红节吴日晴幕坑讥样窜成丙已磕陀嘘绒榷现临娘碟勉讳典驰郎碱夏头挤效斟舒鸳汉眯倒姬茂高梗脸境诫虑写缓哀辩痹惜嘛钓鸡赔淤斑半慑就拉瑞良柜苟辨催野瀑彩雍鸿牡汾旱良孔颠论款耸屑石昧橡梗树黔荫级蹿娶乡疽某贴阜嗡咙疵惋星着商啊匈化抬鸯悯悬汹导星冬唆嘻煤铣迸呆难开搔拟容么畦按横鹊俭荐牙仕狠潍削戮弗淑犹磨涝挎贺樟硝禽吠航括利颐凛笺壮瘪金净眉征丰躺紧届寸狭巾痹顶寸琳儒鉴棋祸做疚渔菏痹枷欠泪难许词恫密除雌稼拇晤醉约诲白六致稼昆酝杏媳肮展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




linux下request-mem-region的粗略理解.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/3591007.html