; --------------------------------------------------------------------------------
; @Title: Linux Demo for TRACE32 OS Awareness on the OMAP3503 Board
; @Description: 
;   This batchfile demonstrates the use of the OS Awareness for Linux
;   The example is generated for the OMAP 3503 board using an ICD.
;   It will NOT run on any other board, but may be used as a template
;   for others.
;   Linux is downloaded to the board via ICD.
; @Keywords: awareness, OMAP3*, RTOS, TI
; @Author: KJM
; @Board: OMAP3503
; @Chip: OMAP3503
; @Copyright: (C) 1989-2019 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: omap3503_linux.cmm 15236 2019-11-08 07:27:03Z bschroefel $


; Starting Linux example with TRACE32 and Hyperterminal:
; - Connect NULL modem cable to UART-1/2
; - Start TRACE32
; - Open Hyperterminal:
; - 115200 baud, 8/N/1, no(!) handshake
; - Switch on the board
; - (T32) "do linux"
; - terminal: start "hello"

LOCAL &ka_path &awareness

 SCREEN.ON


; Debugger Reset

 WinPAGE.RESet
 AREA.RESet
 WinPOS 0. 25. 75. 9. 0. 0. W000
 AREA.view
  
 PRINT "resetting..."

 RESet


; setup of ICD
 
 PRINT "initializing..."
 SYStem.RESet
 SYStem.CPU OMAP3503
 SYStem.Option DACR ON          ; give Debugger global write permissions
 TrOnchip.Set DABORT OFF        ; used by Linux for page miss!
 TrOnchip.Set PABORT OFF        ; used by Linux for page miss!
 TrOnchip.Set UNDEF OFF         ; my be used by Linux for FPU detection
 SYStem.Option MMUSpaces ON     ; enable space ids to virtual addresses
 
 PRINT "Going up..."
 SYStem.Up
 
 ;do reset_imo

 ;Register.RESet
 
 SETUP.IMASKASM ON          ; lock interrupts while single stepping
 

; Target Setup: initialize DRAM controller and peripherals
 
 ; Either let the boot monitor setup the board
    Go
    PRINT "target setup..."
    WAIT 3.s
    Break


; Load the Linux kernel

 ; If you are using a flashed kernel, or if you're 
 ; loading your kernel via TFTP, use the boot monitor
 ; to do so.
 
 ; Use the next lines only to load the kernel into
 ; RAM using the debugger.

 PRINT "loading Linux image..."
 
 ; vmlinux starts physically at RAM start (=0x80000000) + 0x8000 
 ; We have to adjust it from the virtual start address at the label
 ; "stext" from the System.map ("nm vmlinux | sort")
 ; i.e.: Data.LOAD.Elf vmlinux <physical start>-<virtual start>

 Data.LOAD.Elf vmlinux 0x80008000-0xc0008000 /gnu /NosYmbol 
 
 Register.RESet

 ; Set PC on start address of image
 Register.Set PC 0x80008000

 ; Set machine type in R1; see arch/arm/tools/mach-types
  Register.Set R1 0x5FF 
 

; Loading RAM disk

 PRINT "loading ram disk..."
 
 ; Load ram file system image into ram disk
 ; The load address is hardcoded in arch/arm/mach-integrator/arch.c
 
 Data.LOAD.Binary ramdisk.image.gz 0x81600000 /NoClear /NosYmbol 


; Load the Linux kernel symbols into the debugger
 
 PRINT "loading Linux kernel symbols..."

 Data.LOAD.Elf vmlinux /gnu /NoCODE /StripPART 5


; Open a Code Window -- we like to see something

 ;WINPOS 0. 0. 75. 20.
 ;List.auto
 ;screen
 

; Run over MMU & Interrupt initialization

 Go __init_end /Onchip
 PRINT "initializing target and debugger MMU..."
 WAIT !STATE.RUN()
 
 
 ; Map the virtual kernel symbols to physical addresses
 ; to give the debugger access to it before CPU MMU is
 ; initialized
 MMU.FORMAT LINUX swapper_pg_dir 0xc0000000--0xc3ffffff 0x30000000
 TRNASlation.COMMON 0xc0000000--0xffffffff            ; common area for kernel and processes
 TRNASlation.TableWalk ON
 TRNASlation.ON


; Initialize Linux Awareness

 ; Note that the Linux awareness needs the kernel symbols to work
 
 ; check linux major version
 IF STRing.SCAN(Data.STRing(linux_banner), "Linux version 2.", 0)==0
 (
     &ka_path="~~/demo/arm/kernel/linux/linux-2.x"
     &awareness="linux.t32"
 )
 ELSE
 (
     &ka_path="~~/demo/arm/kernel/linux/linux-3.x"
     &awareness="linux3.t32"  
 )
 
 PRINT "initializing RTOS support..."
 TASK.CONFIG &ka_path/&awareness               ; loads Linux awareness 
 MENU.ReProgram &ka_path/linux            ; loads Linux menu 
  
 WAIT 1.s
 
 Go
 PRINT "starting Linux... (please wait)"
 WAIT 10.s
 
 
 PRINT "done."     ; done with loading and starting Linux

 
; --------------------------------------------------------------------------------
; Application Debugging 
; e.g. "hello"
; --------------------------------------------------------------------------------

 ; activate autoloader for processes:
 TASK.sYmbol.Option AutoLoad Process

 PRINT "please log in and start 'hello'"

 ; script based
   ; using the script based application debugging
   ; gives more control over the single commands
   ; see file "app_debug.cmm"
   
   ;LOCAL &extdir
   ;&extdir=TASK.GETDIR()
   ;DO &extdir/app_debug hello
   
 ; process watch system
   ; the process watch system automates the actions
   ; for application debugging
   
   WinPOS 55. 26. 40. 4.
   TASK.Watch.View "hello"

   Go

 ENDDO






