OK6410A 开发板 (八) 60 linux-5.11 OK6410A 异常相关初始化

arch/arm/kernel/head.S
77 ENTRY(stext)
arch/arm/kernel/traps.c

devicemaps_init
	void * vectors = early_alloc(PAGE_SIZE * 2);
	early_trap_init(vectors); 
		vectors_base = vectors;
		vectors_page = vectors;
		
		// 填充 vectors - vectors+0x1000-1
		vectors_base)[i] = 0xe7fddef1;
		memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start);
		
		// 填充 vectors+0x1000 - vectors+0x2000-1
		memcpy((void *)vectors + 0x1000, __stubs_start, __stubs_end - __stubs_start);
		
		kuser_init(vectors_base);
			int kuser_sz = __kuser_helper_end - __kuser_helper_start;
			
			// 覆盖 vectors+0x1000-kuser_sz - vectors+0x1000-1
			memcpy(vectors + 0x1000 - kuser_sz, __kuser_helper_start, kuser_sz);
			
			// 覆盖 vectors+0xfe0 -  vectors+0xfe4-1
			if (tls_emu || has_tls_reg) memcpy(vectors + 0xfe0, vectors + 0xfe8, 4);
			
		flush_icache_range(vectors, vectors + PAGE_SIZE * 2);


	...
	map.pfn = __phys_to_pfn(virt_to_phys(vectors));
	map.virtual = 0xffff0000;
	map.length = PAGE_SIZE;
	map.type = MT_HIGH_VECTORS;
	create_mapping(&map);

	map.pfn += 1;
	map.virtual = 0xffff0000 + PAGE_SIZE;
	map.length = PAGE_SIZE;
	map.type = MT_LOW_VECTORS;
	create_mapping(&map);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值