您的位置:首页 > 运维架构 > Linux

arm9+linux fl2440 第一次开机烧录

2016-05-02 22:32 393 查看
一、烧录相关软件下载

USB转串口相关芯片驱动 : CH341SER.ZIP

J-link驱动 : Setup_JLinkARM_V410i.exe

windows下tftp服务器工具: tftpd32.exe

注意:

1, 只有在bootloader阶段才能使用j-link下载调试,一旦Linux运行起来后,j-link就不能再使用了。

2, 如果开发板上没有出厂时的wince系统,就可以跳过前面的擦除出厂系统自带bootloader的过程,直接使用j-link下载bootstrap程序并烧录u-boot

3,所有的flash都只能由1 write成0,不能由0 write成1; 如果要从0变为1,只能erase; 所以在往flash写数据之前,必须先擦除要写的地址空间;

烧录文件说明:

--------------------

bootstrap-s3c2440.bin

bootstrap文件是郭工用汇编写的一段代码,主要用来初始化CPU外部的SDRAM;在烧录时,该程序需要使用j-link下载到0x0(CPU内部SRAM)地址上去运行,另外此程序不需要烧录到Nandflash上。

u-boot-s3c2440.bin

--------------------

u-boot就相当于电脑的BIOS程序,该程序用来烧录/启动Linux系统等。在运行完bootstrap后,我们需要使用j-link将它加载到0x33f80000(CPU外部SDRAM)中去运行,当他在内存中运行起来后,再使用nand write命令将他烧录到nandflash的0地址上去;

linuxrom-s3c2440.bin

--------------------

linuxrom是linux系统文件,我们需要在u-boot运行时,使用tftp命令下载到SDRAM的0x30008000地址上,然后再使用nand write命令将其烧录到nandflash的0x100000地址上,记得flash再写之前一定要先使用nand erase命令擦除。

二、连接串口和用j-link烧写程序

1,在安装完USB转串口驱动后,然后右击我的电脑,打开设备管理器,在端口的地方可以看到USB转串口的串口号(我的是COM8)



2,然后secureCRT如下设置,点击连接



然后就可以看到select Menu,接下来选择6,再选择0,然后y,这样就干掉了开发板的出场设置,接下来用jlink烧写我们自己的程序。

3,如果成功安装了jlink 工具的话,我们就能够运行这个j-link commander,然后按如下步骤来烧写



j-link加载u-boot命令:(j-link是可以直接操作CPU以及CPU内部的SRAM)

--------------------

h 停止CPU中正在执行的程序,如果没有停下,可以多按几次h

speed 12000 设置J-link调试速度为12M

loadbin loadbin E:\bootfile\bootstrap-s3c2440.bin 0 加载bootstrap程序到CPU内部的4K SRAM中运行

setpc 0 让PC寄存器指向SRAM的起始地址,该地址放的是刚才下载的bootstrap程序

g 开始执行bootstrap程序,该程序用来初始化外部扩展的64M SDRAM,地址空间为0x3000 0000~(0x3000 0000+64M)

h 停止bootstrap程序的执行,如果没有停下,可以多按几次h

loadbin E:\fl2440_bin\u-boot-s3c2440.bin 0x33f80000 将u-boot加载到SDRAM的0x33f80000

setpc 0x33f80000 使PC寄存器指向0x33f80000,即u-boot程序的第一条代码

g 开始执行u-boot程序

4,烧写完之后,会出现下面的运行界面,

U-Boot 2010.09 (Jan 26 2016 - 10:34:01)

DRAM: 64 MiB

NAND: 256 MiB

In: serial

Out: serial

Err: serial

Net: dm9000

Hit any key to stop autoboot: 0

[fl2440@shaocongshuai]#

[fl2440@shaocongshuai]#

三、u-boot模式下将程序烧写进nandflash

此时u-boot就在内存中运行起来了,然后要让u-boot.bin 文件烧到nandflash上,让其能够直接启动, 在这之前的删除之前nandflash上的数据,相当于格式化系统盘。

[fl2440@shaocongshuai]# nand scrub

然后运行tftpd32.exe通过网络将文件下载到u-boot上

[fl2440@shaocongshuai]# set ipaddr 192.168.1.244

[fl2440@shaocongshuai]# set serverip 192.168.1.93

I. 设置u-boot环境变量:

-----

set ethaddr 设置fl2440开发板上的u-boot程序中的MAC地址

set ipaddr 设置fl2440开发板上的u-boot程序中的IP地址

