您的位置 首页 设计

ARM Linux发动进程学习

linux根目录中的vmlinux.o为arm-linux-ldlink得到的一个elf格式的文件,这个文件包含kernel下的head.o+driver+MM+FS+net等其他o文件。使…

linux根目录中的vmlinux.o为arm-linux-ld link得到的一个elf格局的文件,这个文件包括kernel下的head.o+driver+MM+FS+net等其他

o文件。

运用kernel目录下的vmlinux.lds link脚本生成vmlinux elf格局的可履行文件

Vmlinux运用arm-linux-objcopy生成bin格局的文件image。只是包括指令和数据。

能够load到sdram的0x30008000地址运转。为什么非要load到这个地址呢?经过盯梢

Head.S履行,发现在__lookup_machine_type函数中,假如load地址不是0x30008000,

Ldmia r3, {r4, r5, r6}会呈现过错,r4的内容呈现过错

为了剖析linux发动进程,生成一个最小的kernel,然后运用AXD+JTAG来进行单步盯梢

生成一个tiny kernel运用axd盯梢500+K的bin文件,load到0x30008000地址进行盯梢

首要履行的代码为compressed head.S中的start.S unzip了一些代码,从头放入0x30008000,然后再次从0x30008000地址从头履行新的代码

问了得到kernel中的函数虚拟地址,需求生成system.map文件。

下面的指令能够得到system.map

NM=arm-linux-nm/bin/sh /hdd/linux-2.6.28/scripts/mksysmap vmlinux System.map

ARM Linux发动进程:

在CPU履行kernel中的第一个指令之前,bootloader有必要完结一些作业:

1初始化CPU进入SVC形式封闭IRQ/FIQ disable

2初始化一个串口kernel会输出调试信息

Kernel中的head.S流程:

保证ARM CPU运转在SVC形式而且IRQ disable

从协处理器中得到CPU的ID

Bl指令调用__lookup_processor_type函数查找proc info lds link脚本依据autoconf.h中装备的CPU类型,把proc-arm920.S文件中的信息存放到__proc_info_begin和__proc_info_end之间,依据CPU的ID查找CPU类型是否支撑

Bl调用__lookup_machine_type,依据arch number查找。方法相似proc的查找。运用MACHINE_START来把mach info经过lds脚本存放在.arch.info.init。mach-smdk2440.c中的内容

Bl调用__vet_atags查找bootloader传入的tags地址

Bl调用__create_page_tables树立pagetable

回来地址设置为__enable_mmu

履行__arm920_setup

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/277369.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部