{"id":345,"date":"2018-03-14T09:43:50","date_gmt":"2018-03-14T01:43:50","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=345"},"modified":"2018-03-14T09:43:50","modified_gmt":"2018-03-14T01:43:50","slug":"linux%e7%9a%84arch-arm-mm-proc-arch-s","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=345","title":{"rendered":"linux\u7684arch\/arm\/mm\/proc-(arch).S"},"content":{"rendered":"<div>\u8fd9\u91cc\u4ee5arch\/arm\/mm\/proc-v6.S\u505a\u4f8b\u5b50\uff1a<\/div>\n<div><\/div>\n<div>ENTRY(cpu_v6_proc_init)<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>ENTRY(cpu_v6_proc_fin)<br \/>\nstmfd\u00a0\u00a0\u00a0\u00a0 sp!, {lr}<br \/>\ncpsid\u00a0\u00a0\u00a0\u00a0 if\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ disable interrupts<br \/>\nbl\u00a0\u00a0\u00a0\u00a0 v6_flush_kern_cache_all<br \/>\nmrc\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c1, c0, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ ctrl register<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r0, r0, #0x1000\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ &#8230;i&#8230;&#8230;&#8230;&#8230;<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r0, r0, #0x0006\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ &#8230;&#8230;&#8230;&#8230;.ca.<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c1, c0, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ disable caches<br \/>\nldmfd\u00a0\u00a0\u00a0\u00a0 sp!, {pc}<\/p>\n<p>\/*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 cpu_v6_reset(loc)<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 Perform a soft reset of the system.\u00a0 Put the CPU into the<br \/>\n*\u00a0\u00a0\u00a0\u00a0 same state as it would be if it had been reset, and branch<br \/>\n*\u00a0\u00a0\u00a0\u00a0 to what would be the reset vector.<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 &#8211; loc\u00a0\u00a0 &#8211; location to jump to for soft reset<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 It is assumed that:<br \/>\n*\/<br \/>\n.align\u00a0\u00a0\u00a0\u00a0 5<br \/>\nENTRY(cpu_v6_reset)<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, r0<\/p>\n<p>\/*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 cpu_v6_do_idle()<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 Idle the processor (eg, wait for interrupt).<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 IRQs are already disabled.<br \/>\n*\/<br \/>\nENTRY(cpu_v6_do_idle)<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r1, c7, c0, 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ wait for interrupt<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>ENTRY(cpu_v6_dcache_clean_area)<br \/>\n#ifndef TLB_CAN_READ_FROM_L1_CACHE<br \/>\n1:\u00a0\u00a0\u00a0\u00a0 mcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c7, c10, 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ clean D entry<br \/>\nadd\u00a0\u00a0\u00a0\u00a0 r0, r0, #D_CACHE_LINE_SIZE<br \/>\nsubs\u00a0\u00a0\u00a0\u00a0 r1, r1, #D_CACHE_LINE_SIZE<br \/>\nbhi\u00a0\u00a0\u00a0\u00a0 1b<br \/>\n#endif<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>\/*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 cpu_arm926_switch_mm(pgd_phys, tsk)<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 Set the translation table base pointer to be pgd_phys<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 &#8211; pgd_phys &#8211; physical address of new TTB<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 It is assumed that:<br \/>\n*\u00a0\u00a0\u00a0\u00a0 &#8211; we are not using split page tables<br \/>\n*\/<br \/>\nENTRY(cpu_v6_switch_mm)<br \/>\n#ifdef CONFIG_MMU<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 r2, #0<br \/>\nldr\u00a0\u00a0\u00a0\u00a0 r1, [r1, #MM_CONTEXT_ID]\u00a0\u00a0\u00a0\u00a0 @ get mm-&gt;context.id<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r0, r0, #TTB_FLAGS<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r2, c7, c5, 6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ flush BTAC\/BTB<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r2, c7, c10, 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ drain write buffer<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c2, c0, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ set TTB 0<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r1, c13, c0, 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ set context ID<br \/>\n#endif<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>\/*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 cpu_v6_set_pte_ext(ptep, pte, ext)<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 Set a level 2 translation table entry.<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 &#8211; ptep\u00a0 &#8211; pointer to level 2 translation table entry<br \/>\n*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 (hardware version is stored at -1024 bytes)<br \/>\n*\u00a0\u00a0\u00a0\u00a0 &#8211; pte\u00a0\u00a0 &#8211; PTE value to store<br \/>\n*\u00a0\u00a0\u00a0\u00a0 &#8211; ext\u00a0\u00a0\u00a0\u00a0 &#8211; value for extended PTE bits<br \/>\n*\/<br \/>\narmv6_mt_table cpu_v6<\/p>\n<p>ENTRY(cpu_v6_set_pte_ext)<br \/>\n#ifdef CONFIG_MMU<br \/>\narmv6_set_pte_ext cpu_v6<br \/>\n#endif<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr<\/p>\n<p>cpu_v6_name:<br \/>\n.asciz\u00a0\u00a0\u00a0\u00a0 &#8220;ARMv6-compatible processor&#8221;<br \/>\n.align<\/p>\n<p>.section &#8220;.text.init&#8221;, #alloc, #execinstr<\/p>\n<p>\/*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 __v6_setup<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 Initialise TLB, Caches, and MMU state ready to switch the MMU<br \/>\n*\u00a0\u00a0\u00a0\u00a0 on.\u00a0 Return in r0 the new CP15 C1 control register setting.<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 We automatically detect if we have a Harvard cache, and use the<br \/>\n*\u00a0\u00a0\u00a0\u00a0 Harvard cache control instructions insead of the unified cache<br \/>\n*\u00a0\u00a0\u00a0\u00a0 control instructions.<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 This should be able to cover all ARMv6 cores.<br \/>\n*<br \/>\n*\u00a0\u00a0\u00a0\u00a0 It is assumed that:<br \/>\n*\u00a0\u00a0\u00a0\u00a0 &#8211; cache type register is implemented<br \/>\n*\/<br \/>\n__v6_setup: \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*\u521d\u59cb\u5316v6\u5904\u7406\u5668\uff0cTLB\/CACHE\uff0c\u5207\u6362\u5230MMU on*\/<br \/>\n#ifdef CONFIG_SMP<br \/>\nmrc\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c1, c0, 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ Enable SMP\/nAMP mode<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r0, r0, #0x20<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c1, c0, 1<br \/>\n#endif<\/p>\n<p>mov\u00a0\u00a0\u00a0\u00a0 r0, #0<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c7, c14, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ clean+invalidate D cache \u00a0\/*\u6e05\u695acache\u3001buffer*\/<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c7, c5, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ invalidate I cache<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c7, c15, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ clean+invalidate cache<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c7, c10, 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ drain write buffer<br \/>\n#ifdef CONFIG_MMU<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c8, c7, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ invalidate I + D TLBs \u00a0 \u00a0 \u00a0\/*\u4f7f\u80fdTLB*\/<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c2, c0, 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ TTB control register<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r4, r4, #TTB_FLAGS<br \/>\nmcr\u00a0\u00a0\u00a0\u00a0 p15, 0, r4, c2, c0, 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ load TTB1<br \/>\n#endif \/* CONFIG_MMU *\/<br \/>\nadr\u00a0\u00a0\u00a0\u00a0 r5, v6_crval \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*\u8bbe\u7f6e\u5904\u7406\u65b9\u6cd5v6_crval\uff0c\u770b\u4e0b\u9762*\/<br \/>\nldmia\u00a0\u00a0\u00a0\u00a0 r5, {r5, r6}<br \/>\nmrc\u00a0\u00a0\u00a0\u00a0 p15, 0, r0, c1, c0, 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ read control register<br \/>\nbic\u00a0\u00a0\u00a0\u00a0 r0, r0, r5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ clear bits them<br \/>\norr\u00a0\u00a0\u00a0\u00a0 r0, r0, r6\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ set them<br \/>\nmov\u00a0\u00a0\u00a0\u00a0 pc, lr\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ return to head.S:__ret \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*\u4ecehead.S\u7684 adr\u00a0\u00a0\u00a0\u00a0 lr, __enable_mmu \u77e5\u9053\uff0c\u6b64\u65f6lr\u4e3a__enable_mmu\uff0c\u5373\u8df3\u8f6c\u5230__enable_mmu\u5904\u6267\u884c\u3002*\/<\/p>\n<p>\/*<br \/>\n*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 V X F\u00a0\u00a0 I D LR<br \/>\n* &#8230;. &#8230;E PUI. .T.T 4RVI ZFRS BLDP WCAM<br \/>\n* rrrr rrrx xxx0 0101 xxxx xxxx x111 xxxx &lt; forced<br \/>\n*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 110\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0011 1.00 .111 1101 &lt; we want<br \/>\n*\/<br \/>\n.type\u00a0\u00a0\u00a0\u00a0 v6_crval, #object \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*\u5728\u4e0a\u9762__v6_setup\u8bbe\u7f6e\u597d\u4f9b\u4ee5\u540e\u7528\u3002*\/<br \/>\nv6_crval:<br \/>\ncrval\u00a0\u00a0\u00a0\u00a0 clear=0x01e0fb7f, mmuset=0x00c0387d, ucset=0x00c0187c<\/p>\n<p>.type\u00a0\u00a0\u00a0\u00a0 v6_processor_functions, #object<br \/>\nENTRY(v6_processor_functions)<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 v6_early_abort<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 pabort_noifar<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 cpu_v6_proc_init<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 cpu_v6_proc_fin<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 cpu_v6_reset<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 cpu_v6_do_idle<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 cpu_v6_dcache_clean_area<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 cpu_v6_switch_mm<br \/>\n.word\u00a0\u00a0\u00a0\u00a0 cpu_v6_set_pte_ext<br \/>\n.size\u00a0\u00a0\u00a0\u00a0 v6_processor_functions, . &#8211; v6_processor_functions<\/p>\n<p>.type\u00a0\u00a0\u00a0\u00a0 cpu_arch_name, #object<br \/>\ncpu_arch_name:<br \/>\n.asciz\u00a0\u00a0\u00a0\u00a0 &#8220;armv6&#8221;<br \/>\n.size\u00a0\u00a0\u00a0\u00a0 cpu_arch_name, . &#8211; cpu_arch_name<\/p>\n<p>.type\u00a0\u00a0\u00a0\u00a0 cpu_elf_name, #object<br \/>\ncpu_elf_name:<br \/>\n.asciz\u00a0\u00a0\u00a0\u00a0 &#8220;v6&#8221;<br \/>\n.size\u00a0\u00a0\u00a0\u00a0 cpu_elf_name, . &#8211; cpu_elf_name<br \/>\n.align<\/p>\n<p>.section &#8220;.proc.info.init&#8221;, #alloc, #execinstr \u00a0 \/*<span style=\"color: #ff0000;\">\u53c2\u8003vmlinux.lds.S\uff0c\u53ef\u4ee5\u770b\u5230\u8fd9\u4e2a\u6bb5\u5bf9\u5e94__proc_info_begin\uff0c\u4ecehead-common.S\u77e5\u9053\uff0c__proc_info_begin\u662f\u7531__lookup_processor_type\u8fd9\u4e2a\u51fd\u6570\u8c03\u7528\uff0c\u4ece\u800c\u5f97\u5230\u5177\u4f53\u67d0\u4e2a\u5904\u7406\u5668\u7684\u4fe1\u606f\u3002<\/span>*\/<\/p>\n<p>\/*<br \/>\n* Match any ARMv6 processor core.<br \/>\n*\/<br \/>\n.type\u00a0\u00a0\u00a0\u00a0 __v6_proc_info, #object \u00a0 \u00a0 \u00a0\/*\u8fd9\u4e2a\u6bb5\u5c31\u5b9a\u4e49\u4e86\u8fd9\u4e2a\u7ed3\u6784\u4f53\uff0c\u5bf9\u5e94procinfo.h\u91cc\u9762\u7684proc_info_list\u7ed3\u6784*\/<br \/>\n__v6_proc_info:<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 0x0007b000 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*cpu_val*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 0x0007f000 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*cpu_mask*\/<br \/>\n.long\u00a0\u00a0 PMD_TYPE_SECT | \\ \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*__cpu_mm_mmu_flags*\/<br \/>\nPMD_SECT_BUFFERABLE | \\<br \/>\nPMD_SECT_CACHEABLE | \\<br \/>\nPMD_SECT_AP_WRITE | \\<br \/>\nPMD_SECT_AP_READ<br \/>\n.long\u00a0\u00a0 PMD_TYPE_SECT | \\ \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*__cpu_io_mmu_flags*\/<br \/>\nPMD_SECT_XN | \\<br \/>\nPMD_SECT_AP_WRITE | \\<br \/>\nPMD_SECT_AP_READ<br \/>\nb\u00a0\u00a0\u00a0\u00a0 __v6_setup \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*__cpu_flush\uff0c\u770b\u4e0a\u9762\u7684__v6_setup*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 cpu_arch_name \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*arch_name*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 cpu_elf_name \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*elf_name*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_JAVA \u00a0 \/*elf_hwcap*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 cpu_v6_name \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*cpu_name*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 v6_processor_functions \u00a0 \u00a0 \u00a0 \/*proc*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 v6wbi_tlb_fns \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*tlb*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 v6_user_fns \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*user*\/<br \/>\n.long\u00a0\u00a0\u00a0\u00a0 v6_cache_fns \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*cache*\/<br \/>\n.size\u00a0\u00a0\u00a0\u00a0 __v6_proc_info, . &#8211; __v6_proc_info \/*\u5927\u5c0f*\/<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u91cc\u4ee5arch\/arm\/mm\/proc-v6.S\u505a\u4f8b\u5b50\uff1a ENTRY(cpu_v6_proc_init) mo &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[9,265,243,244],"class_list":["post-345","post","type-post","status-publish","format-standard","hentry","category-linuxandroid","tag-linux","tag-proc-arch-s","tag-243","tag-244"],"views":1863,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=345"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/345\/revisions"}],"predecessor-version":[{"id":346,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/345\/revisions\/346"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=345"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}