set serverip 指定tftp下载时使用的tftp服务器的IP地址

save 保存所设置的环境变量

reset u-boot环境下的重启

注意:

不管怎么样,serverip和ipaddr 必须处在同一网段内.

1.如果是网线连接的是无线路由器的LAN口,则serverip是linux下搭建的tftp服务器的ip

2.如果是用的本地连接,则serverip是本地连接手动设置的ipv4的ip(只要是私有ip),网关、dns可以不设置(处在同一局域网内)。本地连接时ipv4的ip(也就是serverip)设置必须是手动设置,不能dhcp,防止与pc的无线网路发生冲突。而且本地连接的网卡默认是关闭的,只有下载是才会使能。windows下的tftpd的server interface只有在下载是才会显示serverip.

II. 下载并烧录u-boot程序:

-----

tftp 30008000 u-boot-s3c2440.bin 将u-boot临时下载到SDRAM的30008000地址

nand erase 0 100000  将nandflash的0~1M的分区擦除,该分区是用来存放u-boot程序的;

nand write 30008000 0 ${filesize} 将刚下载到SDRAM 30008000地址上的u-boot写到nandflash的0地址偏移处,大小为下载的U-boot文件大小;

III. 下载并烧录linux系统:

-----

tftp 300008000 linuxrom-s3c2440.bin 将linux系统程序临时下载到SDRAM的30008000地址

nand erase 100000 F00000  将nandflash的1M~16M的分区(总共15M)擦除,该分区是用来存放linux系统的;

nand write 30008000 100000 ${filesize} 将刚下载到SDRAM 30008000地址上的linux系统写到nandflash的1M地址偏移处,大小为下载的linux系统文件大小;

四、设置环境变量让系统一上电后自动加载Linux内核

[fl2440@shaocongshuai]# set bootargs 'console=ttyS0,115200 mem=64M rw loglevel=7'

[fl2440@shaocongshuai]# set bootcmd 'nand read 30008000 100000 f00000;bootm 30008000'.

[fl2440@shaocongshuai]# pri

baudrate=115200

ethaddr=08:00:3e:93:0a:5b

ipaddr=192.168.1.244

serverip=192.168.1.93

netmask=255.255.255.0

ethact=dm9000

bkr=tftp 30008000 linuxrom-s3c2440.bin;bootm 30008000

bootdelay=3

stdin=serial

stdout=serial

stderr=serial

bootargs=console=ttyS0,115200 mem=64M rw loglevel=7

bootcmd=nand read 30008000 100000 f00000;bootm 30008000

Environment size: 336/131068 bytes

附上:

ARM CPU: Samsung S3C2440(ARM920T, ARMv4t)

RAM:

SRAM (CPU片内的SRAM,只有4K) --NGCS0(0x0000 0000~+4K)

SDRAM (外扩的32M*2=64M SDRAM, Samsung K4S561632C-TC75) --NGCS6(0x3000 0000~+64M)

DDRAM (NC)

Flash:

Nandflash (Samsung 256MB*1 K9F2G08)

Norflash (NGCS0 --)

内存32MB/4个Bank = 一个bank 8MB

K4S561632C 总共有13行,9列

访问时,先通过addr0~addr12给行地址,选定相应行;

再通过addr0~addr8 给列地址

SDRAM单片是16位的数据线(DQ0~DQ15)

+-+-+-+-+

+-+-+-+-+

+-+-+-+-+

+-+-+-+-+

13*9=2^22=4MB 一次是读16个位(即2个字节),总共寻址8MB

L(Lower)DQM和U(Upper)DQM负责选择低字节还是高字节给CPU

BA0~BA1这两个线是用来控制究竟选中SDRAM里的哪一个Bank

CPU是否选中SDRAM工作,是由SDRAM的NSCS这个引脚决定的,原理图

上他接到了CPU的NGCS6上,所以SDRAM的地址线空间是从0x3000 0000开始



在开发板中,SDRAM连接到内存控制器的Bank6中,它的开始内存地址是0x30000000,大小为64M,即0x20000000。 ARM Linux kernel将SDRAM的开始地址定义为PHYS_OFFSET。经bootloader加载kernel并由自解压部分代码运行后,最终kernel被放置到KERNEL_RAM_PADDR(=PHYS_OFFSET
+ TEXT_OFFSET,即0x30008000)地址上的一段内存,经此放置后,kernel代码以后均不会被移动。

在board/samsung/smdk2410/config.mk文件中

TEXT_BASE = 0x33F80000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: