undefined instruction

Help
Zamek
2011-03-06
2013-04-15
  • Zamek

    Zamek - 2011-03-06

    Hello All,

    I try to refresh my working Colibri PXA270 (2.6.12 kernel) to 2.6.34. I downloaded the kernel from kernel.org, and patched it. 
    It can compile well, and when I try to load it with tftp I can this error:

    u-boot$ bootm
    ## Booting image at a1000000 …
       Image Name:   Linux kernel image
       Created:      2011-03-06   9:19:21 UTC
       Image Type:   ARM Linux Kernel Image (gzip compressed)
       Data Size:    5296760 Bytes =  5.1 MB
       Load Address: a0008000
       Entry Point:  a0008000
       Verifying Checksum … OK
       Uncompressing Kernel Image … OK
    Starting kernel …
    undefined instruction
    pc :     lr :
    sp : a3f1fdac  ip : ffffffff  fp : 00000001
    r10: a3f9bc88  r9 : a3f60158  r8 : a3f1ffdc
    r7 : a3f9bc88  r6 : a1000040  r5 : 00000000  r4 : 00000006
    r3 : a0008000  r2 : a0000100  r1 : 000002d9  r0 : 00000000
    Flags: NzCv  IRQs off  FIQs off  Mode SVC_32
    Resetting CPU …

    I made kernel with the following commands:

    export ARCH=arm
    export CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
    export INSTALL_PATH=/opt/eldk/arm
    export INSTALL_MOD_PATH=$INSTALL_PATH

    make vmlinux && make modules && make modules_install && make uImage
    arm-linux-gnueabi-objcopy -O binary -S vmlinux linux.bin
    gzip -c -9 linux.bin > linux.bin.gz
    mkimage -A arm -O linux -T kernel -C gzip -a 0xa0008000 -e 0xa0008000 -n "Linux kernel image" -d linux.bin.gz uzImage
    cp uzImage /opt/eldk/tftpboot/94644A0A.img

    I set any of Kernel hackings in config:

    #
    # Kernel hacking
    #
    # CONFIG_PRINTK_TIME is not set
    # CONFIG_ENABLE_WARN_DEPRECATED is not set
    # CONFIG_ENABLE_MUST_CHECK is not set
    CONFIG_FRAME_WARN=1024
    CONFIG_MAGIC_SYSRQ=y
    # CONFIG_STRIP_ASM_SYMS is not set
    # CONFIG_UNUSED_SYMBOLS is not set
    CONFIG_DEBUG_FS=y
    CONFIG_HEADERS_CHECK=y
    CONFIG_DEBUG_KERNEL=y
    # CONFIG_DEBUG_SHIRQ is not set
    CONFIG_DETECT_SOFTLOCKUP=y
    # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
    CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
    CONFIG_DETECT_HUNG_TASK=y
    # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
    CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
    CONFIG_SCHED_DEBUG=y
    # CONFIG_SCHEDSTATS is not set
    # CONFIG_TIMER_STATS is not set
    # CONFIG_DEBUG_OBJECTS is not set
    # CONFIG_DEBUG_SLAB is not set
    # CONFIG_DEBUG_KMEMLEAK is not set
    # CONFIG_DEBUG_PREEMPT is not set
    # CONFIG_DEBUG_RT_MUTEXES is not set
    # CONFIG_RT_MUTEX_TESTER is not set
    # CONFIG_DEBUG_SPINLOCK is not set
    # CONFIG_DEBUG_MUTEXES is not set
    # CONFIG_DEBUG_LOCK_ALLOC is not set
    # CONFIG_PROVE_LOCKING is not set
    # CONFIG_LOCK_STAT is not set
    # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
    # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
    CONFIG_STACKTRACE=y
    # CONFIG_DEBUG_KOBJECT is not set
    CONFIG_DEBUG_BUGVERBOSE=y
    CONFIG_DEBUG_INFO=y
    # CONFIG_DEBUG_VM is not set
    # CONFIG_DEBUG_WRITECOUNT is not set
    # CONFIG_DEBUG_MEMORY_INIT is not set
    # CONFIG_DEBUG_LIST is not set
    # CONFIG_DEBUG_SG is not set
    # CONFIG_DEBUG_NOTIFIERS is not set
    # CONFIG_DEBUG_CREDENTIALS is not set
    CONFIG_FRAME_POINTER=y
    # CONFIG_BOOT_PRINTK_DELAY is not set
    # CONFIG_RCU_TORTURE_TEST is not set
    # CONFIG_RCU_CPU_STALL_DETECTOR is not set
    # CONFIG_BACKTRACE_SELF_TEST is not set
    # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
    # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
    # CONFIG_LKDTM is not set
    # CONFIG_FAULT_INJECTION is not set
    # CONFIG_LATENCYTOP is not set
    # CONFIG_SYSCTL_SYSCALL_CHECK is not set
    # CONFIG_PAGE_POISONING is not set
    CONFIG_NOP_TRACER=y
    CONFIG_HAVE_FUNCTION_TRACER=y
    CONFIG_RING_BUFFER=y
    CONFIG_EVENT_TRACING=y
    CONFIG_CONTEXT_SWITCH_TRACER=y
    CONFIG_TRACING=y
    CONFIG_GENERIC_TRACER=y
    CONFIG_TRACING_SUPPORT=y
    CONFIG_FTRACE=y
    CONFIG_FUNCTION_TRACER=y
    # CONFIG_IRQSOFF_TRACER is not set
    # CONFIG_PREEMPT_TRACER is not set
    # CONFIG_SCHED_TRACER is not set
    CONFIG_BOOT_TRACER=y
    CONFIG_BRANCH_PROFILE_NONE=y
    # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
    # CONFIG_PROFILE_ALL_BRANCHES is not set
    CONFIG_STACK_TRACER=y
    CONFIG_KMEMTRACE=y
    CONFIG_WORKQUEUE_TRACER=y
    CONFIG_BLK_DEV_IO_TRACE=y
    CONFIG_FUNCTION_PROFILER=y
    CONFIG_FTRACE_SELFTEST=y
    CONFIG_FTRACE_STARTUP_TEST=y
    # CONFIG_EVENT_TRACE_TEST_SYSCALLS is not set
    # CONFIG_RING_BUFFER_BENCHMARK is not set
    # CONFIG_BUILD_DOCSRC is not set
    # CONFIG_DYNAMIC_DEBUG is not set
    # CONFIG_SAMPLES is not set
    CONFIG_HAVE_ARCH_KGDB=y
    # CONFIG_KGDB is not set
    CONFIG_ARM_UNWIND=y
    CONFIG_DEBUG_USER=y
    CONFIG_DEBUG_ERRORS=y
    # CONFIG_DEBUG_STACK_USAGE is not set
    CONFIG_DEBUG_LL=y
    CONFIG_EARLY_PRINTK=y
    # CONFIG_DEBUG_ICEDCC is not set
    # CONFIG_OC_ETM is not set

    What mistakes I did?

    thx
    Zamek

     
  • Zamek

    Zamek - 2011-03-06

    More information:

    It is an original Colibri PXA270 with an original Colibri Evaluation board.
    I downloaded the actual kernel from git repository. It has Colibri evaluation board. I configure it, and try to boot, but no any message:

    u-boot$ bootm

    ## Booting image at a1000000 …

       Image Name:   Linux kernel image

       Created:      2011-03-06  13:48:11 UTC

       Image Type:   ARM Linux Kernel Image (gzip compressed)

       Data Size:    2267306 Bytes =  2.2 MB

       Load Address: a0008000

       Entry Point:  a0008000

       Verifying Checksum … OK

       Uncompressing Kernel Image … OK

    Starting kernel …

     
  • Zamek

    Zamek - 2011-03-07

    Once more information:

    I get a BSP5.0 from Toradex, which has a 2.6.26 kernel. I tried it, and works well. The colibri support of  mainline kernel seems to be wrong.

     
  • MinimumLaw

    MinimumLaw - 2011-03-08

    Entry point MUST be 0xa0008040.
    Linux kernel _MUST_ start from first instruction in file. Mkimage add 64 bytes (0x40) to kernel image (platform code and bootloader specific staff). As result kernel image was moved from 0xa0008000 to  0xa0008040.

     
  • Zamek

    Zamek - 2011-03-16

    Sorry I cannot understand it exactly. In the mainline kernel there is a Makefile.boot which contains:
    zreladdr-y   := 0xa0008000

    Please let us define the make  commands:

    make colibri_pxa270_defconfig
    make ARCH=arm CROSSCOMPILE=arm-linux-gnueabi-
    make ARCH=arm CROSSCOMPILE=arm-linux-gnueabi-  modules
    make ARCH=arm CROSSCOMPILE=arm-linux-gnueabi-  modules_install
    make ARCH=arm CROSSCOMPILE=arm-linux-gnueabi- uImage
    cp arch/arm/boot/uImage tftpbootdir

    and the u-boot command:
    dhcp
    bootm

    where do I need to set 0xa0008040?

    thx a lot
    Zamek

     
  • Zamek

    Zamek - 2011-03-16

    Once more information:
    I tried to make kernel with an alternative method:
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vmlinux
    arm-linux-gnueabi-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin                                                                        
    gzip -c -9 linux.bin > linux.bin.gz                                                                                                                  
    mkimage -A arm -O linux -T kernel -C gzip -a 0xa0008000 -e 0xa0008000 -n "Linux Kernel Image" -d linux.bin.gz uImage

    I tried to set execute address to 0xa008040, but I got "bad magic number" message.

    thx
    Zamek

     
  • MinimumLaw

    MinimumLaw - 2011-03-17

    Sorry for late answer.

    First of all you may build two diferent kernel images.
    1. XIP-image (unpacked kernel image? executed dirctly from NOR flash). In this case, you must set entry point to 0x08000040 in menuconfig, next make xipimage and pack them to u-boot image (mkimage … -a 0x08000000 -e 0x08000040 -X … xipimage) In this case XIP image was about 5-8MiB.
    2. Normal image. Code of kernel packed into position independed executable code. In this case you not change any address in kernel configuration, build kernel with make bzImage, and next pack bzImage into u-boot image (mkimage … -e 0xa0008000 bzImage). You may add -X (make XIP u-boot image) to u-boot mkimage.

    U-boot mkimage add 64 byte to kernel image. In this 64 bytes contents  platform magic, load address entry point addreess, CRC code and some other info. Them placed at begin of image. Normal kernel image always executed from first instruction. First instruction of kernel image plased at offset 0x40 from u-boot image. This is entry point for kernel.

    U-boot on bootm command:
    1. See magic number, if OK goto step 2, else write no U-boot image
    2. Read CRC from header and check them
    3. Move all code (with U-boot header) from actual place to addres point place (-a key with u-boot mkimage)
    4. Initialise CPU for platform magic anfd other boot stuff
    5. Make jump to entry point (-e key with u-boot mkimage)

    Again - normal (not XIP) kernel image position independed and may be placed at any address.

     
  • Zamek

    Zamek - 2011-03-20

    Thx for your answer,

    At this moment I would like to make a tftp bootable kernel with nfs root.
    I wonder, to use 2.6.26 from bsp5.0 with make uImage is works well, and if I make mainlaine kernel and try to compile it with make uImage, it freeze.

    Are there any different beetwen 2.6.26 and mainline compiling mode?

    thx
    Zamek

     
  • MinimumLaw

    MinimumLaw - 2011-03-21

    Hm… Toradex not support Linux port on Colibri Modules.
    Are you wrote to BSP maker? And one more moment - if you have BSP kernel source? you can use diff utils for change tracking (diff -purN <vanilla_kernel_dir> <bsp_kernel_dir>).
    Unfortunately, i don't have any PXA270 module at this moment (now focused on PXA320), but in last vanilla kernel (2.6.38) present all peripheral devices (but not VGA modulator).
    May be different in memory placement? I see some patches for loading kernel with MMU enabled.

     
  • Zamek

    Zamek - 2011-03-22

    I made diff, but I got 2Mb of text file :O

    I'll show it, but it seems to be a large work.
    I can upload somewhere if you need it.

    thx
    Zamek

     
  • MinimumLaw

    MinimumLaw - 2011-03-24

    First of all - Midnight Commander can walk on diff filesystem (you may enter to diff as into directory).
    Next, dif needs to be run on clean kernel directory (make clean), in another case diff will contents obj modules and other make generated stuff.
    2MiB is very-very big patch. And 2.6.26 is too old kernel. Last log-term support 2.6.35, actual 2.6.38.

     
  • Zamek

    Zamek - 2011-03-30

    Hi,

    Sorry for my late answer.

    Yes I cleared it, but the size is ~2Mb (1560299B).

    I think so my colibri 270 remain with 2.6.26 and for the next new job I need to use a newer version of Colibri or other board.

    Thx for help.
    Zamek

     
  • Zamek

    Zamek - 2011-03-31

    Hi,

    "Unfortunately, i don't have any PXA270 module at this moment (now focused on PXA320), but in last vanilla kernel (2.6.38) present all peripheral devices (but not VGA modulator). May be different in memory placement? I see some patches for loading kernel with MMU enabled. "

    Do you use any of touch screen with 320?
    I have a new job which needs using touchscreen.

    thx
    Zamek

     
  • MinimumLaw

    MinimumLaw - 2011-03-31

    With Colibri PXA320 ver 1.2x (with Philips UCB1400) touchscreen work fine (as well, as on PXA270).

    Module PXA320 ver 2.0 (and Tegra modules) in deliver =)

     
  • Zamek

    Zamek - 2011-04-08

    Hello,

    I found a potentionaly mistake in my colibri pxa270,  installed u-boot on this panel is ver 1.1.2. May be the old version of u-boot isn't compatible with linux mainline kernel?

    Are there any doc to show how can I change u-boot on this panel?

    thx
    Zamek

     
  • Zamek

    Zamek - 2011-04-09

    hello,

    >>Are you have Toradex Evaluation board?
    Yes I have an early evalboard (ver 1.1/2005) and a pxa270 coming with this board.
    >>In this case you may use Colibri Loader ( found at http://files.toradex.com/Colibri/WinCE/ColibriLoader/ ) with Amontec JTAGKey Tiny JTAG module
    Opps! WinCE????? Is it better than U-boot?
    I don't have JTAG yet:(

    thx
    Zamek

     
  • MinimumLaw

    MinimumLaw - 2011-04-09

    1. Not WinCE - only Linux =)
    Colibri not have any sekf-recovery functions. If you kill bootloader only JTAG can recover them. As result NOT revrite bootloader, until NOT have working JTAG interface.
    2. For flashing module via JTAG you can:
    2a. Use Toradex Colibri Loader - Windows Application, working with JTAG on LPT port or with Amontec JTAGKey tiny.
    2b. Use GPL OpenOCD tools - console linux or Windows, working with many JTAG adapters

    In hardware level - module connector X2 have JTAG interface signals. You may connect JTAG adapter directly to them wia ribbon cable, or use Toradex Colibri Evaluation Board as midle element. In this case you connect module and board via ribbon cable, and board with JTAG adapter via standart 20pin header. In both variant you may use ColibriLoader and OpenOCD tools.

    If you use Colibri Loader, you must know - this tools primary look for WindowsCE and work with binary data in WinCE format. For convert raw binary file (u-boot.bin) to WinCE binatry format (used by ColibriLoader) you may use CreteTBIN.exe tools from Toradex as writen in WIKI.

     
  • Zamek

    Zamek - 2011-04-13

    Thx for your responding.
    I have benn waiting for JTAG.

     

Log in to post a comment.