
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
这篇文章将那个3个注册函数说说,把整个设备模型框架搭建起来,当然,是重点部分了。在这之前希望你已经懂得总线、设备、驱动的数据结构及其里面的有关数据结构。关于调用的函数,如果显示为粗体,那么在下面我有分析。来自:drivers/base/core.cint device_register(struct device *dev){ device_initialize(dev)
/** 《linux内核完全注释》第3章* (C) 2010-10-2 yang hui yu* mail: gisyhy@163.com*/3.2.1 bootsect.s程序问题分析:1)seg cs :表示下一条语句操作数强制使用该段作为数据段比如:seg csmov sectors,cx等价于:mov cs:[
Pro-II、内核同步与互斥锁:1、理解互斥锁?互斥锁的使用也是保持内核临界区的同步的,互斥锁可以说源于信号量,信号量设置计数器可以容许n个进程并发的访问临界区,而互斥锁不行,只能容许每次一个进程访问,也就是计数器值为1的信号量,可以这么理解。互斥锁和自旋锁有不同(显然的),互斥锁在中断处理程序中和可延迟函数中都不能使用,因为它是可以睡眠的,只能在进程上下文或者软中断上下文才能使用。
# 下面先设置几个后面可能会用的着的中断向量.macro set_early_handler handler,trapno lea /handler,%edx movl $(__KERNEL_CS movw %dx,%ax movw $0x8E00,%dx /* interrupt gate - dpl=0, present */
很就没跟大家聊天了,上次聊还是分析完内核启动全过程的事情。这几次发的都是我目前学习设备模型的心得,把它都总结了起来,然后放到博客中供大家学习与探讨。如果你还记得当时分析到了driver_init()这个函数,那么太好了,因为下面的内容就是对这个函数进行简要分析的。如果你没关注过,那么也不用太那个什么,因为这个函数和内核启动全过程基本没什么联系,看看它在哪里就知道了。drivers/base
Pro-I、内核同步与自旋锁:1、为什么要使用内核同步?同步使得共享数据结构(相对应的代码块—临界区)可以有节奏的被读/写。主要是由于内核控制路径的改变,而且它的改变是随机的。那么我们所要做的就是要保证在任意时刻只有一个内核控制路径处于临界区。如果在单CPU的情况下,只需禁止内核抢占即可实现不会发生内核控制路线的改变,如果在多CPU的情况下,就需要用到自旋锁了,它可以保证多个CPU的运行轨
这个题目取得好,好像底层离我们越来越远了,因为内核在一步一步脱壳,很快漂亮的形状就会展现在我们眼前,在这之前,我们得屏气凝神,静静地等待这一时刻的到来。进入真实内核的第一个文件是arch/x86/kernel/head_32.S。/* * 32-bit kernel entrypoint; only used by the boot CPU. On entry, * %esi p
内核中链表的使用非常广泛,这里将linux/list.h中的部分,也是最常用的宏定义给总结了。Pro-III、内核链表: 1、定义+初始化:#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) /struct list_head name = LIST_HEAD_INIT(n
一个初学者如何可以在浩瀚的linux海洋里找到自己的小舟,遨游其中。我就是在寻觅的其中一员,希望你也是。接触linux内核,学习源代码,学习大师们的杰作,这就是我的原动力,网上太多如何学习linux源代码的方法,可能适合一部分人,每个人都有自己的方法。而我,经过很常时间的思考,于是下定决心,先攻破晦涩的英语这关,因为代码注释都是英文。我希望和有兴趣的初学者一起完成我们的遨游,那是无比的快乐和幸福
注册总线。来自:dirvers/base/bus.c:int bus_register(struct bus_type*bus){ int retval; struct bus_type_private *priv; priv = kzalloc(sizeof(struct bus_type_private), GFP_KERNEL);







