- ROM(Read Only Memory只读存储器),里面固化了初始化程序(可以理解成BIOS),帮我们检查硬件是否完好等。
- 然后从启动盘启动(这些代码由Grub2放置的),包括boot.img,实模式切换到保护模式,kernel.img等,最后kernel.img会启动我们的操作系统内核
- 内核启动start_kernel(),进行进程管理初始化INIT_TASK(init_task),中断初始化trap_init(),内存管理初始化mm_init(),调度模块初始化sched_init(),虚拟文件系统初始化init_rootfs(),最后调用的是rest_init().
- rest_init()中启动了用户态祖先1号进程kernel_init(SCM),内核态总管2号进程kthreadd,
- kernel_init结束后会使用initcalls机制来动态加载已经注册好了的对应产品的驱动初始化函数(注册的代码位置:对应产品的init.c,stDrvInitBeforeOsInit,stDrvFwd等阶段,_comware_initcall)。
- 网卡初始化主要的做的工作:分配subslotid并与将槽号排序,获取mac地址,初始化tagMessage结构体。
函数调用流程:
vsr2000_init_systeminit_post_pre()->
DRV_Init_SystemInit_Pre()->
DRV_ProductInit()->
DRV_PCI_Init()->
DRV_PCI_Slot_Init()[这个函数中会确定PCI扫描到的所有网卡的型号是否支持DRV_PCI_Device_Match(),如果支持,会在DRV_SetDevLinkAndPortInfo()中根据网卡型号来给对应的网卡各个回掉函数赋值,例如E1000_CardInit()].E1000_CardInit()啥时候调的?
->
DRV_PCI_Slot_Map()映射槽号并填充槽号->
最后获取uuid,设置桥mac并校验,加密写磁盘。 - 重点结构体:tagMessage,DRV_CARD_INFO_S,DRV_CARD_PORT_INFO_S.
[20211014.B64驱动培训]linux内核启动+驱动初始化+网卡初始化
最新推荐文章于 2022-04-11 19:07:58 发布
本文详细阐述了从ROM加载初始化程序到操作系统内核启动的过程,包括实模式到保护模式的转换、内核初始化函数的调用,以及用户态进程的启动。特别地,重点介绍了网卡初始化的步骤,如分配子slotid、获取MAC地址、初始化tagMessage结构体等,并解析了PCI设备扫描和驱动加载机制。最后,提到了获取UUID、设置桥MAC和磁盘加密写入的环节。
摘要由CSDN通过智能技术生成