文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>uclinux启动

uclinux启动

时间:2005-03-26  来源:wang1385

关于uClinux在ARM7上的启动分析

uclinux初始化---(1)

第零个文件 arch/armnommu/Makefile 

在这个文件中定义了你编译好的内核的入口的地址和MACHINE类型,一般是通过条件编译 

TEXTADDR = 0x10008000 这个值完全是根据cpu和内存状况确定的 

MACHINE      = your_processor 

 

指定连接文件 

LINKFLAGS :=-p -X -T arch/armnommu/vmlinux.lds 

 

替换vmlinux-$(PROCESSOR).lds.in中的TEXTADDR,生成实际需要的连接脚本 

arch/armnommu/vmlinux.lds: arch/armnommu/vmlinux-$(PROCESSOR).lds.in dummy 

ifeq ($(CONFIG_ARCH_DSC21),y) 

 @sed "s/TEXTADDR/$(TEXTADDR)/" <$< >tmp.ld 

 @sed "s/DATAADDR/$(DATAADDR)/" $@ 

 $(RM) tmp.ld 

else 

 @sed "s/TEXTADDR/$(TEXTADDR)/" <$< >$@  

endif 

 

一般连接脚本的前面几句是这样的 

ENTRY(stext)---------指定入口 

SECTIONS 

{ 

 . = $(TEXTADDR);-----设定入口的绝对地址 

第一个文件linux/arch/armnommu/kernel/head-armv.S 

#define K(a,b,c) ((a) << 24 | (b) << 12 | (c)) 

#ifndef CONFIG_UCLINUX 

设置符号swapper_pg_dir的地址 

  .globl SYMBOL_NAME(swapper_pg_dir) 

  .equ SYMBOL_NAME(swapper_pg_dir), TEXTADDR - 0x4000  

定义了一个宏,该宏可以获得swapper_pg_dir的地址 

  .macro pgtbl, reg, rambase 

  adr  eg, stext 

  sub  eg,  eg, #0x4000 

  .endm 

 

/* 

 * Since the page table is closely related to the kernel start address, we can convert the page table base address to the base address of the section 

 * containing both. 

 */ 

  .macro krnladr, rd, pgtable, rambase 

  bic  d, pgtable, #0x000ff000 

  .endm 

#endif 

 

/* 

 *  Kernel startup entry point. 

 * 

 * The rules are: 

 *  r0      - should be 0 

 *  r1      - unique architecture number 

 *  MMU     - off 

 *  I-cache - on or off 

 *  D-cache - off 

 * 

 * See linux/arch/arm/tools/mach-types for the complete list of numbers for r1. 

 */ 

.section ".text.init",#alloc,#execinstr 

  .type stext, #function  

   

  请注意,这里是入口点,而且此时r1中应该保存唯一的一个architecture number 

ENTRY(stext) 

 

保存r0寄存器的值????? 

  mov r12, r0 

  

 #if defined(CONFIG_ARCH_NETWINDER) 

。。。。。 

#endif 

#if defined(CONFIG_ARCH_L7200) 

  mov r1, #MACH_TYPE_L7200 

#elif defined(CONFIG_ARCH_INTEGRATOR) 

  mov r1, #MACH_TYPE_INTEGRATOR 

#elif defined(CONFIG_ARCH_P52) 

  mov r1, #MACH_TYPE_P52 

#elif defined(CONFIG_ARCH_SWARM) 

  mov r1, #MACH_TYPE_SWARM 

#elif defined(CONFIG_ARCH_SAMSUNG) 

  mov r1, #MACH_TYPE_SAMSUNG 

#endif 

前面预定义了部分的ARCH,如果匹配的上,R1中包含了architecture number 

 

其实系统复位之后,ARM就处于SVC 模式,而且禁止了FIQ IRQ, 的确如注视所说--make sure 

  mov r0, #F_BIT | I_BIT | MODE_SVC @ make sure svc mode 

  msr cpsr_c, r0   @ and all irqs disabled 

 

使用的是atmel的arm处理器吗???跳过去吧 

#if defined(CONFIG_ARCH_ATMEL) 

。。。。。 

#endif 

又来,使用的是samsumg的arm处理器吗???跳过去吧 

#if defined(CONFIG_ARCH_SAMSUNG) 

。。。。。 

#endif 

 

重点还是分析通用的arm处理器的内容吧 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载