【kernel envirment】embedded mini2440

NOTE:

First must create the kernel envriment, detail see 【kernel envirment】How to build and debug linux Kernel.

 

1.Hardware.

Connet the 5V power suply. And debug serial port.

 

2.boot compiler.

Go to offise site download: http://www.arm9.net/download.asp

Compiler download:

Compiler install:

cd ~/linux-all/tmp/
tar -xvf arm-linux-gcc-4.4.3-20100728.tar.gz
cd /usr/local/
sudo cp -rf ~/linux-all/tmp/usr/local/arm/ ./arm

Add envriment value:

/home/hui/.bashrc

PATH="/usr/local/arm/4.3.2/bin:$PATH"

Note: must add envirment value, or not will meet error as below when use arm-linux-gcc

using installed Compiler to compile:

Change the compiler tools to absolute address. bellow is a example, not always change as bellow.

from:

arm-linux-gcc
arm-linux-ld
arm-linux-objcopy

to:

arm-linux-gcc = /usr/local/arm/4.3.2/bin/arm-linux-gcc-4.3.2
arm-linux-ld = /usr/local/arm/4.3.2/bin/arm-linux-ld
arm-linux-objcopy = /usr/local/arm/4.3.2/bin/arm-linux-objcopy

	$(arm-linux-gcc)
	$(arm-linux-ld)
	$(arm-linux-objcopy) 

At laster, use "make" command to build.
 

 

3.boot code download

 

mini2440简易bootloader源码-CSDN下载

Only 3 sourse file, very simple, and output serial port message and boot the nand flash.

NOTE: only running in norfalsh.

 

source code: Go to offise site download: http://www.arm9.net/download.asp Can down a CD file

 

4.Download norflash through JTAGE interface.

segger-jlink interface as bellow: (see from button to segger-jlink)

Header:

pin1: segger pin1 VCC                  pin2: NC

