S3C2440 -- 启动文件和Makefile文件分析

发布者:二进制游侠最新更新时间:2018-08-26 来源: eefocus关键字:S3C2440  启动文件  Makefile文件 手机看文章 扫描二维码
随时随地手机看文章

Nand Flash 或者 Nor Flash启动
S3C2440有4KB SRAM,Nand Flash启动的话,硬件自动将Nand Flash的前4KB 拷贝到SRAM中,然后CPU由地址0开始执行。Nor Flash启动的话,可以像内存一样读,所以CPU如果从Nor Flash启动的话,CPU仍将从0地址启动,但是此时0地址指向Nor Flash地址;Nor Flash具有的特征:可以像内存一样读数据,但是不能像内存一样写数据,必须先擦除之后才能写数据到Nor Flash。

GCC编译流程:预编译,编译,汇编,连接

编译:.c -> .s; 汇编:.s -> .o ;连接:多个.o问价合并一个可执行文件

Makefile文件内容:

led_on.bin : led_on.S

arm-linux-gcc -g -c -o led_on.o led_on.S//-g 加入调试信息-c编译不连接
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf//-Ttext 代码段开始位置 连接生成文件 led_on_elf
arm-linux-objcopy -O binary -S led_on_elf led_on.bin//生成二进制文件
clean:
rm -f   led_on.bin led_on_elf *.o

@******************************************************************************
@ File:led_on.S
@ 功能:LED点灯程序,点亮LED1
@******************************************************************************       
            
.text
.global _start
_start:     
            LDR     R0,=0x56000050       @ R0设为GPFCON寄存器。此寄存器
                                        @ 用于选择端口B各引脚的功能:
                                        @ 是输出、是输入、还是其他
            MOV     R1,#0x00000100        
            STR     R1,[R0]             @ 设置GPF4为输出口, 位[8:7]=0b01
            LDR     R0,=0x56000054       @ R0设为GPBDAT寄存器。此寄存器
                                        @ 用于读/写端口B各引脚的数据
            MOV     R1,#0x00000000        @ 此值改为0x00000010,
                                        @ 可让LED1熄灭
            STR     R1,[R0]             @ GPF4输出0,LED1点亮
MAIN_LOOP:
            B       MAIN_LOOP

启动文件包括软件初始化进而硬件初始化

硬件初始化:1. 关闭开门狗 2.初始化时钟, 3. 初始化SDRAM

软件初始化:1. 设置返回地址, 2. 调用main函数, 3. 清理工作(sp ->SRAM(不需要初始化可以直接使用)或者SDRAM(需添加初始化程序))

@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@****************************************************************************** 

.text
.global _start
_start:
ldr r0, =0x53000000 @ WATCHDOG寄存器地址
mov r1, #0x0 
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启

ldr sp, =1024*4    @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
@ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
bl main @ 调用C程序中的main函数
halt_loop:
b halt_loop@程序死循环与此

此程序位基础的点亮LED程序并在SRAM中运行,所以硬件启动项中没有设置时钟和SDRAM。

#define GPFCON      (*(volatile unsigned long *)0x56000050)
#define GPFDAT      (*(volatile unsigned long *)0x56000054)
int main()
{
    GPFCON = 0x00000100;    // 设置GPF4为输出口, 位[8:7]=0b01
    GPFDAT = 0x00000000;    // GPF4输出0,LED1点亮
    return 0;
}

启动文件对应的C语言文件相对比较简单,设置引脚控制寄存器和数据寄存器,点亮LED。

CFLAGS := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -ffreestanding

leds.bin : crt0.S  leds.c

arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S

arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c

arm-linux-ld -Ttext 0x0000000 crt0.o leds.o -o leds_elf

# arm-linux-ld -Tleds.lds  crt0.o leds.o -o leds_elf

arm-linux-objcopy -O binary -S leds_elf leds.bin

arm-linux-objdump -D -m arm  leds_elf > leds.dis

clean:

rm -f   leds.dis leds.bin leds_elf *.o

arm-linux-objdump -D -m arm leds_elf > leds.dis //对连接文件按照段,机型为ARM进行反汇编


关键字:S3C2440  启动文件  Makefile文件 引用地址:S3C2440 -- 启动文件和Makefile文件分析

上一篇:基于ARM-LINUX的温度传感器驱动(DS18B20)
下一篇:STM32 Bootloader原理和设计

推荐阅读最新更新时间:2024-03-16 16:12

