fire_cpp 发表于 2005-5-17 09:44:32

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

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

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

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

小弟刚接触这些,如果问的问题在各位看起来白痴,请别见怪。

blue_hacker 发表于 2005-6-1 16:53:20

faint
先好好看 书,自己认真学习,然后再来问问题
不是什么问题都可以问的,至少你 应该首先自己动手去解决自己的问题
而不能指望别人象保姆样的教你

wb_pla810509 发表于 2005-6-2 11:54:28

faint
先好好看 书,自己认真学习,然后再来问问题
不是什么问题都可以问的,至少你 应该首先自己动手去解决自己的问题
而不能指望别人象保姆样的教你

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

sd_2001 发表于 2005-6-2 17:05:04

凡是内核中不是以 sys 开头的函数只能在内核中,或者内核驱动中调用。而以 sys 开头的函数也只能以系统调用的方式使用。

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

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

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

dongni386 发表于 2005-6-7 18:16:06

从ring3东ring0有三钟方式
1。中断(比如时钟)
2。异常(比如除数为0,缺页)
3。系统调用(trap指令,IA32是int指令)
irq_enable()应该会编译成“sti”指令
irq_diable(),应该会编译成“cli”指令(IA32).
在用户态是不能起作用的。

dongni386 发表于 2005-6-7 18:18:02

呵呵
忘了,ring3和ring0是指IA32
就是目态(用户态)和管态(核心态)

wolf0403 发表于 2005-6-9 01:27:30

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

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

刚看完 LKD,如果理解有错敬请指教
页: [1]
查看完整版本: 刚开始接触内核,请教一些有关中断和进程上下文的问题。