pin3: NC(or not can't hard reset)   pin4:segger pin15 RESET

pin5: segger pin5 TDI                    pin6:segger pin13 TDO

pin7: segger pin7 TMS                   pin8: NC

pin9: segger pin9 TCLK                pin10: segger pin4 6 8 10 12 14 16 20 GND

 

Connect the hareware, Turn to using Norflash(size:2M), not Nandflash,

reference from: 用jlink在mini2440上烧写uboot

NOTE: can direct without configure use Appendenx 1 mini244o.jflash.

Also can use in ubuntu envriment, detail see Appendenx 3 JLINK in ubuntu.

create a "jlink-downlaod.bat":

set JFlash_Exe="C:\Program Files (x86)\SEGGER\JLinkARM_V434\JFlashARM.exe"
%JFlash_Exe% -openprjmini2440.jflash -openboot.bin,0x00000000 -auto -exit
pause

then new a J-Flash project, set as bellow:

"Use flowing init sequenc" modify as bellow:

##-------Action-----Value0------Value1
Write 32bit 0x53000000 0x00000000 ; pWTCON , 看门狗定时器控制寄存器
Write 32bit 0x4A000008 0xFFFFFFFF ; INTMSK , 中断屏蔽寄存器
Write 32bit 0x4A00001C 0x000007FF ; INTSUBMSK , 针对INTMAK具体化的一个中断请求屏蔽寄存器
Write 32bit 0x53000000 0x00000000 ; pWTCON , 看门狗定时器控制寄存器
Write 32bit 0x56000050 0x000055AA ; rGPFCON , Port F control
Write 32bit 0x4C000014 0x00000007 ; CLKDIVN , CPU时钟分频控制寄存器
Write 32bit 0x4C000000 0x00FFFFFF ; LOCKTIME , 锁时计数寄存器
Write 32bit 0x4C000004 0x00061012 ; MPLLCON , MPLL寄存器
Write 32bit 0x4C000008 0x00040042 ; UPLLCON , UPLL寄存器
Write 32bit 0x48000000 0x22111120 ; Bus width & wait status
Write 32bit 0x48000004 0x00002F50 ; Boot ROM control
Write 32bit 0x48000008 0x00000700 ; BANK1 control
Write 32bit 0x4800000C 0x00000700 ; BANK2 control
Write 32bit 0x48000010 0x00000700 ; BANK3 control
Write 32bit 0x48000014 0x00000700 ; BANK4 control
Write 32bit 0x48000018 0x0007FFFC ; BANK5 control
Write 32bit 0x4800001C 0x00018005 ; BANK6 control
Write 32bit 0x48000020 0x00018005 ; BANK7 control
Write 32bit 0x48000024 0x008E0459 ; DRAM/SDRAM refresh
Write 32bit 0x48000028 0x00000032 ; Flexible Bank Size
Write 32bit 0x4800002C 0x00000030 ; Mode register set for SDRAM
Write 32bit 0x48000030 0x00000030 ; Mode register set for SDRAM

So can read back or download the  bin file. Downlaod address is 0, as bellow:

SDRAM 地址空间:0x30000000 ~ 0x34000000

Mini2440 使用了两片外接的32M bytes 总共64M bytes 的SDRAM 芯片(型号为:
HY57V561620FTP/MT48LC16M16A2),

 

1当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间,也就是Norflash,程序就会从Norflash中启动,arm直接取Norflash中的指令运行。nor启动时,片内 sram 4K 内存的起始地址为 0x4000 0000

2当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。

3.系统上电,arm会自动把NANDflash中的前4K内容考到bootbuf(也就是0地址),然后从0地址运行。

nand启动时,片内 sram 内存的起始地址为 0x0
4.Arm的启动都是从0地址开始。

 

 

5.Download sdram through J-Link.

source code: Go to offise site download: http://www.arm9.net/download.asp Can down a CD file, then find a vboot(vboot-src-20100727.tar.gz) to download to sdram(Note: size is only 4k). But need a patch(See Appendenx 2 vboot patch).

special pdf download: https://download.csdn.net/download/eee382642521/5197711

 

Download Step:

1.Add two files into the directory:

jlink-sdram-download.bat

"C:\Program Files (x86)\SEGGER\JLinkARM_V434\JLink.exe" jlink-sdram-script.txt
pause

jlink-sdram-script.txt

r
speed 12000
loadbin vboot.bin 0
setpc 0
g
exit

then  click the jlink-sdram-download.bat, will be download *.bin file into the sdram and reset program.

If want to debug, must freeze at first, so jlink-sdram-script.txt as bellow:("exit" must remove, don't know why.)

r
speed 12000
loadbin vboot.bin 0
setpc 0


2.2 如果是Nor启动:
loadbin e:/init.bin 0x10000000      
setpc 0x10000000
g  

 

6.Debug through SEGGER J-Link GDB Server.

Can debug both norflash and sdram program.

NOTE: Makefile must at "-g", as bellow:

1.

2.

Open SEGGER J-Link GDB Server:

NOTE: Could use *.bat to download and open gdb server:

"C:\Program Files (x86)\SEGGER\JLinkARM_V434\JLinkGDBServer.exe" -if JTAG

JTAG speed: more high, connet more quickly. But best parameter is 100kHz.Because more hight, will not stable.

localhost only: see gdb run in localhost or others.

Then using TDM-GCC to debug:  (NOTE: Only using arm-linux-gdb, not special gdb for PC)

If want to debug in window, using the gdb, download link: window 平台用的gdb,远程调试arm-CSDN下载

When run in windows envriment:

 

When run in linux computer:

/usr/local/arm/4.3.2/bin/arm-linux-gdb boot.elf

 

7.Using vscode to debug.

1.press "F5" would general a "launch.json" file:

2.click "Add confiure..." to add "C/C++: (gdb) Bash on Windows Launch" iterm.

at lastet "launch.json" contain is :

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
 
        {
            "name": "(gdb) Bash on Windows Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "Z:/home/hui/linux-all/tmp/my_bootloader/boot.elf",
            "args": [],
            "stopAtEntry": false,
            "cwd": "Z:/home/hui/linux-all/tmp/my_bootloader",
            "environment": [],
            "externalConsole": true,
            "miDebuggerPath": "C:/TDM-GCC-64/gdb64/bin/gdb-arm-32.exe",
            "miDebuggerServerAddress": "localhost:2331",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
 
    ]
}

modify iterm is:

            "program": "Z:/home/hui/linux-all/tmp/my_bootloader/boot.elf",
            "cwd": "Z:/home/hui/linux-all/tmp/my_bootloader",
            "miDebuggerPath": "C:/TDM-GCC-64/gdb64/bin/gdb-arm-32.exe",
            "miDebuggerServerAddress": "localhost:2331",

 

3.make a break point  in function.

press "F5" will run in function, as below:

 

8 u-boot

source code: Go to offise site download: http://www.arm9.net/download.asp Can down a CD file, then find the souce code : u-boot-1.1.6-FA24x0.tar.gz

compiler:

If Error "has EABI version 5, but target u-boot has EABI version 0", so the gcc version is two hight, so need to using crosstools-3.4.5.tar.bz2 (https://download.csdn.net/download/lile777/9518832)

Install method:

tar -xvf crosstools-3.4.5.tar.bz2.rar

sudo cp -rf ~/linux-all/uboot/opt/EmbedSky/ ./

compile:

1.search keyword "s3c" in Makefile, will find the config,then config the project:make open24x0_config

2.Modify compiler path:

CROSS_COMPILE = /opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin/arm-linux-

3.make

 

cpu/arm920t/start.S is the first asm file, then call the c language function start_armboot.

 

PLL clock setting:

The code is in cpu/arm920t/start.S.

Default is 120MHz, as below:

	/* FCLK:HCLK:PCLK = 1:2:4 */
	/* default FCLK is 120 MHz ! */
	ldr	r0, =CLKDIVN
	mov	r1, #3
	str	r1, [r0]

we setting run fast, as below:

#define MPLLCON   0x4C000004
#define UPLLCON   0x4C000008  
        ldr  r0, =CLKDIVN  
        mov  r1, #5
        str  r1, [r0]


        ldr  r0, =MPLLCON
        ldr  r1, =0x7F021 
        str  r1, [r0]

        ldr  r0, =UPLLCON 
        ldr  r1, =0x38022
        str  r1, [r0]

9.Download kernel fs

1).Download uboot first at norflash first.

2.) Using uboot network to download kernel fs.

