热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mini2440的初始化_从汇编到C语言

gboot.lds如下:OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{.0x30000000;.ALIGN(4);.text:{st

  gboot.lds如下:

OUTPUT_ARCH(arm)
ENTRY(_start)SECTIONS {. = 0x30000000;. = ALIGN(4);.text : {start.o (.text)*(.text)}. = ALIGN(4);.data : {*(.data)}. = ALIGN(4);bss_start = .;.bss : {*(.bss)}bss_end = .;
}

  main.c如下:

#define GPBCON ( volatile unsigned long * ) 0x56000010
#define GPBDAT ( volatile unsigned long * ) 0x56000014int gboot_main() {* ( GPBCON ) = 0x400;* ( GPBDAT ) = 0x0;return 0;
}

  start.S如下:

.text
.global _start
_start:b resetldr pc, _undifined_instructionldr pc, _software_interruptldr pc, _prefetch_abortldr pc, _data_abortldr pc, _not_usedldr pc, _irqldr pc, _fiq_undifined_instruction: .word undifined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word resetundifined_instruction:nopsoftware_interrupt:nopprefetch_abort:nopdata_abort:nopnot_used:nopirq:nopfiq:nopreset:bl set_svcbl disable_watchdogbl disable_interruptbl disable_mmubl init_clockbl init_sdrambl copy_to_rambl init_stackbl clean_bssldr pc, =gboot_main
@ bl light_ledset_svc:mrs r0, cpsrbic r0, r0, #0x1forr r0, r0, #0xd3msr cpsr, r0mov pc, lr#define pWTCON 0x53000000
disable_watchdog:ldr r0, =pWTCONmov r1, #0x0str r1, [r0]mov pc, lrdisable_interrupt:mvn r1, #0x0ldr r0, =0x4a000008str r1, [r0]mov pc, lrdisable_mmu:mcr p15, 0, r0, c7, c7, 0mrc p15, 0, r0, c1, c0, 0bic r0, r0, #0x00000007mcr p15, 0, r0, c1, c0, 0mov pc, lr#define CLKDIVN 0x4c000014
#define MPLLCON 0x4c000008
#define MPLL_405MHZ ((127<<12)|(2<<4)|(1<<0))init_clock:ldr r0, &#61;CLKDIVNmov r1, #0x5str r1, [r0]mcr p15, 0, r0, c1, c0, 0orr r0, r0, #0xc0000000mcr p15, 0, r0, c1, c0, 0ldr r0, &#61;MPLLCONldr r1, &#61;MPLL_405MHZstr r1, [r0]mov pc, lr#define mem_contrl 0x48000000
init_sdram:ldr r0, &#61;mem_contrladd r3, r0, #4*13adrl r1, mem_data0:ldr r2, [r1], #4str r2, [r0], #4cmp r0, r3bne 0bmov pc, lrcopy_to_ram:ldr r0, &#61;0x0ldr r1, &#61;0x30008000add r3, r0, #1024*4copy_loop:ldr r2, [r0], #4str r2, [r1], #4cmp r0, r3bne copy_loopmov pc, lrinit_stack:ldr sp, &#61;0x34000000mov pc, lrclean_bss:ldr r0, &#61;bss_startldr r1, &#61;bss_endcmp r0, r1moveq pc, lrclean_loop:mov r2, #0str r2, [r0], #4cmp r0, r1bne clean_loopmov pc, lrmem_data:.long 0x22000000.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00018001.long 0x00018001.long 0x008c04f5.long 0x000000b1.long 0x00000030.long 0x00000030#define GPBCON 0x56000010
#define GPBDAT 0x56000014light_led:ldr r0, &#61;GPBCONmov r1, #0x400str r1, [r0]ldr r0, &#61;GPBDATmov r1, #0x0str r1, [r0]mov pc, lr

  Makefile如下&#xff1a;

all: start.o main.oarm-linux-ld -Tgboot.lds -o gboot.elf $^arm-linux-objcopy -O binary gboot.elf gboot.bin%.o: %.Sarm-linux-gcc -g -c $^%.o: %.carm-linux-gcc -g -c $^.PHONY: clean
clean:rm *.o *.elf *.bin


推荐阅读
  • 正在学习操作系统开发,遇到一个内核在GRUB Legacy(0.97)中无法成功引导的问题。具体表现为输入内核命令后显示错误信息,尝试引导时GRUB挂起。 ... [详细]
  • 本文介绍了如何在ARM架构的裸机环境中通过C语言编程点亮LED灯。主要包括初始化栈指针、关闭看门狗以及编写控制LED灯状态的C代码等关键步骤。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文总结了几个常用的Android开发技巧,包括检测设备上是否安装特定应用、获取应用的版本名称、设置状态栏透明以及如何从一个应用跳转至另一个应用的方法。 ... [详细]
  • 探讨如何在C++中,当子类实例存储在父类类型的向量中时,正确访问子类特有的成员变量或方法。 ... [详细]
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • Qt应用开发:创建基本窗口
    本文介绍如何使用Qt框架创建基础窗口的两种方法。第一种方法直接在main函数中创建并显示窗口;第二种方法通过定义一个继承自QWidget的类来实现更复杂的功能。 ... [详细]
  • 本文档详细介绍了Excel VBA编程中的基本语法,包括循环结构、条件判断、数据处理以及用户界面设计等内容,旨在帮助初学者快速掌握VBA编程技巧。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
author-avatar
瓯源鞋楦头尾自动修平机
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有