QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2006|回复: 6

刚开始接触内核,请教一些有关中断和进程上下文的问题。

[复制链接]
发表于 2005-5-17 09:44:32 | 显示全部楼层 |阅读模式
小弟我刚开始接触内核,一些问题搞不明白,请教各位大侠,问得太简单的话请别骂我白痴
1
一些有关控制中断的函数能在用户程序中调用吗?比如irq_enable(),irq_diable(),还有中断处理程序注册函数,等等?
我知道用户程序和内核的交互只有通过系统调用,刚才我说的那不属于系统调用吧?如果不属于,不能在用户程序中调用,那开发驱动程序的时候,要用到这些东西怎么办?难道驱动程序完全运行在内核态吗——这涉及到小弟另一个不明白的地方,驱动程序像一般用户程序一样运行安装的话,它就是用户程序,如何调用那些函数?

哪位可以推荐些网上的文章介绍驱动程序开发入门一类的?

2
所谓“进程上下文”。如果说一个函数可以在进程上下文中调用,那是否表明它也可以在“用户编写的程序中”调用?进程上下文是否只是内核代码运行时特有的一个环境,而不用在用户程序中?
一些宏和函数,比如current,能否在用户编写的程序中调用?

小弟刚接触这些,如果问的问题在各位看起来白痴,请别见怪。
发表于 2005-6-1 16:53:20 | 显示全部楼层
faint
先好好看 书,自己认真学习,然后再来问问题
不是什么问题都可以问的,至少你 应该首先自己动手去解决自己的问题
而不能指望别人象保姆样的教你
回复

使用道具 举报

发表于 2005-6-2 11:54:28 | 显示全部楼层
[quote:fa75d91175="blue_hacker"]faint
先好好看 书,自己认真学习,然后再来问问题
不是什么问题都可以问的,至少你 应该首先自己动手去解决自己的问题
而不能指望别人象保姆样的教你[/quote]

fire_cpp提的问题很不错,好像一个月之前就已经提过,只是一直没有哪位朋友来回答过这个问题! 我也是一个正在学习liunx的新手,所以,我热切的期望着论坛的斑竹和大虾们能够给予解答! 同时,还希望不懂装懂者不要再灌水了!
回复

使用道具 举报

发表于 2005-6-2 17:05:04 | 显示全部楼层
凡是内核中不是以 sys 开头的函数只能在内核中,或者内核驱动中调用。而以 sys 开头的函数也只能以系统调用的方式使用。

用户模式的驱动程序中也不能调用内核中的函数,只能通过系统调用与内核相连。

看书的话,我建议先把连接程序和编译程序的作用搞清楚。

然后熟悉一下x86保护模式原理(概念就行),最后看ldd(Linux Device Driver)这本书。
回复

使用道具 举报

发表于 2005-6-7 18:16:06 | 显示全部楼层
从ring3东ring0有三钟方式
1。中断(比如时钟)
2。异常(比如除数为0,缺页)
3。系统调用(trap指令,IA32是int指令)
irq_enable()应该会编译成“sti”指令
irq_diable(),应该会编译成“cli”指令(IA32).
在用户态是不能起作用的。
回复

使用道具 举报

发表于 2005-6-7 18:18:02 | 显示全部楼层
呵呵
忘了,ring3和ring0是指IA32
就是目态(用户态)和管态(核心态)
回复

使用道具 举报

发表于 2005-6-9 01:27:30 | 显示全部楼层
各种驱动都是作为核心的一部分存在的,因此诸如 irq_enable 这些函数,都是在核心模块中用到的,属于核心的一部分。驱动程序加载进入内核,然后当用户程序访问设备的时候,或者设备发生中断的时候,核心会调用你的驱动程序装入的时候挂接的 callback 接口。

进程上下文是说从用户程序中通过 trap 进入核心之后的状态——应该是除了中断状态之外的唯一状态吧。内核中的各种东西,只有在处于核心状态的时候才能使用,普通的用户态进程是无法使用的。

刚看完 LKD,如果理解有错敬请指教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 12:38 , Processed in 0.064482 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表