1.Input "help" will list all command, and will file "tftpboot" command.

 More usage see orther article.

 

Appendenx 1 mini244o.jflash

  AppVersion = 43400
[GENERAL]
  ConnectMode = 0
  CurrentFile = "D:\Users\Administrator\Downloads\my_bootloader\boot.bin"
  DataFileSAddr = 0x00000000
  GUIMode = 0
  HostName = ""
  TargetIF = 0
  USBPort = 0
  USBSerialNo = 0x00000000
[JTAG]
  IRLen = 0
  MultipleTargets = 0
  NumDevices = 0
  Speed0 = 5
  Speed1 = 12000
  TAP_Number = 0
  UseAdaptive0 = 0
  UseAdaptive1 = 0
  UseMaxSpeed0 = 1
  UseMaxSpeed1 = 1
[CPU]
  CheckCoreID = 0
  ChipName = "Analog AD7160"
  ClockSpeed = 0x00000000
  Core = 0x09FFFFFF
  CoreID = 0x3F0F0F0F
  CoreIDMask = 0xFFFFFFFF
  DeviceFamily = 0x00000009
  EndianMode = 0
  HasInternalFlash = 0
  InitStep0_Action = "Reset"
  InitStep0_Comment = "Reset and halt target"
  InitStep0_Value0 = 0x00000000
  InitStep0_Value1 = 0x00000000
  InitStep10_Action = "Write 32bit"
  InitStep10_Comment = "Bus width & wait status"
  InitStep10_Value0 = 0x48000000
  InitStep10_Value1 = 0x22111120
  InitStep11_Action = "Write 32bit"
  InitStep11_Comment = "Boot ROM control"
  InitStep11_Value0 = 0x48000004
  InitStep11_Value1 = 0x00002F50
  InitStep12_Action = "Write 32bit"
  InitStep12_Comment = "BANK1 contro"
  InitStep12_Value0 = 0x48000008
  InitStep12_Value1 = 0x00000700
  InitStep13_Action = "Write 32bit"
  InitStep13_Comment = "BANK2 control"
  InitStep13_Value0 = 0x4800000C
  InitStep13_Value1 = 0x00000700
  InitStep14_Action = "Write 32bit"
  InitStep14_Comment = "BANK3 control"
  InitStep14_Value0 = 0x48000010
  InitStep14_Value1 = 0x00000700
  InitStep15_Action = "Write 32bit"
  InitStep15_Comment = "BANK4 control"
  InitStep15_Value0 = 0x48000014
  InitStep15_Value1 = 0x00000700
  InitStep16_Action = "Write 32bit"
  InitStep16_Comment = "BANK5 control"
  InitStep16_Value0 = 0x48000018
  InitStep16_Value1 = 0x0007FFFC
  InitStep17_Action = "Write 32bit"
  InitStep17_Comment = "BANK6 control"
  InitStep17_Value0 = 0x4800001C
  InitStep17_Value1 = 0x00018005
  InitStep18_Action = "Write 32bit"
  InitStep18_Comment = "BANK7 control"
  InitStep18_Value0 = 0x48000020
  InitStep18_Value1 = 0x00018005
  InitStep19_Action = "Write 32bit"
  InitStep19_Comment = "DRAM/SDRAM refresh"
  InitStep19_Value0 = 0x48000024
  InitStep19_Value1 = 0x008E0459
  InitStep1_Action = "Write 32bit"
  InitStep1_Comment = "pWTCON "
  InitStep1_Value0 = 0x53000000
  InitStep1_Value1 = 0x00000000
  InitStep20_Action = "Write 32bit"
  InitStep20_Comment = " Flexible Bank Size"
  InitStep20_Value0 = 0x48000028
  InitStep20_Value1 = 0x00000032
  InitStep21_Action = "Write 32bit"
  InitStep21_Comment = "Mode register set for SDRAM"
  InitStep21_Value0 = 0x4800002C
  InitStep21_Value1 = 0x00000030
  InitStep22_Action = "Write 32bit"
  InitStep22_Comment = "Mode register set for SDRAM"
  InitStep22_Value0 = 0x48000030
  InitStep22_Value1 = 0x00000030
  InitStep2_Action = "Write 32bit"
  InitStep2_Comment = "INTMSK "
  InitStep2_Value0 = 0x4A000008
  InitStep2_Value1 = 0xFFFFFFFF
  InitStep3_Action = "Write 32bit"
  InitStep3_Comment = "INTSUBMSK "
  InitStep3_Value0 = 0x4A00001C
  InitStep3_Value1 = 0x000007FF
  InitStep4_Action = "Write 32bit"
  InitStep4_Comment = "pWTCON "
  InitStep4_Value0 = 0x53000000
  InitStep4_Value1 = 0x00000000
  InitStep5_Action = "Write 32bit"
  InitStep5_Comment = "rGPFCON "
  InitStep5_Value0 = 0x56000050
  InitStep5_Value1 = 0x000055AA
  InitStep6_Action = "Write 32bit"
  InitStep6_Comment = "CLKDIVN "
  InitStep6_Value0 = 0x4C000014
  InitStep6_Value1 = 0x00000007
  InitStep7_Action = "Write 32bit"
  InitStep7_Comment = "LOCKTIME "
  InitStep7_Value0 = 0x4C000000
  InitStep7_Value1 = 0x00FFFFFF
  InitStep8_Action = "Write 32bit"
  InitStep8_Comment = "MPLLCON "
  InitStep8_Value0 = 0x4C000004
  InitStep8_Value1 = 0x00061012
  InitStep9_Action = "Write 32bit"
  InitStep9_Comment = "UPLLCON "
  InitStep9_Value0 = 0x4C000008
  InitStep9_Value1 = 0x00040042
  NumInitSteps = 23
  RAMAddr = 0x40000000
  RAMSize = 0x00001000
  ScriptFile = ""
  UseAutoSpeed = 0x00000001
  UseRAM = 1
  UseScriptFile = 0
