内核、配置编译、启动流程


一、内核配置编译

1、配置:生成.config

①、make menuconfig
②、默认 arch/arm/configs 找到相似 xxx_defconfig -->make xxx_defconfig 执行完生成.config
③、使用厂家提供 cp xxxconfig .config 再 make menuconfig 配置

使得:
.config —> autoconf.h 源码目录下
.config —> auto.conf 顶层Makefile目录下

2、编译

①、make uImage
uImage 成分 :头部64k + 真正内核

依赖:
uImage : vmlinx (内核)
vmlinx:… 主要是两个文件 一个是 arch/arm/kernel/head.S 另一个是 arch/arm/kernel/vmlinux.lds
②、Makefile文件
obj - m/y += xx.o -------m:模块 y:编进内核
如: obj -m += ab.o | ab.o - objs := a.o b. o

二、启动流程

从uboot把内核拷到SDRAM后 首先会进行内核自解压再执行内核,处理uboot传入的参数(机器ID、环境参数)
执行内核过程:执行 arch/arm/kernel/head.S

①、判断是否支持此CPU __lookup_processor_type
②、判断是否支持此单板==看机器ID是否跟内核匹配 __lookup_machine_type 通过.arch.info.init段找到内核的nr(ID) 与uboot传递给R1的寄存器比较
③、建立页表
④、使能mmu
⑤、跳转 start_kernel 第一个c函数 (arch/arm/kernel/head-common.S)

start_kernel:

setup_arch              //处理uboot传入的启动参数
setup_command_line    //处理uboot传入的启动参数
rest_init
		kernel_thread(kernel_init) //内核线程
			 preare_namespace
				   mount_root //挂载根文件系统
		     initpost    //执行应用程序

内核:启动应用程序{
1、挂接根文件系统
2、启动第一个应用程序
}
1、挂接根文件系统mount yaffs:内部含有第一应用程序
2、内核启动第一个应用程序:

a:
	打开一个设备 open  (/dev/console ”)
	sys_dup(0);  
	sys_dup(0); //“复制”一个打开的文件号,使两个文件号都指向同一个文件      
	//第一个作为printf 二:scanf 三:err
b:
run_init_process(命令行init =xxx(linuxrc)或者/sbin/init或者..)  只执行一个,内部为死循环
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值