S3C2440 代码重定位实验(三)
代码重定位 我们现在来解决代码重定位实验(一)所引入的代码重定位问题。 对于S3C2440来说: BIN文件小于4KB时: 若是Nand方式启动,则不存在任何问题 若是Nor方式启动,则我们可以只重定位.data段即可 当BIN文件大于4KB时: 若是Nand方式启动,则需要重定位整个程序,包括代码段和数据段 若是以Nor方式启动,则依然只重定位.data段即可 只重定位.data段和清零.bss段 对于重定位.data段的代码,正常情况下应该是使用汇编来编写的,我为了简便起见,使用了C语言来编写。由于此时尚未重定位数据段和清零BSS段,是不应该调用C函数的。但是我保证了这两个函数不访问全局变量,所以只要正确设置了栈指针,调用
[单片机]
<font color='red'>S3C2440</font> 代码重定位实验(三)
S3C2440 Linux驱动移植——按键
开发板:TQ2440 内核版本:2.6.32 1. 硬件链接图 四个输入引脚: EINT0-----( GPF0 )----INPUT---K4 EINT2-----( GPF2 )----INPUT---K3 EINT4-----( GPF4 )----INPUT---K2 EINT1-----( GPF1 )----INPUT---K1 2. 相关的数据结构 移植所需要的数据结构位于include/linux/gpio_keys.h中。 #ifndef _GPIO_KEYS_H #define
[单片机]
<font color='red'>S3C2440</font> Linux驱动移植——按键
STM32学习笔记(三)---启动文件
启动文件简介 启动文件由汇编编写,是系统上电复位后第一个执行的程序。 初始化堆栈指针 SP=_initial_sp 初始化PC指针=Reset_Handler 初始化中断向量表 配置系统时钟 调用C库函数_main初始化用户堆栈,最终调用main函数去到C的世界 启动文件中用到的ARM汇编指令 启动文件分析 1. 栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp 开辟栈空间大小为0x00000400(1kb),名字为ST
[单片机]
STM32学习笔记(三)---<font color='red'>启动文件</font>
s3c2440内存控制器与SDRAM基本测试
前面我们实验的LED和串口程序,是cpu发送地址给特定的寄存器,在寄存器中写相应的位,达到控制要求。 第一类是GPIO门电路如LED,第二类是协议类如串口,这些都不是cpu直接给地址信息,而是通过寄存器来控制的。 第三类是内存接口,cpu发出的地址可以直接传递给这种设备如nor flash,sdram,网卡。注意nand flash不属于这种类型。 关于SDRAM,可以参考这篇文章,这对于了解sdram很重要,非常有必要阅读一波。 《高手进阶,终极内存技术指南(完整/进阶版)》 这篇文章能够让你了解sdram这个内存介质。 然后,查看2440的芯片资料: 2440已经有针对sdram的控制器,2440可
[单片机]
<font color='red'>s3c2440</font>内存控制器与SDRAM基本测试
S3C2440-裸机篇-09 | 使用S3C2440操作Nor Flash
1. Nor Flash与Nand Flash Nor Nand 接口 引脚多,类似于RAM 引脚较少 容量 小(1-32MB) 大(128-512MB) 读操作 简单,和RAM相同 简单,和RAM相同 写操作 发出特定命令才能写入 发出特定命令才能写入 价格 贵 便宜 比较 无坏块 有坏块 XIP 可以 不可以 应用场合 存储关键性代码(比如uboot,kernel) 存储海量数据(允许错误) 2. JZ2440开发板上的Nor Flash JZ2440开发板上板载了一个Nor Flash,型号为MX29LV160DBTI-70G,连接在S3C2440内存控制器上的BANK0,原理图如下:
[单片机]
S3C2440-裸机篇-09 | 使用<font color='red'>S3C2440</font>操作Nor Flash
S3C2440 AD转换器
10 位CMOS ADC(模/数转换器)是一个8 通道模拟输入的再循环类型设备。其转换模拟输入信号为10 位二 进制数字编码,最大转换率为2.5MHz A/D转换器时钟下的 500 KSPS。A/D 转换器支持片上采样-保持功能和掉电 模式的操作。 触摸屏在下一篇文章,ADC转换比较简单,这里贴出一个代码 view plain copy #include 2440addr.h #include 2440lib.h #include def.h //==================================================================
[单片机]
<font color='red'>S3C2440</font> AD转换器
基于S3c2440的I2C驱动与测试程序追踪交叉分析
VMware虚拟机+Fedora10, 硬件平台TQ2440, 内核2.6.30.4 对应的驱动程序豁然开朗, 然后自己添加了一些dev_dbg后, 对于不理解的地方也有了一定的参考提示, 记录下来与大家分享。 测试程序如下: /*i2c_test.c * hongtao_liu */ #include #include #include #include #include #include #include #include #define I2C_RETRIES 0x0701 #define I2C_ TI MEOUT 0x0702 #define I2C_RDWR 0x0707 /*********定义struct i
[单片机]
基于Linux平台上S3C2440的物流配送系统设计
1  相关核心技术概述 1.1  移动定位技术 目前的移动定位技术已经非常成熟,最主要的有3类: ① 利用卫星进行后方交汇的定位技术, 即GPS(Global Positioning System,全球定位系统),是由美国建立的一个卫星导航定位系。利用该系统,用户可以在全球范围内实现全天候、连续、实时的三维导航定位和测速;另外,还能够进行高精度的时间传递和精密定位。 ② 利用移动通信技术提供位置服务的定位技术,即CellID (Cell Identification,小区识别码),通过识别网络中哪一个小区传输用户呼叫,并将该信息翻译成纬度和经度来确定用户位置,从而实现定位。确保终端在GPS定位失去信号的情况下, 保持最低限度的定位
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved