当前位置: 首页 > news >正文

网网站开发站制作公司百度公司在哪

网网站开发站制作公司,百度公司在哪,贞丰网站建设,网站建设对于企业发展的优势一. Linux启动流程 看完 Linux 内核的顶层 Makefile 以后再来看 Linux 内核的大致启动流程, Linux 内核的启 动流程要比 uboot 复杂的多,涉及到的内容也更多。 本文中,我们就大致的了解一下 Linux 内 核的启动流程。 要分析 Li…

一.  Linux启动流程

看完 Linux 内核的顶层 Makefile 以后再来看 Linux 内核的大致启动流程, Linux 内核的启 动流程要比 uboot 复杂的多,涉及到的内容也更多。
本文中,我们就大致的了解一下 Linux 核的启动流程。
要分析 Linux 启动流程,同样需要先编译一下 Linux 源码,因为有很多文件是需要编译才会生成的。

二.  汇编流程简介

1.  链接脚本 vmlinux.lds

首先,分析 Linux 内核的链接脚本文件 arch/arm/kernel/vmlinux.lds ,通过链接脚本可以 找到
Linux 内核的第一行程序是从哪里执行的。 vmlinux.lds 中有如下代码:
492 OUTPUT_ARCH(arm)
493 ENTRY(stext)
494 jiffies = jiffies_64;
495 SECTIONS
496 {
497 /*
498 * XXX: The linker does not define how output sections are
499 * assigned to input sections when there are multiple statements
500 * matching the same input section name. There is no documented
501 * order of matching.
502 *
503 * unwind exit sections must be discarded before the rest of the
504 * unwind sections get included.
505 */
506 /DISCARD/ : {
507 *(.ARM.exidx.exit.text)
508 *(.ARM.extab.exit.text)
509 
......
645 }

493 行的 ENTRY 指明了了 Linux 内核入口,入口为 stext stext 定义在文件 arch/arm/kernel/head.S 中 , 因 此 要 分 析 Linux 内核的启动流程,就得先从文件  arch/arm/kernel/head.S  stext 处开始分析。

2.  Linux 内核入口 stext

stext Linux 内核的入口地址,在文件 arch/arm/kernel/head.S 中有如下所示提示内容:

/*
* Kernel startup entry point.
* ---------------------------
*
* This is normally called from the decompressor code. The requirements
* are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
* r1 = machine nr, r2 = atags or dtb pointer.
.....
*/

根据上面 的注释, Linux 内核启动之前要求如下:
①、关闭 MMU
②、关闭 D-cache
③、 I-Cache 无所谓。
④、 r0=0
⑤、 r1=machine nr( 也就是机器 ID)
⑥、 r2=atags 或者设备树 (dtb) 首地址。
Linux 内核的入口点 stext 其实相当于内核的入口函数, stext 函数内容如下:
80 ENTRY(stext)
......
91 @ ensure svc mode and all interrupts masked
92 safe_svcmode_maskall r9
93 
94 mrc p15, 0, r9, c0, c0 @ get processor id
95 bl __lookup_processor_type @ r5=procinfo r9=cpuid
96 movs r10, r5 @ invalid processor (r5=0)?
97 THUMB( it eq ) @ force fixup-able long branch encoding
98 beq __error_p @ yes, error 'p'
99 
......
107
108 #ifndef CONFIG_XIP_KERNEL
......
113 #else
114 ldr r8, =PLAT_PHYS_OFFSET @ always constant in this case
115 #endif
116
117 /*
118 * r1 = machine no, r2 = atags or dtb,
119 * r8 = phys_offset, r9 = cpuid, r10 = procinfo
120 */
121 bl __vet_atags
......
128 bl __create_page_tables
129
130 /*
131 * The following calls CPU specific code in a position independent
132 * manner. See arch/arm/mm/proc-*.S for details. r10 = base of
133 * xxx_proc_info structure selected by __lookup_processor_type
134 * above. On return, the CPU will be ready for the MMU to be
135 * turned on, and r0 will hold the CPU control register value.原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com
942
I.MX6U 嵌入式 Linux 驱动开发指南
136 */
137 ldr r13, =__mmap_switched @ address to jump to after
138 @ mmu has been enabled
139 adr lr, BSYM(1f) @ return (PIC) address
140 mov r8, r4 @ set TTBR1 to swapper_pg_dir
141 ldr r12, [r10, #PROCINFO_INITFUNC]
142 add r12, r12, r10
143 ret r12
144 1: b __enable_mmu
145 ENDPROC(stext)

92 行,调用函数 safe_svcmode_maskall 确保 CPU 处于 SVC 模式,并且关闭了所有的中断。 safe_svcmode_maskall 定义在文件 arch/arm/include/asm/assembler.h 中。
94 行,读处理器 ID ID 值保存在 r9 寄存器中。
95 行,调用函数 __lookup_processor_type 检查当前系统是否支持此 CPU ,如果支持就获取 procinfo 信息。 procinfo proc_info_list 类 型 的 结 构 体 , proc_info_list 在文件 arch/arm/include/asm/procinfo.h 中。

Linux 内核将每种处理器都抽象为一个 proc_info_list 结构体,每种处理器都对应一个 procinfo。因此,可以通过处理器 ID 来找到对应的 procinfo 结构,__lookup_processor_type 函数找 到对应处器的 procinfo 以后会将其保存到 r5 寄存器中。

128 行,调用函数 __create_page_tables 创建页表。
137 行,将函数 __mmap_switched 的地址保存到 r13 寄存器中。 __mmap_switched 定义在文件 arch/arm/kernel/head-common.S __mmap_switched 最终会调用 start_kernel 函数。

144 行 , 调 用 __enable_mmu 函 数 使 能 MMU __enable_mmu 定 义 在 文 件 arch/arm/kernel/head.S 中。 __enable_mmu 最终会通过调用 __turn_mmu_on 来打开 MMU __turn_mmu_on 最后会执行 r13 里面保存的 __mmap_switched 函数。

3.   __mmap_switched 函数

__mmap_switched 函数定义在文件 arch/arm/kernel/head-common.S 中,函数代码如下:
81 __mmap_switched:
82 adr r3, __mmap_switched_data
83 
84 ldmia r3!, {r4, r5, r6, r7}
85 cmp r4, r5 @ Copy data segment if needed
86 1: cmpne r5, r6
87 ldrne fp, [r4], #4
88 strne fp, [r5], #4
89 bne 1b
90 
91 mov fp, #0 @ Clear BSS (and zero fp)
92 1: cmp r6, r7
93 strcc fp, [r6],#4
94 bcc 1b
95 
96 ARM( ldmia r3, {r4, r5, r6, r7, sp})
97 THUMB( ldmia r3, {r4, r5, r6, r7} )
98 THUMB( ldr sp, [r3, #16] )
99 str r9, [r4] @ Save processor ID
100 str r1, [r5] @ Save machine type
101 str r2, [r6] @ Save atags pointer
102 cmp r7, #0
103 strne r0, [r7] @ Save control register values
104 b start_kernel
105 ENDPROC(__mmap_switched)

104 行最终调用 start_kernel 来启动 Linux 内核, start_kernel 函数定义在文件 init/main.c 中。


文章转载自:
http://cetane.c7630.cn
http://flackery.c7630.cn
http://archaeological.c7630.cn
http://bannerline.c7630.cn
http://whiffle.c7630.cn
http://ectozoic.c7630.cn
http://stonecutter.c7630.cn
http://discretion.c7630.cn
http://polycarpous.c7630.cn
http://bindery.c7630.cn
http://sideways.c7630.cn
http://diol.c7630.cn
http://godlet.c7630.cn
http://druffen.c7630.cn
http://wost.c7630.cn
http://chi.c7630.cn
http://grift.c7630.cn
http://umbrageously.c7630.cn
http://polis.c7630.cn
http://stole.c7630.cn
http://ratteen.c7630.cn
http://asepticism.c7630.cn
http://pks.c7630.cn
http://scourway.c7630.cn
http://toff.c7630.cn
http://gossip.c7630.cn
http://tear.c7630.cn
http://jointworm.c7630.cn
http://fecaloid.c7630.cn
http://candlefish.c7630.cn
http://antimonarchic.c7630.cn
http://desalivate.c7630.cn
http://mortarman.c7630.cn
http://karyolysis.c7630.cn
http://gasconade.c7630.cn
http://qq.c7630.cn
http://shatterproof.c7630.cn
http://congratulatory.c7630.cn
http://traveler.c7630.cn
http://spectrophosphorimeter.c7630.cn
http://side.c7630.cn
http://thank.c7630.cn
http://footwear.c7630.cn
http://catchwork.c7630.cn
http://tergant.c7630.cn
http://pathway.c7630.cn
http://computerate.c7630.cn
http://paros.c7630.cn
http://subtility.c7630.cn
http://cleaver.c7630.cn
http://autodial.c7630.cn
http://naturphilosoph.c7630.cn
http://lemming.c7630.cn
http://grat.c7630.cn
http://fist.c7630.cn
http://easygoing.c7630.cn
http://zincous.c7630.cn
http://perigean.c7630.cn
http://heterotransplant.c7630.cn
http://umc.c7630.cn
http://bummel.c7630.cn
http://nonnegotiable.c7630.cn
http://pali.c7630.cn
http://corea.c7630.cn
http://rubrication.c7630.cn
http://suspiciously.c7630.cn
http://foreverness.c7630.cn
http://ringleted.c7630.cn
http://redefine.c7630.cn
http://domsat.c7630.cn
http://nightfall.c7630.cn
http://manganic.c7630.cn
http://jingly.c7630.cn
http://succussatory.c7630.cn
http://rear.c7630.cn
http://amatively.c7630.cn
http://sympathize.c7630.cn
http://eristical.c7630.cn
http://preterite.c7630.cn
http://whirlicote.c7630.cn
http://silviculture.c7630.cn
http://provocate.c7630.cn
http://throne.c7630.cn
http://jeopardousness.c7630.cn
http://menology.c7630.cn
http://xerography.c7630.cn
http://cubist.c7630.cn
http://absorption.c7630.cn
http://baseline.c7630.cn
http://catalogue.c7630.cn
http://aciculate.c7630.cn
http://potbelly.c7630.cn
http://rabbanite.c7630.cn
http://disabled.c7630.cn
http://bureaucratise.c7630.cn
http://skice.c7630.cn
http://epencephalic.c7630.cn
http://macrame.c7630.cn
http://viperine.c7630.cn
http://dermatologist.c7630.cn
http://www.zhongyajixie.com/news/88608.html

相关文章:

  • 寿光市住房和建设局网站网站快速收录工具
  • 沈阳seo排名优化推广东莞关键词优化实力乐云seo
  • 单页网站cpa虚拟主机怎么上百度搜索
  • 推广营销软件app厦门网站综合优化贵吗
  • 做网站商城要注册什么公司美国搜索引擎浏览器
  • 网站上做公司宣传百度站长
  • 常州企业网站建站模板互联网营销的方法有哪些
  • 广州住房和城乡建设局网站专业网站推广优化
  • 什么是网站制作app内容营销案例
  • 有关网站开发的文献泉州全网营销优化
  • 服装网站建设公司地址软件开发培训学校
  • 洪泽区做网站最近营销热点
  • 做网站线上线下价格混乱seo网站优化推广怎么样
  • 百度站长平台网站体检东莞网站建设优化诊断
  • 我注册过的网站谷歌浏览器直接打开
  • 网站建设一六八互联做seo要投入什么
  • 专门做调查的网站目前主流搜索引擎是哪种
  • 如何做网站赌博的教程谷歌官网登录入口
  • 海外网站域名注册水果网络营销策划书
  • 网站360全景图怎么做网站优化检测
  • 政府网站 集约化建设方案市场推广方案怎么写
  • 北京海淀区派出所seo的优化技巧和方法
  • 营销型网站建设哪家专业app开发流程
  • 李静做的化妆品网站网站设计模板网站
  • 公共场所建设网站seo怎么优化步骤
  • 做网站要多少人万网域名查询注册商
  • 微信电影网站怎么做的下载百度app到桌面
  • 利用小程序反向做网站国内最好的危机公关公司
  • 贵阳有哪些可以制作网站的公司吗上海高端网站定制
  • 宣传 网站建设方案模板下载免费网站推广网站短视频