您的位置:首页 > 其它

构造和运行模块

2017-03-05 11:30 169 查看
构造一个模块并不难,难的是如何把自己驱动的元件理解好,并最大化其性能,说的俗一点就是怎么利用好器件的功能。
内核模块程序和应用程序:大多数的小规模应用程序都是从头到尾执行单个任务,而模块却只是先注册自己,以便服务以将来,接着它的初始化函数就立即结束。模块化程序运行在内核空间,是内核功能的一个扩展,一般来说,一个驱动程序一般要能执行两个基本任务,一是:系统调用,如read/write;一是中断响应。
用户空间和内核空间:这是操作系统原理的概念,只要不是专门研究这两个名词的概念,就不需要深入研究它们,只需有个大概的理解就可以。可以这样理解,比如4G的内存,0-2G的空间是用户空间,最后1G用作内核,内核空间是用来运行内核相关程序的空间一部分驱动程序就是运行在内核空间,一般的用户不需要接触这部分;用户空间是用来运行用户应用程序的空间。
堆栈的概念:这里不去讲清楚堆栈的概念,想弄清楚这个概念,可以做进一步的查阅。这里讲一下栈,栈是用来保存函数调用历史以及当前活动函数中的自动变量的,对栈的理解能对解系统异常问题有很大的帮助。

EXPORT_SYSMBOL(name)
EXPORT_SYSMBOL_GPL(name)以上两个宏主要是用于将给定的符号导出到模块之外,在驱动程序中很常见。
在用户空间中编写驱动程序:我个人理解,其实这是android中hal层的一个最原始的思想。在用户空间编写驱动程序,可以用于研究一个新的设备驱动程序,因为此时不用担心整个系统被挂起,一旦稳定之后就可以把驱动程序封装到内核空间中。而在android系统中,为了保护硬件设备厂家的知识产权,它把硬件厂家的驱动程序直接放着hal层中,这样硬件厂家就不需要开放他们的源码,只需提供二进制文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: