xml地图|网站地图|网站标签 [设为首页] [加入收藏]

【奥门金沙手机娱乐网址】详解Linux启动过程中硬件模块的加载

时间:2019-10-17 14:02来源:计算机
阅读Linux内核运维代码的直白重力是小编想编写RTL8019AS的网卡驱动程序(2.4.18内核只辅助了CS8900A)。既然要写驱动,小编就想领会它是什么被加载的,好奇心促使笔者先去化解这么些主题

  阅读Linux内核运维代码的直白重力是小编想编写RTL8019AS的网卡驱动程序(2.4.18内核只辅助了CS8900A)。既然要写驱动,小编就想领会它是什么被加载的,好奇心促使笔者先去化解这么些主题材料。

  获得2.4.18的软件包,30000三个公文,小编不知怎么出手。所幸手头有如此三件工具助小编入门:

  1,一块移植好Linux的开辟板,通过它可以看出Linux运维进程打字与印刷的音信。

  2, google,英特网关于Linux的素材真是太多了!奥门金沙手机娱乐网址,!!

  3, Windows文件找寻引擎,通过它可以预知在那么些文件中打字与印刷出那么些音讯。

  非常快,小编就找到了Linux运行的总的入口,/arch/arm/boot/compressed/head.s。

  head.s完结的行事重大是底层寄存器、MMU的一部分设定以至kernel的解压缩。汇编文件中调用的C代码好些个位于该目录下misc.c文件,比方decompress_kernel。

  当然,那有的不是重要,head施行落成之后就跳到start_kernel(),那才是大家的首要所在,这些函数位于文件/init/main.c中。这几个文件是开行的主线!!!

  在start_kernel中,依次实践顺序早先话函数,这里具体小编尚未看,一贯到最后rest_init(),在这里个函数里运行了四个init线程,而主线程自身则踏入了IDLE状态。所以我们关怀一下init线程做了哪些业务,看文件最终init函数。

  在此个函数里面,先lock_kernel,然后调用do_basic_setup,在此个函数里面又是一堆的最早化,有三个函数要引起大家的引人瞩目:do_initcalls。看看它干了怎么着:(这件事后的事物在下文文件系统中等教育授)

以下是代码片段:
    static void __init do_initcalls(void)
  {
  initcall_t *call;
  call = &__initcall_start;
  do {
  (*call)( );
  call++;
  } while (call < &__initcall_end);
  /* Make sure there is no pending stuff from the initcall sequence */
  flush_scheduled_tasks();
  }

  不敢相信 无法相信,我们关怀的外场模块的驱动就是被这一段程序加载的。怎么回事?我们稳步来看:

  首先看__initcall_start和__initcall_end,找遍了装有C代码,未有它们的概念。后来在vmLinux-armv.lds.in文件中找到了它们:

以下是代码片段:
    __initcall_start = .;
  *(.initcall.init)
  __initcall_end = .;

奥门金沙手机娱乐网址 1

编辑:计算机 本文来源:【奥门金沙手机娱乐网址】详解Linux启动过程中硬件模块的加载

关键词:

  • 上一篇:没有了
  • 下一篇:没有了