1.1.2内核入门-高效的阅读Linux内核设备驱动

内核开发在很大程度上并不是重新造“轮子"的过程,而是深入理解并尽量复用现有的内核设计框架,然后参照相似的功能模块去添加或改写某项需要的功能。在对内核整体框架以及某些子系统融会贯通以后,我们才有可能站在巨人的肩膀上去改进框架本身,实现自主创新。如果过分强调不必要的“自主创新”,可能会让内核的可维护性变差,最终结果反而得不偿失。


1.设备驱动入口

模块的入口函数一般会使用
module_init(modname_init)进行声明。

#define module_init(x)     __initcall(x);              //include/linux/init.h  

2.子系统入口

内核选项的解析完成之后,各个子系统的初始化即进入第二部分一入口函数的调用。通常USB、PCI这样的子系统都会有一个名为subsys_initcall的入口,如果你选择它们作为研究内核的切入点,那么就请首先找到它。

3.内核入口

初始入口(第一入口)是体系结构相关的,在汇编语言代码里面;
而通用入口(第二入口)是体系结构无关的,在C语言里面实际上就是init/main.c里面的start_kernel()这个do_initcalls()就是我们需要寻找的函数了,在这个函数中执行所有使用module_init()声明的函数
 

start_kernel  
	-> rest_init();
		-> kernel_thread(kernel_init, NULL, CLONE_FS);
			-> kernel_init()
				-> kernel_init_freeable();
					-> do_basic_setup();
						-> do_initcalls();  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值