【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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值