[FLASH]
  aSectorSel[0] = 
  AutoDetect = 1
  BankName = ""
  BankSelMode = 1
  BaseAddr = 0x00000000
  CheckId = 3
  CustomRAMCode = ""
  DeviceName = "Auto detected flash memory"
  EndBank = 8191
  NumBanks = 1
  OrgNumBits = 16
  OrgNumChips = 1
  StartBank = 0
  UseCustomRAMCode = 0
[PRODUCTION]
  AutoPerformsErase = 1
  AutoPerformsHardLock = 0
  AutoPerformsHardUnlock = 0
  AutoPerformsProgram = 1
  AutoPerformsSecure = 0
  AutoPerformsSoftLock = 0
  AutoPerformsSoftUnlock = 1
  AutoPerformsStartApp = 0
  AutoPerformsUnsecure = 0
  AutoPerformsVerify = 1
  Delay = 0x000001F4
  EraseType = 2
  ProgramSN = 0
  SNAddr = 0x00000000
  SNInc = 0x00000001
  Threshold = 0x00000BB8
  VerifyType = 1

 

Appendenx 2 vboot patch:

Generate patch command:  diff vboot-oringin/ vboot > vboot-patch.txt -r

diff -r vboot-oringin/head.S vboot/head.S
91a92
> 	.align 1
155c156
< 	bl	Main			
---
> 	bl	main			
diff -r vboot-oringin/Makefile vboot/Makefile
2c2,5
< 
---
> arm-linux-gcc = /usr/local/arm/4.3.2/bin/arm-linux-gcc-4.3.2
> arm-linux-ld = /usr/local/arm/4.3.2/bin/arm-linux-ld
> arm-linux-objcopy = /usr/local/arm/4.3.2/bin/arm-linux-objcopy
> 	
4,7c7,11
< 	arm-linux-gcc -mabi=aapcs-linux -mno-thumb-interwork -Os -Wall -c head.S 244x_lib.c nand.c main.c
< 	arm-linux-ld -T mem.lds -Bstatic head.o 244x_lib.o nand.o main.o 
< 	arm-linux-objcopy -O binary -S a.out vboot.bin -R .comment -R .stab -R .stabstr
< 	rm *.o a.out
---
> 	$(arm-linux-gcc) -mabi=aapcs-linux -mno-thumb-interwork -Os -Wall -c head.S -g
> 	$(arm-linux-gcc) -mabi=aapcs-linux -mno-thumb-interwork -Os -Wall -c 244x_lib.c nand.c Main.c -g
> 	$(arm-linux-ld) -T mem.lds -Bstatic head.o 244x_lib.o nand.o Main.o 
> 	$(arm-linux-objcopy) -O binary -S a.out vboot.bin -R .comment -R .stab -R .stabstr
> 	#rm *.o a.out

 

Appendenx 3 JLINK in ubuntu

download from official site:https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPackBeta

install command :  sudo dpkg -i JLink_Linux_V635g_x86_64.deb

test command: JLinkExe

All command can find in /usr/bin

(end)

posted on 2018-11-07 10:11  lizhuohui  阅读(101)  评论(0编辑  收藏  举报

导航