当前位置:  技术问答>linux和unix

加载内核模块运行helloworld与应用程序helloworld执行过程的区别?

    来源: 互联网  发布时间:2016-09-10

    本文导语:  比如下面两个helloworld #include  MODULE_LICENSE("GPL"); int init_module(void) {    printk("Hello World!n");  return 0; } void cleanup_module(void) {  printk("Good Bye!n"); } #include  int main() {    printf("hello world!");    return 0; } 第二个...

比如下面两个helloworld

#include 

MODULE_LICENSE("GPL");

int init_module(void)
{
 
 printk("Hello World!n");
 return 0;
}

void cleanup_module(void)
{
 printk("Good Bye!n");
}




#include 
int main()
{
   printf("hello world!");
   return 0;
}


第二个我还稍微知道一些,首先是预编译 编译 汇编 然后和库函数链接成为一个可执行文件,执行它时,系统为它新开一个进程 分配虚拟地址空间 然后。。。
那么第一个是怎么一个过程呢?

|
第一个是内核模块

 不同于大部分的小的和中型的应用程序从头至尾处理一个单个任务, 每个内核模块只注册自己以便来服务将来的请求, 并且它的初始化函数立刻终止. 换句话说, 模块初始化函数的任务是为以后调用模块的函数做准备; 好像是模块说, " 我在这里, 这是我能做的."模块的退出函数( 例子里是 hello_exit )就在模块被卸载时调用. 它好像告诉内核, "我不再在那里了, 不要要求我做任何事了."这种编程的方法类似于事件驱动的编程, 但是虽然不是所有的应用程序都是事件驱动的, 每个内核模块都是. 另外一个主要的不同, 在事件驱动的应用程序和内核代码之间, 是退出函数: 一个终止的应用程序可以在释放资源方面懒惰, 或者完全不做清理工作, 但是模块的退出函数必须小心恢复每个由初始化函数建立的东西, 否则会保留一些东西直到系统重启.

偶然地, 卸载模块的能力是你将最欣赏的模块化的其中一个特色, 因为它有助于减少开发时间; 你可测试你的新驱动的连续的版本, 而不用每次经历漫长的关机/重启周期.

作为一个程序员, 你知道一个应用程序可以调用它没有定义的函数: 连接阶段使用合适的函数库解决了外部引用. printf 是一个这种可调用的函数并且在 libc 里面定义. 一个模块, 在另一方面, 只连接到内核, 它能够调用的唯一的函数是内核输出的那些; 没有库来连接.在 hello.c 中使用的 printk 函数, 例如, 是在内核中定义的 printf 版本并且输出给模块. 它表现类似于原始的函数, 只有几个小的不同, 首要的一个是缺乏浮点的支持. 

    
 
 

您可能感兴趣的文章:

  • 加载helloworld模块失败请高手帮忙!
  • [求教]内核加载模块后,这部分内容编译在内核里的吗?
  • 我下载了一个驱动,在2.4内核编译后用insmod加载说内核版本不一样?
  • intel e1000网卡无法加载,内核是2.4.28,想重新编译内核,应该注意哪些步骤!
  • 升级内核之后,模块加载问题
  • 怎么给内核加载自己编写的模块
  • 求救!!编译内核后,加载时出错。
  • linux2.6内核 如何自动加载当前所需要的模块
  • 2.4内核编译好的.o虚拟设备怎么在2.6下加载啊
  • 遇到一个很棘手的问题:内核模块不能加载
  • 请问我要加载内核模块 ipip.o 怎么做
  • 如何查看Linux静态加载了哪些内核
  • 有没有什么办法能够查询到某个内核模块程序加载之后的运行情况?
  • 内核模块一加载计算机就死机,如何调试
  • 急:内核模块加载时出现unresolved symbol错误
  • 急:加载内核模块时出现unresolved symbol错误
  • 内核模块加载成功,但设备号申请不到
  • 加载linux内核的问题
  • fc3 怎么定制内核,让它启动的时候少加载一些模块
  • 如果加载的内核模块出错了,怎么卸载??
  • 内核模块加载时insmod:error inserting 'XXX.ko':-136704000 Success
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问如何设置才能在linux启动时自动加载其他应用程序?
  • 请问如果要让uclinux一启动就加载我的应用程序,应该怎么设置呢?谢谢了
  • linux如何启动就加载应用程序?
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • 请教一下Linux的动态库加载方式(是启动加载还是运行加载?)
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 在线等待!请文中怎么使用WebLogc的类加载器加载一个类?
  • struts+spring+hibernate+jquery实现分页功能的几个基本类介绍(异步加载)
  • driver的静态加载和动态加载占用内存问题
  • 可执行程序加载动态库 和 动态库加载动态库 的动态库初始化的问题
  • vmware下加载了一个虚拟软驱镜像,如果设置第一启动项为软驱的话,软驱能正常加载运行。但如果我第一启动项不设为软驱,正常启动fedora12的话。
  • usbhid妨碍了系统自动加载我的usb驱动程序,求教解决 (主要是加载后设备的驱动被认作usbhid)
  • 问问lib加载的问题
  • linux生成(加载)动态库静态库和加载示例方法
  • 使用非root用户加载模块出错
  • linux网卡驱动加载异常
  • 要写一个Linux下的elf加载器需要哪些知识?
  • 加载混杂设备
  • js/css文件加载管理 uetjs
  • 如何加载硬盘?
  • 为何每次重启都要重新加载驱动模块?
  • JS文件加载优化 ControlJS
  • 无刷新动态加载数据与滚动条加载适合评论的jquery代码
  • jQuery数据延迟加载插件 DataLazyLoad


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3