• 首页
  • 中国
  • OK6410A 开发板 (八) 60 linux-5.11 OK6410A 异常相关初始化

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

2023-11-01 27浏览
百检网是一家专业的第三方检测平台,汇聚众多拥有权威资质的第三方检测机构为你提供一站式的检测服务,做检测就上百检网。百检网让检测从此检测,一份报告全国通用,专业值得信赖。

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);

百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台