内核代码分析
内核启动流程 arch/arm/kernel/head.s
(1) 处理uboot传入的参数
0.读寄存器得到CPU ID,判断内核是否支持这个CPU
1.判断是否支持这个单板,(启动内核时传入的机器ID)
2.建立页表
3.使能MMU
4.调到start_kernel_____第一个C函数
start_kernel
setup_arch 解析uboot传入的启动参数
setup_command_line 解析uboot传入的启动参数
parse_early_param
do_early_param
从_setup_start到_setup_end 调用early函数
——unknown_bootoption
obsolute_checksetup
从_setup_start到_setup_end,调用非early函数
rest_init
kernel_init
prepare_namesapce
mount_root 挂接根文件系统 root=/dev/mtdblock3
类似uboot,在代码里写死分区信息 smdk_default_nand_part[]=[0]bootloader [1]params [3]root [2]kernel
init_post
//执行应用程序——run_init_process 如(“/sbin/init”)("etc/init")
start_kernel
setup_arch 解析uboot传入的启动参数
setup_command_line 解析uboot传入的启动参数
parse_early_param
do_early_param
从_setup_start到_setup_end 调用early函数
——unknown_bootoption
obsolute_checksetup
从_setup_start到_setup_end,调用非early函数
rest_init
kernel_init
prepare_namesapce
mount_root 挂接根文件系统 root=/dev/mtdblock3
类似uboot,在代码里写死分区信息 smdk_default_nand_part[]=[0]bootloader [1]params [3]root [2]kernel
init_post
//执行应用程序——run_init_process 如(“/sbin/init”)("etc/init")
start_kernel
setup_arch 解析uboot传入的启动参数
setup_command_line 解析uboot传入的启动参数
parse_early_param
do_early_param
从_setup_start到_setup_end 调用early函数
——unknown_bootoption
obsolute_checksetup
从_setup_start到_setup_end,调用非early函数
rest_init
kernel_init
prepare_namesapce
mount_root 挂接根文件系统 root=/dev/mtdblock3
类似uboot,在代码里写死分区信息 smdk_default_nand_part[]=[0]bootloader [1]params [3]root [2]kernel
init_post
//执行应用程序——run_init_process 如(“/sbin/init”)("etc/init")